使一个圆与另一个圆成直线

2024-10-04 05:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用pygame设计一个篮球模拟器。你知道吗

我需要它的工作,这样如果前面的空间在一队球员是明确的,他将走向篮圈,如果没有,他将试图通过上述障碍与预先确定的机会,成功越过防守。你知道吗

我第一次遇到问题是因为我使用进攻球员x坐标,简单地将防守移动到(x+30),如下所示:

for i in range(numPlayers):
            if possesion == ("team1"):
                myGame1.team2players[i].x = (myGame1.team1players[i].x + 30)
                myGame1.team2players[i].y = myGame1.team1players[i].y

然而,这引发了一个问题,因为尽管它起作用了,但在游戏的每个循环中,防守移动(x改变)的时间都很短,进攻方会认为这是“完全开放的”:

for i in range(numPlayers):
        if theBall.holder == myGame1.team2players[i] and myGame1.team1players[i].x != range(0,int(theBall.holder.x)):
            print("Wide")
        else:
            print("Nope")

现在我已经修改了我的代码,让球员只有在没有障碍物的情况下才移动,这确实有效,但一旦他遇到防守,他就不会继续移动(即使我把他越过障碍物的几率设为100%)。。。你知道吗

            for i in range(numPlayers):
                if (theBall.holder == myGame1.team2players[i] and myGame1.team1players[i].x <= theBall.holder.x) or (theBall.holder == myGame1.team1players[i] and myGame1.team2players[i].x > theBall.holder.x):
                    onballmove = Player.move(theBall.holder)
                else:
                    cross = random.choices((True, False), [1,0])
                    if cross == (True):
                        onballmove = Player.move(theBall.holder)

有没有更有效的方法来解决这个问题?你知道吗

请注意:

  • 玩家必须在没有障碍物时移动
  • 当遇到障碍时,必须计算出他继续前进的可能性
  • 防守队员必须在进攻队员前面移动,而不是在后面或上面(必须阻止他们的x)

下面是一张代码的图片完整的代码运行显示(myGame1.team2players[i]是第2队的每个球员;第2队总是在球场右侧的球队(红色的“骑士”):

这是游戏的截图。红色是上面第二队的。代码应该对此有意义。你知道吗

Red is team 2 as explained above: code should make sense with this


Tags: and代码inforifrange障碍球员