Pygame заставляет один круг двигаться в соответствии с другим
Я занимаюсь разработкой симулятора баскетбола в Pygame.
Мне нужно, чтобы он работал так, чтобы, если пространство перед игроком в 1 команде было свободным, он двигался к обручу, если нет, он будет пытаться преодолеть указанное препятствие с заранее определенной вероятностью успешного пересечения защиты.
Сначала я столкнулся с проблемой, потому что использовал координаты х атакующих игроков и просто перемещал защиту в (х + 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
Однако это подняло проблему, потому что, несмотря на то, что это работало, был короткий момент для каждого цикла игрового цикла, когда защита перемещается (х меняется), и нападение будет рассматривать это как "широко открытый":
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)
Есть ли более эффективные (работающие) средства решения этой проблемы?
Пожалуйста, обратите внимание:
- Игрок должен двигаться, когда нет препятствий
- При наличии препятствий вероятность продолжения его пути должна быть рассчитана.
- Защита должна двигаться впереди атакующего игрока, не позади и не выше (должна остановить их х)
Вот изображение полного кода, запущенного для показа (myGame1.team2players[i] - каждый игрок в команде 2; команда 2 - всегда команда на правой стороне корта (красный CAVS)):
Вот скриншот игры. Красный цвет - команда 2 сверху. Код должен иметь смысл с этим.