Restart game after showing end screen
Question:
I’m creating a simple tic-tac-toegame with a little bit of support from this page. I want to extend reset_game()
to show the end screen for a few seconds and then reset the game. I do not understand how to handle time. time.sleep
works when I want to wait 2 seconds before showing end screen, but it doesn’t work when I want to show end screen, and then reset game. Here’s my code:
def reset_game():
global winner, draw, main_board, XO
time.sleep(2)
screen.fill((255, 255, 255))
if winner:
end_message = game_font.render(f"{winner} is the winner!", False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
elif draw:
end_message = game_font.render("Draw", False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
winner = None
draw = None
XO = "X"
main_board = [[None] * 3, [None] * 3, [None] * 3]
game_initiating_window()
Answers:
You’re going to want to put a time.sleep
call before you reset the game:
def reset_game():
global winner, draw, main_board, XO
time.sleep(2)
screen.fill((255, 255, 255))
if winner:
end_message = game_font.render(f"{winner} is the winner!", False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
elif draw:
end_message = game_font.render("Draw", False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
time.sleep(3)
winner = None
draw = None
XO = "X"
main_board = [[None] * 3, [None] * 3, [None] * 3]
game_initiating_window()
First you have to blit()
(to draw in buffer), later you have to update()
or flip()
(to send buffer to video card which will display it) and later sleep()
def reset_game():
global winner, draw, main_board, XO
# draw in buffer
screen.fill((255, 255, 255))
if winner:
text = f"{winner} is the winner!"
else:
text = "Draw"
end_message = game_font.render(text, False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
# send buffer to video card - and it will display it on monitor
pygame.display.flip()
# sleep
time.sleep(2)
# reset
winner = None
draw = None
XO = "X"
main_board = [[None] * 3, [None] * 3, [None] * 3]
game_initiating_window()
I’m creating a simple tic-tac-toegame with a little bit of support from this page. I want to extend reset_game()
to show the end screen for a few seconds and then reset the game. I do not understand how to handle time. time.sleep
works when I want to wait 2 seconds before showing end screen, but it doesn’t work when I want to show end screen, and then reset game. Here’s my code:
def reset_game():
global winner, draw, main_board, XO
time.sleep(2)
screen.fill((255, 255, 255))
if winner:
end_message = game_font.render(f"{winner} is the winner!", False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
elif draw:
end_message = game_font.render("Draw", False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
winner = None
draw = None
XO = "X"
main_board = [[None] * 3, [None] * 3, [None] * 3]
game_initiating_window()
You’re going to want to put a time.sleep
call before you reset the game:
def reset_game():
global winner, draw, main_board, XO
time.sleep(2)
screen.fill((255, 255, 255))
if winner:
end_message = game_font.render(f"{winner} is the winner!", False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
elif draw:
end_message = game_font.render("Draw", False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
time.sleep(3)
winner = None
draw = None
XO = "X"
main_board = [[None] * 3, [None] * 3, [None] * 3]
game_initiating_window()
First you have to blit()
(to draw in buffer), later you have to update()
or flip()
(to send buffer to video card which will display it) and later sleep()
def reset_game():
global winner, draw, main_board, XO
# draw in buffer
screen.fill((255, 255, 255))
if winner:
text = f"{winner} is the winner!"
else:
text = "Draw"
end_message = game_font.render(text, False, (0, 0, 0,))
end_message_rect = end_message.get_rect(center = (width/2, (height/2)+50))
screen.blit(end_message, end_message_rect)
# send buffer to video card - and it will display it on monitor
pygame.display.flip()
# sleep
time.sleep(2)
# reset
winner = None
draw = None
XO = "X"
main_board = [[None] * 3, [None] * 3, [None] * 3]
game_initiating_window()