diff options
Diffstat (limited to 'apps/plugins/snake.c')
-rw-r--r-- | apps/plugins/snake.c | 69 |
1 files changed, 56 insertions, 13 deletions
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c index e99cb1c952..242c432e8b 100644 --- a/apps/plugins/snake.c +++ b/apps/plugins/snake.c | |||
@@ -33,6 +33,17 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left; | |||
33 | #include "plugin.h" | 33 | #include "plugin.h" |
34 | #ifdef HAVE_LCD_BITMAP | 34 | #ifdef HAVE_LCD_BITMAP |
35 | 35 | ||
36 | /* variable button definitions */ | ||
37 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
38 | #define SNAKE_QUIT BUTTON_OFF | ||
39 | #define SNAKE_PLAYPAUSE BUTTON_PLAY | ||
40 | |||
41 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
42 | #define SNAKE_QUIT BUTTON_OFF | ||
43 | #define SNAKE_PLAYPAUSE BUTTON_MENU | ||
44 | |||
45 | #endif | ||
46 | |||
36 | static int board[28][16],snakelength; | 47 | static int board[28][16],snakelength; |
37 | static unsigned int score,hiscore=0; | 48 | static unsigned int score,hiscore=0; |
38 | static short dir,frames,apple,level=1,dead=0; | 49 | static short dir,frames,apple,level=1,dead=0; |
@@ -156,26 +167,39 @@ void redraw (void) | |||
156 | } | 167 | } |
157 | 168 | ||
158 | void game_pause (void) { | 169 | void game_pause (void) { |
170 | int button; | ||
159 | rb->lcd_clear_display(); | 171 | rb->lcd_clear_display(); |
160 | rb->lcd_putsxy(3,12,"Game Paused"); | 172 | rb->lcd_putsxy(3,12,"Game Paused"); |
173 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
161 | rb->lcd_putsxy(3,22,"[Play] to resume"); | 174 | rb->lcd_putsxy(3,22,"[Play] to resume"); |
175 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
176 | rb->lcd_putsxy(3,22,"[Menu] to resume"); | ||
177 | #endif | ||
162 | rb->lcd_putsxy(3,32,"[Off] to quit"); | 178 | rb->lcd_putsxy(3,32,"[Off] to quit"); |
163 | rb->lcd_update(); | 179 | rb->lcd_update(); |
164 | while (1) { | 180 | while (1) { |
165 | switch (rb->button_get(true)) { | 181 | button=rb->button_get(true); |
166 | case BUTTON_OFF: | 182 | switch (button) { |
183 | case SNAKE_QUIT: | ||
167 | dead=1; | 184 | dead=1; |
168 | return; | 185 | return; |
169 | case BUTTON_PLAY: | 186 | case SNAKE_PLAYPAUSE: |
170 | redraw(); | 187 | redraw(); |
171 | rb->sleep(HZ/2); | 188 | rb->sleep(HZ/2); |
172 | return; | 189 | return; |
190 | default: | ||
191 | if (rb->default_event_handler(button)==SYS_USB_CONNECTED) { | ||
192 | dead=2; | ||
193 | return; | ||
194 | } | ||
195 | break; | ||
173 | } | 196 | } |
174 | } | 197 | } |
175 | } | 198 | } |
176 | 199 | ||
177 | 200 | ||
178 | void game (void) { | 201 | void game (void) { |
202 | int button; | ||
179 | short x,y; | 203 | short x,y; |
180 | while (1) { | 204 | while (1) { |
181 | frame(); | 205 | frame(); |
@@ -198,7 +222,8 @@ void game (void) { | |||
198 | 222 | ||
199 | rb->sleep(HZ/level); | 223 | rb->sleep(HZ/level); |
200 | 224 | ||
201 | switch (rb->button_get(false)) { | 225 | button=rb->button_get(false); |
226 | switch (button) { | ||
202 | case BUTTON_UP: | 227 | case BUTTON_UP: |
203 | if (dir!=2) dir=0; | 228 | if (dir!=2) dir=0; |
204 | break; | 229 | break; |
@@ -211,17 +236,24 @@ void game (void) { | |||
211 | case BUTTON_LEFT: | 236 | case BUTTON_LEFT: |
212 | if (dir!=1) dir=3; | 237 | if (dir!=1) dir=3; |
213 | break; | 238 | break; |
214 | case BUTTON_OFF: | 239 | case SNAKE_QUIT: |
215 | dead=1; | 240 | dead=1; |
216 | return; | 241 | return; |
217 | case BUTTON_PLAY: | 242 | case SNAKE_PLAYPAUSE: |
218 | game_pause(); | 243 | game_pause(); |
219 | break; | 244 | break; |
220 | } | 245 | default: |
246 | if (rb->default_event_handler(button)==SYS_USB_CONNECTED) { | ||
247 | dead=2; | ||
248 | return; | ||
249 | } | ||
250 | break; | ||
251 | } | ||
221 | } | 252 | } |
222 | } | 253 | } |
223 | 254 | ||
224 | void game_init(void) { | 255 | void game_init(void) { |
256 | int button; | ||
225 | short x,y; | 257 | short x,y; |
226 | char plevel[10],phscore[20]; | 258 | char plevel[10],phscore[20]; |
227 | 259 | ||
@@ -244,12 +276,17 @@ void game_init(void) { | |||
244 | rb->lcd_puts(0,0, plevel); | 276 | rb->lcd_puts(0,0, plevel); |
245 | rb->lcd_puts(0,1, "(1-slow, 9-fast)"); | 277 | rb->lcd_puts(0,1, "(1-slow, 9-fast)"); |
246 | rb->lcd_puts(0,2, "OFF - quit"); | 278 | rb->lcd_puts(0,2, "OFF - quit"); |
279 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
247 | rb->lcd_puts(0,3, "PLAY - start/pause"); | 280 | rb->lcd_puts(0,3, "PLAY - start/pause"); |
281 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
282 | rb->lcd_puts(0,3, "MENU - start/pause"); | ||
283 | #endif | ||
248 | rb->lcd_puts(0,4, phscore); | 284 | rb->lcd_puts(0,4, phscore); |
249 | rb->lcd_update(); | 285 | rb->lcd_update(); |
250 | 286 | ||
251 | while (1) { | 287 | while (1) { |
252 | switch (rb->button_get(true)) { | 288 | button=rb->button_get(true); |
289 | switch (button) { | ||
253 | case BUTTON_RIGHT: | 290 | case BUTTON_RIGHT: |
254 | case BUTTON_UP: | 291 | case BUTTON_UP: |
255 | if (level<9) | 292 | if (level<9) |
@@ -260,13 +297,19 @@ void game_init(void) { | |||
260 | if (level>1) | 297 | if (level>1) |
261 | level--; | 298 | level--; |
262 | break; | 299 | break; |
263 | case BUTTON_OFF: | 300 | case SNAKE_QUIT: |
264 | dead=1; | 301 | dead=1; |
265 | return; | 302 | return; |
266 | break; | 303 | break; |
267 | case BUTTON_PLAY: | 304 | case SNAKE_PLAYPAUSE: |
268 | return; | 305 | return; |
269 | break; | 306 | break; |
307 | default: | ||
308 | if (rb->default_event_handler(button)==SYS_USB_CONNECTED) { | ||
309 | dead=2; | ||
310 | return; | ||
311 | } | ||
312 | break; | ||
270 | } | 313 | } |
271 | rb->snprintf(plevel,sizeof(plevel),"Level - %d",level); | 314 | rb->snprintf(plevel,sizeof(plevel),"Level - %d",level); |
272 | rb->lcd_puts(0,0, plevel); | 315 | rb->lcd_puts(0,0, plevel); |
@@ -283,8 +326,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
283 | 326 | ||
284 | game_init(); | 327 | game_init(); |
285 | rb->lcd_clear_display(); | 328 | rb->lcd_clear_display(); |
286 | game(); | 329 | game(); |
287 | return false; | 330 | return (dead==1)?PLUGIN_OK:PLUGIN_USB_CONNECTED; |
288 | } | 331 | } |
289 | 332 | ||
290 | #endif | 333 | #endif |