forked from asweigart/inventwithpython3rded
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcollisionDetection.py
More file actions
125 lines (106 loc) · 3.76 KB
/
Copy pathcollisionDetection.py
File metadata and controls
125 lines (106 loc) · 3.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import pygame, sys, random
from pygame.locals import *
def doRectsOverlap(rect1, rect2):
for a, b in [(rect1, rect2), (rect2, rect1)]:
# Check if a's corners are inside b
if ((isPointInsideRect(a.left, a.top, b)) or
(isPointInsideRect(a.left, a.bottom, b)) or
(isPointInsideRect(a.right, a.top, b)) or
(isPointInsideRect(a.right, a.bottom, b))):
return True
return False
def isPointInsideRect(x, y, rect):
if (x > rect.left) and (x < rect.right) and (y > rect.top) and (y < rect.bottom):
return True
else:
return False
# set up pygame
pygame.init()
mainClock = pygame.time.Clock()
# set up the window
WINDOWWIDTH = 400
WINDOWHEIGHT = 400
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption('Collision Detection')
# set up direction variables
DOWNLEFT = 1
DOWNRIGHT = 3
UPLEFT = 7
UPRIGHT = 9
MOVESPEED = 4
# set up the colors
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
WHITE = (255, 255, 255)
# set up the bouncer and food data structures
foodCounter = 0
NEWFOOD = 40
FOODSIZE = 20
bouncer = {'rect':pygame.Rect(300, 100, 50, 50), 'dir':UPLEFT}
foods = []
for i in range(20):
foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH - FOODSIZE), random.randint(0, WINDOWHEIGHT - FOODSIZE), FOODSIZE, FOODSIZE))
# run the game loop
while True:
# check for the QUIT event
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
foodCounter += 1
if foodCounter >= NEWFOOD:
# add new food
foodCounter = 0
foods.append(pygame.Rect(random.randint(0, WINDOWWIDTH - FOODSIZE), random.randint(0, WINDOWHEIGHT - FOODSIZE), FOODSIZE, FOODSIZE))
# draw the black background onto the surface
windowSurface.fill(BLACK)
# move the bouncer data structure
if bouncer['dir'] == DOWNLEFT:
bouncer['rect'].left -= MOVESPEED
bouncer['rect'].top += MOVESPEED
if bouncer['dir'] == DOWNRIGHT:
bouncer['rect'].left += MOVESPEED
bouncer['rect'].top += MOVESPEED
if bouncer['dir'] == UPLEFT:
bouncer['rect'].left -= MOVESPEED
bouncer['rect'].top -= MOVESPEED
if bouncer['dir'] == UPRIGHT:
bouncer['rect'].left += MOVESPEED
bouncer['rect'].top -= MOVESPEED
# check if the bouncer has move out of the window
if bouncer['rect'].top < 0:
# bouncer has moved past the top
if bouncer['dir'] == UPLEFT:
bouncer['dir'] = DOWNLEFT
if bouncer['dir'] == UPRIGHT:
bouncer['dir'] = DOWNRIGHT
if bouncer['rect'].bottom > WINDOWHEIGHT:
# bouncer has moved past the bottom
if bouncer['dir'] == DOWNLEFT:
bouncer['dir'] = UPLEFT
if bouncer['dir'] == DOWNRIGHT:
bouncer['dir'] = UPRIGHT
if bouncer['rect'].left < 0:
# bouncer has moved past the left side
if bouncer['dir'] == DOWNLEFT:
bouncer['dir'] = DOWNRIGHT
if bouncer['dir'] == UPLEFT:
bouncer['dir'] = UPRIGHT
if bouncer['rect'].right > WINDOWWIDTH:
# bouncer has moved past the right side
if bouncer['dir'] == DOWNRIGHT:
bouncer['dir'] = DOWNLEFT
if bouncer['dir'] == UPRIGHT:
bouncer['dir'] = UPLEFT
# draw the bouncer onto the surface
pygame.draw.rect(windowSurface, WHITE, bouncer['rect'])
# check if the bouncer has intersected with any food squares.
for food in foods[:]:
if doRectsOverlap(bouncer['rect'], food):
foods.remove(food)
# draw the food
for i in range(len(foods)):
pygame.draw.rect(windowSurface, GREEN, foods[i])
# draw the window onto the screen
pygame.display.update()
mainClock.tick(40)