Im trying to make a replay button for my game where when you die the game pauses until you press the space bar which resets the game so you can play again. I’m using python with pygame. If you can fix this, please do! It would make my day. If possible, please include the code for the fix and where to put it because I am new to python. The source code below is the game I’m working on.
JavaScript
x
135
135
1
import pygame
2
import random
3
import sys
4
import time
5
6
pygame.init()
7
8
WIDTH = 800
9
HEIGHT = 600
10
11
TRASH = (110, 110, 110)
12
RED = (135, 56, 47)
13
player_pos = [400, 475]
14
player_size = 50
15
screen = pygame.display.set_mode((WIDTH, HEIGHT))
16
17
enemy_size = 50
18
19
SPEED = 11
20
21
FPS = 120
22
23
enemy_pos = [random.randint(0, WIDTH - enemy_size), 0]
24
enemy_list = [enemy_pos]
25
26
game_over = False
27
28
score = 0
29
30
clock = pygame.time.Clock()
31
32
myFont = pygame.font.SysFont("monospace", 35)
33
34
pygame.display.set_caption('Crab Dodge, By: ChanceMeteor515')
35
36
pygame.mouse.set_visible(0)
37
38
39
def drop_enemies(enemy_list):
40
if len(enemy_list) < 9:
41
x_pos = random.randint(0, WIDTH - enemy_size)
42
y_pos = 10
43
enemy_list.append([x_pos, y_pos])
44
45
46
def draw_enemies(enemy_list):
47
for enemy_pos in enemy_list:
48
pygame.draw.rect(screen, TRASH, (enemy_pos[0], enemy_pos[1], enemy_size, enemy_size))
49
50
51
def update_enemies_pos(enemy_list, score):
52
for idx, enemy_pos in enumerate(enemy_list):
53
if enemy_pos[1] >= 0 and enemy_pos[1] < HEIGHT:
54
enemy_pos[1] += SPEED
55
else:
56
enemy_list.pop(idx)
57
score += 1
58
return score
59
60
61
def collision_check(enemy_list, player_pos):
62
for enemy_pos in enemy_list:
63
if detect_collision(enemy_pos, player_pos):
64
return True
65
return False
66
67
68
def edge_detection1(player_pos):
69
if player_pos[0] > 750:
70
return True
71
return False
72
73
74
def edge_detection2(player_pos):
75
if player_pos[0] < 0:
76
return True
77
return False
78
79
80
def detect_collision(player_pos, enemy_pos):
81
p_x = player_pos[0]
82
p_y = player_pos[1]
83
84
e_x = enemy_pos[0]
85
e_y = enemy_pos[1]
86
87
if (e_x >= p_x and e_x < (p_x + player_size)) or (p_x >= e_x and p_x < (e_x + enemy_size)):
88
if (e_y >= p_y and e_y < (p_y + player_size)) or (p_y >= e_y and p_y < (e_y + enemy_size)):
89
return True
90
return False
91
92
while not game_over:
93
for event in pygame.event.get():
94
if event.type == pygame.QUIT:
95
sys.exit()
96
if event.type == pygame.KEYDOWN:
97
x = player_pos[0]
98
y = player_pos[1]
99
if event.key == pygame.K_LEFT:
100
x -= player_size
101
elif event.key == pygame.K_RIGHT:
102
x += player_size
103
elif event.key == pygame.K_a:
104
x -= player_size
105
elif event.key == pygame.K_d:
106
x += player_size
107
elif event.key == pygame.K_q:
108
x -= player_size
109
elif event.key == pygame.K_ESCAPE:
110
sys.exit()
111
112
player_pos = [x, y]
113
screen.fill((194, 178, 128))
114
115
drop_enemies(enemy_list)
116
score = update_enemies_pos(enemy_list, score)
117
118
text = "Score:" + str(score)
119
label = myFont.render(text, 1, (0, 0, 0))
120
screen.blit(label, (WIDTH - 200, HEIGHT - 40))
121
122
if edge_detection1(player_pos):
123
player_pos[0] = 0
124
125
if edge_detection2(player_pos):
126
player_pos[0] = 750
127
128
if collision_check(enemy_list, player_pos):
129
time.sleep(1.4)
130
game_over = True
131
draw_enemies(enemy_list)
132
pygame.draw.rect(screen, RED, (player_pos[0], player_pos[1], player_size, player_size))
133
clock.tick(FPS)
134
pygame.display.update()
135
Advertisement
Answer
OK, I’ve done what you’ve wanted but it requires Tkinter cause I was a bit lazy.
JavaScript
1
151
151
1
import pygame
2
import random
3
import sys
4
import time
5
import os
6
from tkinter import *
7
from tkinter import messagebox
8
print(os.getcwd())
9
10
pygame.init()
11
12
13
def game():
14
WIDTH = 800
15
HEIGHT = 600
16
17
TRASH = (110, 110, 110)
18
RED = (135, 56, 47)
19
player_pos = [400, 475]
20
player_size = 50
21
game_over = False
22
screen = pygame.display.set_mode((WIDTH, HEIGHT))
23
24
enemy_size = 50
25
26
SPEED = 11
27
28
FPS = 120
29
30
enemy_pos = [random.randint(0, WIDTH - enemy_size), 0]
31
enemy_list = [enemy_pos]
32
33
34
score = 0
35
36
clock = pygame.time.Clock()
37
38
myFont = pygame.font.SysFont("monospace", 35)
39
40
pygame.display.set_caption('Crab Dodge, By: ChanceMeteor515')
41
42
pygame.mouse.set_visible(0)
43
44
45
def drop_enemies(enemy_list):
46
if len(enemy_list) < 9:
47
x_pos = random.randint(0, WIDTH - enemy_size)
48
y_pos = 10
49
enemy_list.append([x_pos, y_pos])
50
51
52
def draw_enemies(enemy_list):
53
for enemy_pos in enemy_list:
54
pygame.draw.rect(screen, TRASH, (enemy_pos[0], enemy_pos[1], enemy_size, enemy_size))
55
56
57
def update_enemies_pos(enemy_list, score):
58
for idx, enemy_pos in enumerate(enemy_list):
59
if enemy_pos[1] >= 0 and enemy_pos[1] < HEIGHT:
60
enemy_pos[1] += SPEED
61
else:
62
enemy_list.pop(idx)
63
score += 1
64
return score
65
66
67
def collision_check(enemy_list, player_pos):
68
for enemy_pos in enemy_list:
69
if detect_collision(enemy_pos, player_pos):
70
return True
71
return False
72
73
74
def edge_detection1(player_pos):
75
if player_pos[0] > 750:
76
return True
77
return False
78
79
80
def edge_detection2(player_pos):
81
if player_pos[0] < 0:
82
return True
83
return False
84
85
86
def detect_collision(player_pos, enemy_pos):
87
p_x = player_pos[0]
88
p_y = player_pos[1]
89
90
e_x = enemy_pos[0]
91
e_y = enemy_pos[1]
92
93
if (e_x >= p_x and e_x < (p_x + player_size)) or (p_x >= e_x and p_x < (e_x + enemy_size)):
94
if (e_y >= p_y and e_y < (p_y + player_size)) or (p_y >= e_y and p_y < (e_y + enemy_size)):
95
return True
96
return False
97
98
while not game_over:
99
for event in pygame.event.get():
100
if event.type == pygame.QUIT:
101
sys.exit()
102
if event.type == pygame.KEYDOWN:
103
x = player_pos[0]
104
y = player_pos[1]
105
if event.key == pygame.K_LEFT:
106
x -= player_size
107
elif event.key == pygame.K_RIGHT:
108
x += player_size
109
elif event.key == pygame.K_a:
110
x -= player_size
111
elif event.key == pygame.K_d:
112
x += player_size
113
elif event.key == pygame.K_q:
114
x -= player_size
115
elif event.key == pygame.K_ESCAPE:
116
sys.exit()
117
118
player_pos = [x, y]
119
screen.fill((194, 178, 128))
120
121
drop_enemies(enemy_list)
122
score = update_enemies_pos(enemy_list, score)
123
124
text = "Score:" + str(score)
125
label = myFont.render(text, 1, (0, 0, 0))
126
screen.blit(label, (WIDTH - 200, HEIGHT - 40))
127
128
if edge_detection1(player_pos):
129
player_pos[0] = 0
130
131
if edge_detection2(player_pos):
132
player_pos[0] = 750
133
134
if collision_check(enemy_list, player_pos):
135
time.sleep(1.4)
136
Tk().wm_withdraw() #to hide the main window
137
game_over = True
138
draw_enemies(enemy_list)
139
pygame.draw.rect(screen, RED, (player_pos[0], player_pos[1], player_size, player_size))
140
clock.tick(FPS)
141
pygame.display.update()
142
ans = messagebox.askretrycancel("askretrycancel", "Try again?")
143
root=Tk()
144
root.destroy()
145
return ans
146
while True:
147
if game() == True:
148
pass
149
else:
150
break
151