summaryrefslogtreecommitdiff
path: root/apps/plugins/snake.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/snake.c')
-rw-r--r--apps/plugins/snake.c69
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
36static int board[28][16],snakelength; 47static int board[28][16],snakelength;
37static unsigned int score,hiscore=0; 48static unsigned int score,hiscore=0;
38static short dir,frames,apple,level=1,dead=0; 49static short dir,frames,apple,level=1,dead=0;
@@ -156,26 +167,39 @@ void redraw (void)
156} 167}
157 168
158void game_pause (void) { 169void 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
178void game (void) { 201void 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
224void game_init(void) { 255void 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