Вот фрагмент кода, который обрабатывает ходы игрока и противника:
Код: Выделить всё
if not player_turn:
if sblade.hp < sblade.hp_max*0.3:
if not action_generated:
action = random.randint(1, 2)
action_generated = True
if action == 1:
sblade.idle_index = 0
sblade.is_interrupting = False
sblade.is_preparing_attack = False
sblade.is_preparing_spell = False
sblade.is_idle = True
third_status_message = f"{sblade.name} looks scared and is taking a defensive posture."
sblade.is_parrying = True
player_turn = not player_turn
elif action == 2:
sblade.idle_index = 0
sblade.is_parrying = False
sblade.is_preparing_attack = False
sblade.is_preparing_spell = False
sblade.is_idle = True
third_status_message = f"{sblade.name} looks scared and is preparing a counterspell"
sblade.is_interrupting = True
player_turn = not player_turn
else:
if sblade.is_preparing_attack:
if not virtual_keypress:
# enemy uses the same attack functions as the player and they rely on variables being set to certain
# values by the player pressing Enter so there's a virtual keypress for the enemy
keys_locked = True
sblade.is_moving = True
sblade.is_moving_forward = True
virtual_keypress = True
channeled_attack(sblade, lavender, SBLADE_CHARGED_ATTACK2_LIST)
elif sblade.is_preparing_spell:
if not virtual_keypress:
keys_locked = True
sblade.is_moving = True
sblade.is_moving_forward = True
virtual_keypress = True
channeled_attack(sblade, lavender, SBLADE_CHARGED_SPELL2_LIST)
else:
if not action_generated:
action = random.randint(1, 4)
action_generated = True
if action == 1:
if not virtual_keypress:
keys_locked = True
sblade.is_parrying = False
sblade.is_interrupting = False
sblade.is_moving = True
sblade.is_moving_forward = True
virtual_keypress = True
attack(sblade, lavender, SBLADE_ATTACK_LIST)
elif action == 2:
if not virtual_keypress:
keys_locked = True
sblade.is_parrying = False
sblade.is_interrupting = False
sblade.is_casting = True
virtual_keypress = True
spell(sblade, lavender)
elif action == 3:
sblade.idle_index = 0
sblade.is_interrupting = False
sblade.is_parrying = False
sblade.is_preparing_attack = True
sblade.status_message = f"{sblade.name} is looking for an opening."
player_turn = not player_turn
elif action == 4:
sblade.idle_index = 0
sblade.is_parrying = False
sblade.is_interrupting = False
sblade.is_preparing_spell = True
sblade.status_message = f"{sblade.name} is looking focused."
player_turn = not player_turn
elif player_turn:
if not keys_locked:
arrow_movement(keys_pressed, arrow_rect)
if arrow_rect.y == pos1[1]:
if keys_pressed[pygame.K_RETURN] and not keys_locked:
main.confirm_sound.play()
keys_locked = True
lavender.is_parrying = False
lavender.is_interrupting = False
lavender.is_moving = True
lavender.is_moving_forward = True
attack(lavender, sblade, LAVENDER_ATTACK_LIST)
if arrow_rect.y == pos2[1]:
if keys_pressed[pygame.K_RETURN] and not keys_locked:
main.confirm_sound.play()
keys_locked = True
lavender.is_parrying = False
lavender.is_interrupting = False
lavender.is_casting = True
spell(lavender, sblade)
if arrow_rect.y == pos3[1]:
if keys_pressed[pygame.K_RETURN] and not keys_locked:
main.confirm_sound.play()
lavender.is_parrying = True
lavender.is_interrupting = False
lavender.status_message = "Lavender is preparing to parry."
action_generated = False
virtual_keypress = False
player_turn = not player_turn
if arrow_rect.y == pos4[1]:
if keys_pressed[pygame.K_RETURN] and not keys_locked:
main.confirm_sound.play()
lavender.is_interrupting = True
lavender.is_parrying = False
lavender.status_message = "Lavender is preparing to interrupt a spell."
action_generated = False
virtual_keypress = False
player_turn = not player_turn
Я даже не понимаю, почему так и с чего начать поиск для решения. Может быть, я просто слишком утомлен на этом этапе, потому что до сих пор я придумывал разные вещи и свои собственные, никого не спрашивая, и, несмотря на то, что я добился успеха во всем, кроме этого одного, весь процесс занял оооочень много времени. И у меня также возникла некоторая задержка мозга, и я решил заставить защитные действия игрока установить для ключей key_locked значение True, хотя это всего лишь условие, позволяющее игроку вводить данные, но по какой-то причине это фактически решило проблему, которая меня еще больше смутила. Я просто ослеп и не понимаю, какую разницу это имеет? Но это недопустимое решение, так как для того, чтобы включить ввод данных игроком для последующих ходов, действия врага, которые настраивают направленные атаки, должны были бы установить дляkeys_locked обратно значение False, и когда я заставил их это сделать, направленные атаки немедленно вернулись к выполнению, если игрок использует оборонительные действия.
Подробнее здесь: https://stackoverflow.com/questions/785 ... -attacks-t