-
Notifications
You must be signed in to change notification settings - Fork 1
/
pong_game.py
69 lines (59 loc) · 2.57 KB
/
pong_game.py
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
import segMonster
import segMonsterSimulator
import time
# Make subroutine which calls a file when inactive and kills it otherwise
# Button taps instead of slider
# seems that it does not react when there is something on the top of the paddle
class Game: # for change of speed increase Frame Rate
def __init__(self):
self.pos_1 = 0
self.pos_2 = 0
self.padel_len = 2
self.last_pos_1 = 0
self.last_pos_2 = 0
self.height = 12
self.width = 24
self.ball_position = [int(self.width/2),int(self.height/2)]
self.ball_speed = [1,1]
def reset(self):
self.__init__()
def update(self):
reset = False
self.ball_position[0] += self.ball_speed[0]
self.ball_position[1] += self.ball_speed[1]
if not (0 <= self.ball_position[1] < self.height):
self.ball_speed[1] = -self.ball_speed[1]
self.ball_position[1] = self.height-1 if self.ball_position[1] >= self.height else 0
self.update()
if not (0 < self.ball_position[0] < self.width-1):
if self.ball_position[1] in [(self.pos_1+i if self.ball_position[0] <= 0 else self.pos_2+i) for i in range(-1,self.padel_len)]:
self.ball_speed[0] = -self.ball_speed[0]
self.ball_speed[1] += self.last_pos_1 - self.pos_1 if self.ball_position[0] <= 0 else self.last_pos_2 - self.pos_2
self.ball_position[0] = 1 if self.ball_position[0] <= 0 else self.width-2
self.update()
else:
reset = True
self.reset()
self.last_pos_1 = self.pos_1
self.last_pos_2 = self.pos_2
return reset
def draw_paddel(self, mat, x, y):
for i in range(self.padel_len):
mat[int((y+i)/2)][x][5-(y+i)%2] = 63
def state_to_monster(self):
mat = segMonster.createDigitMatrix()
self.draw_paddel(mat, 0, self.pos_1)
self.draw_paddel(mat, self.width-1, self.pos_2)
mat[int(self.ball_position[1]/2)][self.ball_position[0]] = [0,0,63,63,63,0,63,0] if self.ball_position[1]%2 else [63,63,0,0,0,63,63,0]
return mat
if __name__ == "__main__":
FPS = 10
game = Game()
segMonster.initSock("10.24.200.22",7536) # set target display ip and port
while True:
game.update()
time.sleep(FPS/60)
rawdata = segMonster.convertToDispLayout(game.state_to_monster())
segMonster.sendData(rawdata) # send to display
segMonsterSimulator.sendData(rawdata) # send to display simulation
FPS += 0.001 # exponential growth