26
26
ARG_2LEFT = 5
27
27
ARG_2RIGHT = 6
28
28
29
- # Variables
30
- direction = None
31
- body = []
32
-
33
-
34
- def opposite_direction (direction ):
35
- if direction == keys .RIGHT :
36
- return keys .LEFT
37
- elif direction == keys .LEFT :
38
- return keys .RIGHT
39
- elif direction == keys .UP :
40
- return keys .DOWN
41
- elif direction == keys .DOWN :
42
- return keys .UP
43
- return direction
44
-
45
-
46
- def snake_keyscan ():
47
- global direction
48
- global body
49
-
50
- while True :
51
- current_dir = direction
52
- key = getkey ()
53
- if key in [keys .RIGHT , keys .UP , keys .LEFT , keys .DOWN ]:
54
- # Don't allow accidental suicide if we have a body
55
- if key == opposite_direction (current_dir ) and body :
56
- continue
57
- direction = key
58
-
59
29
60
30
def snake_embedded_keyscan (dev ):
61
31
while True :
@@ -76,18 +46,6 @@ def snake_embedded_keyscan(dev):
76
46
send_command (dev , CommandVals .GameControl , [key_arg ])
77
47
78
48
79
- def game_over (dev ):
80
- global body
81
- while True :
82
- show_string (dev , "GAME " )
83
- time .sleep (0.75 )
84
- show_string (dev , "OVER!" )
85
- time .sleep (0.75 )
86
- score = len (body )
87
- show_string (dev , f"{ score :>3} P" )
88
- time .sleep (0.75 )
89
-
90
-
91
49
def pong_embedded (dev ):
92
50
# Start game
93
51
send_command (dev , CommandVals .StartGame , [Game .Pong ])
@@ -124,79 +82,6 @@ def snake_embedded(dev):
124
82
snake_embedded_keyscan (dev )
125
83
126
84
127
- def snake (dev ):
128
- global direction
129
- global body
130
- head = (0 , 0 )
131
- direction = keys .DOWN
132
- food = (0 , 0 )
133
- while food == head :
134
- food = (random .randint (0 , WIDTH - 1 ), random .randint (0 , HEIGHT - 1 ))
135
-
136
- # Setting
137
- WRAP = False
138
-
139
- thread = threading .Thread (target = snake_keyscan , args = (), daemon = True )
140
- thread .start ()
141
-
142
- prev = datetime .now ()
143
- while True :
144
- now = datetime .now ()
145
- delta = (now - prev ) / timedelta (milliseconds = 1 )
146
-
147
- if delta > 200 :
148
- prev = now
149
- else :
150
- continue
151
-
152
- # Update position
153
- (x , y ) = head
154
- oldhead = head
155
- if direction == keys .RIGHT :
156
- head = (x + 1 , y )
157
- elif direction == keys .LEFT :
158
- head = (x - 1 , y )
159
- elif direction == keys .UP :
160
- head = (x , y - 1 )
161
- elif direction == keys .DOWN :
162
- head = (x , y + 1 )
163
-
164
- # Detect edge condition
165
- (x , y ) = head
166
- if head in body :
167
- return game_over (dev )
168
- elif x >= WIDTH or x < 0 or y >= HEIGHT or y < 0 :
169
- if WRAP :
170
- if x >= WIDTH :
171
- x = 0
172
- elif x < 0 :
173
- x = WIDTH - 1
174
- elif y >= HEIGHT :
175
- y = 0
176
- elif y < 0 :
177
- y = HEIGHT - 1
178
- head = (x , y )
179
- else :
180
- return game_over (dev )
181
- elif head == food :
182
- body .insert (0 , oldhead )
183
- while food == head :
184
- food = (random .randint (0 , WIDTH - 1 ),
185
- random .randint (0 , HEIGHT - 1 ))
186
- elif body :
187
- body .pop ()
188
- body .insert (0 , oldhead )
189
-
190
- # Draw on screen
191
- matrix = [[0 for _ in range (HEIGHT )] for _ in range (WIDTH )]
192
- matrix [x ][y ] = 1
193
- matrix [food [0 ]][food [1 ]] = 1
194
- for bodypart in body :
195
- (x , y ) = bodypart
196
- matrix [x ][y ] = 1
197
- render_matrix (dev , matrix )
198
-
199
-
200
85
def wpm_demo (dev ):
201
86
"""Capture keypresses and calculate the WPM of the last 10 seconds
202
87
TODO: I'm not sure my calculation is right."""
0 commit comments