2626ARG_2LEFT  =  5 
2727ARG_2RIGHT  =  6 
2828
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- 
5929
6030def  snake_embedded_keyscan (dev ):
6131    while  True :
@@ -76,18 +46,6 @@ def snake_embedded_keyscan(dev):
7646            send_command (dev , CommandVals .GameControl , [key_arg ])
7747
7848
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}  )
88-         time .sleep (0.75 )
89- 
90- 
9149def  pong_embedded (dev ):
9250    # Start game 
9351    send_command (dev , CommandVals .StartGame , [Game .Pong ])
@@ -124,79 +82,6 @@ def snake_embedded(dev):
12482    snake_embedded_keyscan (dev )
12583
12684
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- 
20085def  wpm_demo (dev ):
20186    """Capture keypresses and calculate the WPM of the last 10 seconds 
20287    TODO: I'm not sure my calculation is right.""" 
0 commit comments