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 сверху. Код должен иметь смысл с этим.

Красная команда - это команда 2, как объяснение выше

0 ответов

Другие вопросы по тегам