我正在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 队始终是球场右侧的球队(红色的“CAVS”):
这是游戏的截图。红色是上面的第 2 队。代码应该对此有意义。