В моем проекте мини-мага, когда юнит на шахматной доске либо ранен, либо убит, квадрат, на котором юнит будет выделен соответственно желтого или красного цвета.
Как только это произойдет, янужно дождаться следующего щелчка игрока, чтобы контур исчез (что означает, очевидно, перерисовать шахматную доску и все юниты в текущей позиции).
Хочу, чтобы я искал, значит перерисоватьвсе до щелчка следующего игрока (на данный момент только для желтого контура / раненого юнита).
Самое простое, что я придумал, это заставить игру ждать с помощью time.sleep (), а затем перерисовать все(в том же фрагменте кода), поэтому я просто вставляю time.sleep (3) сразу после функции highlight_yellow (square_on) и перед оператором, который изменяет состояние игры.
Ну, я не знаю почему, но по какой-то причине это работает (ждет 3 секунды и перерисовывает все), за исключением отображения желтого контурад.
Может кто-нибудь сказать мне, что я делаю не так?
Мой основной цикл следующий:
# main loop
while 1:
# event loop
for event in pygame.event.get():
if event.type is pygame.QUIT:
sys.exit()
# mouse click handling
if event.type == pygame.MOUSEBUTTONDOWN:
new_position = pygame.mouse.get_pos()
# unit not selected
if game_state is 'no unit selected':
if cancel_yellow_square:
draw_chessboard()
for white_unit in white_army:
white_unit.draw_unit()
for black_unit in black_army:
black_unit.draw_unit()
cancel_yellow_square = False
if cancel_red_square:
selected_unit.set_unit_position(selected_unit.new_position[0], selected_unit.new_position[1])
selected_unit = None
draw_chessboard()
for white_unit in white_army:
white_unit.draw_unit()
for black_unit in black_army:
black_unit.draw_unit()
cancel_red_square = False
if turn is 'white army':
for white_unit in white_army:
if white_unit.square_on.collidepoint(new_position[0], new_position[1]):
selected_unit = white_unit
game_state = 'unit selected'
print(str(game_state) + ', this unit is a white ' + str(selected_unit.get_condition()) +
' ' + str(selected_unit.kind))
elif turn is 'black army':
for black_unit in black_army:
if black_unit.square_on.collidepoint(new_position[0], new_position[1]):
selected_unit = black_unit
game_state = 'unit selected'
print(str(game_state) + ', this unit is a black ' + str(selected_unit.get_condition()) +
' ' + str(selected_unit.kind))
elif game_state == 'unit selected':
if turn is 'white army':
current_position = selected_unit.square_on
if not current_position.collidepoint(new_position[0], new_position[1]):
if is_legal_move(selected_unit) and white_unit_collision():
print('this square is occupied by a friendly white unit, therefore the move is not allowed.'
' choose another square')
elif is_legal_move(selected_unit) and black_unit_collision():
for black_unit in black_army:
if black_unit.get_unit_position() == selected_unit.new_position:
if black_unit.get_condition() == 'fresh':
game_state = 'enemy unit wounded'
print('black unit wounded')
elif black_unit.get_condition() == 'wounded':
game_state = 'enemy unit killed'
print('black unit killed')
elif not is_legal_move(selected_unit):
print('move not allowed for this unit')
elif is_legal_move(selected_unit):
game_state = 'unit movement allowed'
turn = 'black army'
else:
print('this unit has been deselected, select a unit')
game_state = 'no unit selected'
current_position = selected_unit.get_unit_position()
new_position = selected_unit.get_unit_position()
selected_unit.set_unit_position(new_position[0], new_position[1])
elif turn is 'black army':
current_position = selected_unit.square_on
if not current_position.collidepoint(new_position[0], new_position[1]):
if is_legal_move(selected_unit) and black_unit_collision():
print('this square is occupied by a friendly black unit, therefore the move is not allowed.'
' choose another square')
elif is_legal_move(selected_unit) and white_unit_collision():
for white_unit in white_army:
if white_unit.get_unit_position() == selected_unit.new_position:
if white_unit.get_condition() == 'fresh':
game_state = 'enemy unit wounded'
print('black unit wounded')
elif white_unit.get_condition() == 'wounded':
game_state = 'enemy unit killed'
print('white unit killed')
elif not is_legal_move(selected_unit):
print('move not allowed for this unit')
elif is_legal_move(selected_unit):
game_state = 'unit movement allowed'
turn = 'white army'
else:
print('this unit has been deselected, select a unit')
game_state = 'no unit selected'
current_position = selected_unit.get_unit_position()
new_position = selected_unit.get_unit_position()
selected_unit.set_unit_position(new_position[0], new_position[1])
# application loop
# highlight square
if game_state == 'unit selected':
highlight_green(selected_unit.square_on)
highlight_possible_moves()
# move unit
if game_state == 'unit movement allowed':
selected_unit.set_unit_position(selected_unit.new_position[0], selected_unit.new_position[1])
game_state = 'no unit selected'
print('---' + str(turn).upper() + ', IS YOUR TURN---')
selected_unit = None
# enemy wounded
if game_state == 'enemy unit wounded':
print(selected_unit.new_position)
if turn == 'white army':
for black_unit in black_army:
if black_unit.get_unit_position() == selected_unit.new_position:
black_unit.set_condition('wounded')
print('this unit has been ' + str(black_unit.get_condition()))
elif turn == 'black army':
for white_unit in white_army:
if white_unit.get_unit_position() == selected_unit.new_position:
white_unit.set_condition('wounded')
print('this unit has been ' + str(white_unit.get_condition()))
square_on = selected_unit.new_position[0], selected_unit.new_position[1], 100, 100
highlight_yellow(square_on)
time.sleep(3)
draw_chessboard()
for white_unit in white_army:
white_unit.draw_unit()
for black_unit in black_army:
black_unit.draw_unit()
if turn == 'white army':
turn = 'black army'
elif turn == 'black army':
turn = 'white army'
game_state = 'no unit selected'
cancel_yellow_square = True
print('---' + str(turn).upper() + ', IS YOUR TURN---')
selected_unit = None
# enemy killed
if game_state == 'enemy unit killed':
print(selected_unit.new_position)
if turn == 'white army':
for black_unit in black_army:
if black_unit.get_unit_position() == selected_unit.new_position:
black_unit.set_condition('killed')
black_army.remove(black_unit)
print('this unit has been ' + str(black_unit.get_condition()))
elif turn == 'black army':
for white_unit in white_army:
if white_unit.get_unit_position() == selected_unit.new_position:
white_unit.set_condition('killed')
white_army.remove(white_unit)
print('this unit has been ' + str(white_unit.get_condition()))
square_on = selected_unit.new_position[0], selected_unit.new_position[1], 100, 100
highlight_red(square_on)
if turn == 'white army':
turn = 'black army'
elif turn == 'black army':
turn = 'white army'
game_state = 'no unit selected'
cancel_red_square = True
print('---' + str(turn).upper() + ', IS YOUR TURN---')
pygame.display.update()