I don’t what happened, it was working few minutes ago, but now it’s not. It’s crashing every time.
JavaScript
x
101
101
1
import pygame, sys
2
3
WIDTH, HEIGHT = 800, 700
4
pygame.init()
5
win = pygame.display.set_mode((WIDTH, HEIGHT))
6
pygame.display.set_caption("Qix")
7
clock = pygame.time.Clock()
8
9
10
# Player Class
11
class Player:
12
def __init__(self, x, y):
13
self.x = int(x)
14
self.y = int(y)
15
self.rect = pygame.Rect(self.x, self.y, 32, 32)
16
self.color = (250, 120, 60)
17
self.velX = 0
18
self.velY = 0
19
self.left_pressed = False
20
self.right_pressed = False
21
self.up_pressed = False
22
self.down_pressed = False
23
self.speed = 4
24
self.enterPush = False
25
while self.enterPush is True:
26
if self.left_pressed and not self.right_pressed:
27
self.velX = -self.speed
28
if self.right_pressed and not self.left_pressed:
29
self.velX = self.speed
30
31
self.x += self.velX
32
self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)
33
34
35
def draw(self, win):
36
pygame.draw.rect(win, self.color, self.rect)
37
38
39
def push(self):
40
if self.rect.x>760 or self.rect.y>560:
41
42
self.enterPush = True
43
44
45
def update(self):
46
self.velX = 0
47
self.velY = 0
48
while self.enterPush is False:
49
if self.left_pressed and not self.right_pressed:
50
self.velX = -self.speed
51
if self.right_pressed and not self.left_pressed:
52
self.velX = self.speed
53
if self.up_pressed and not self.down_pressed :
54
self.velY = -self.speed
55
if self.down_pressed and not self.up_pressed :
56
self.velY = self.speed
57
58
self.x += self.velX
59
self.y += self.velY
60
61
self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)
62
63
64
65
66
player = Player(WIDTH / 2, HEIGHT / 2)
67
68
69
while True:
70
71
for event in pygame.event.get():
72
if event.type == pygame.QUIT:
73
pygame.quit()
74
sys.exit()
75
if event.type == pygame.KEYDOWN:
76
if event.key == pygame.K_LEFT:
77
player.left_pressed = True
78
if event.key == pygame.K_RIGHT:
79
player.right_pressed = True
80
if event.key == pygame.K_UP:
81
player.up_pressed = True
82
if event.key == pygame.K_DOWN:
83
player.down_pressed = True
84
if event.type == pygame.KEYUP:
85
if event.key == pygame.K_LEFT:
86
player.left_pressed = False
87
if event.key == pygame.K_RIGHT:
88
player.right_pressed = False
89
if event.key == pygame.K_UP:
90
player.up_pressed = False
91
if event.key == pygame.K_DOWN:
92
player.down_pressed = False
93
94
95
win.fill((12, 24, 36))
96
player.draw(win)
97
player.update()
98
pygame.display.flip()
99
clock.tick(60)
100
pygame.display.update()
101
I have to fix this in one hour.
I read other answers related to this but nothing seems to work.
Just adding details
Just adding details Just adding details
Just adding details
Just adding details
Just adding details
Advertisement
Answer
Here You go, fixed the code:
JavaScript
1
94
94
1
import pygame
2
3
WIDTH, HEIGHT = 800, 700
4
pygame.init()
5
win = pygame.display.set_mode((WIDTH, HEIGHT))
6
pygame.display.set_caption("Qix")
7
clock = pygame.time.Clock()
8
9
10
# Player Class
11
class Player:
12
def __init__(self, x, y):
13
self.x = int(x)
14
self.y = int(y)
15
self.rect = pygame.Rect(self.x, self.y, 32, 32)
16
self.color = (250, 120, 60)
17
self.velX = 0
18
self.velY = 0
19
self.left_pressed = False
20
self.right_pressed = False
21
self.up_pressed = False
22
self.down_pressed = False
23
self.speed = 4
24
self.enterPush = False
25
while self.enterPush is True:
26
if self.left_pressed and not self.right_pressed:
27
self.velX = -self.speed
28
if self.right_pressed and not self.left_pressed:
29
self.velX = self.speed
30
31
self.x += self.velX
32
self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)
33
34
def draw(self, win):
35
pygame.draw.rect(win, self.color, self.rect)
36
37
def push(self):
38
if self.rect.x>760 or self.rect.y>560:
39
40
self.enterPush = True
41
42
def update(self):
43
self.velX = 0
44
self.velY = 0
45
# while self.enterPush is False:
46
if self.left_pressed and not self.right_pressed:
47
self.velX = -self.speed
48
if self.right_pressed and not self.left_pressed:
49
self.velX = self.speed
50
if self.up_pressed and not self.down_pressed :
51
self.velY = -self.speed
52
if self.down_pressed and not self.up_pressed :
53
self.velY = self.speed
54
55
self.x += self.velX
56
self.y += self.velY
57
58
self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)
59
60
61
player = Player(WIDTH / 2, HEIGHT / 2)
62
63
while True:
64
65
for event in pygame.event.get():
66
if event.type == pygame.QUIT:
67
pygame.quit()
68
exit()
69
if event.type == pygame.KEYDOWN:
70
if event.key == pygame.K_LEFT:
71
player.left_pressed = True
72
if event.key == pygame.K_RIGHT:
73
player.right_pressed = True
74
if event.key == pygame.K_UP:
75
player.up_pressed = True
76
if event.key == pygame.K_DOWN:
77
player.down_pressed = True
78
if event.type == pygame.KEYUP:
79
if event.key == pygame.K_LEFT:
80
player.left_pressed = False
81
if event.key == pygame.K_RIGHT:
82
player.right_pressed = False
83
if event.key == pygame.K_UP:
84
player.up_pressed = False
85
if event.key == pygame.K_DOWN:
86
player.down_pressed = False
87
88
win.fill((12, 24, 36))
89
player.draw(win)
90
player.update()
91
# pygame.display.flip()
92
clock.tick(60)
93
pygame.display.update()
94
First of about formatting (suggestion according to PEP 8): 1 newline between class method definitions, import like in the code I edited (tho this is acceptable: from module import class, func, etc
).
Also I don’t see the point of both .flip()
and .update()
since they basically do the same.
About Your poblem:
JavaScript
1
15
15
1
while self.enterPush is False:
2
if self.left_pressed and not self.right_pressed:
3
self.velX = -self.speed
4
if self.right_pressed and not self.left_pressed:
5
self.velX = self.speed
6
if self.up_pressed and not self.down_pressed :
7
self.velY = -self.speed
8
if self.down_pressed and not self.up_pressed :
9
self.velY = self.speed
10
11
self.x += self.velX
12
self.y += self.velY
13
14
self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)
15
this was Your issue: the while loop
solution: not using it:
JavaScript
1
18
18
1
def update(self):
2
self.velX = 0
3
self.velY = 0
4
# while self.enterPush is False:
5
if self.left_pressed and not self.right_pressed:
6
self.velX = -self.speed
7
if self.right_pressed and not self.left_pressed:
8
self.velX = self.speed
9
if self.up_pressed and not self.down_pressed :
10
self.velY = -self.speed
11
if self.down_pressed and not self.up_pressed :
12
self.velY = self.speed
13
14
self.x += self.velX
15
self.y += self.velY
16
17
self.rect = pygame.Rect(int(self.x), int(self.y), 32, 32)
18