summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/minesweeper.c94
1 files changed, 66 insertions, 28 deletions
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 721152a788..41d0a1ef31 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -36,10 +36,9 @@ enum minesweeper_status {
36# define MINESWP_UP BUTTON_UP 36# define MINESWP_UP BUTTON_UP
37# define MINESWP_DOWN BUTTON_DOWN 37# define MINESWP_DOWN BUTTON_DOWN
38# define MINESWP_QUIT BUTTON_OFF 38# define MINESWP_QUIT BUTTON_OFF
39# define MINESWP_START BUTTON_ON 39# define MINESWP_TOGGLE BUTTON_ON
40# define MINESWP_TOGGLE BUTTON_PLAY
41# define MINESWP_TOGGLE2 BUTTON_F1 40# define MINESWP_TOGGLE2 BUTTON_F1
42# define MINESWP_DISCOVER BUTTON_ON 41# define MINESWP_DISCOVER BUTTON_PLAY
43# define MINESWP_DISCOVER2 BUTTON_F2 42# define MINESWP_DISCOVER2 BUTTON_F2
44# define MINESWP_INFO BUTTON_F3 43# define MINESWP_INFO BUTTON_F3
45 44
@@ -47,10 +46,9 @@ enum minesweeper_status {
47# define MINESWP_UP BUTTON_UP 46# define MINESWP_UP BUTTON_UP
48# define MINESWP_DOWN BUTTON_DOWN 47# define MINESWP_DOWN BUTTON_DOWN
49# define MINESWP_QUIT BUTTON_OFF 48# define MINESWP_QUIT BUTTON_OFF
50# define MINESWP_START BUTTON_ON 49# define MINESWP_TOGGLE BUTTON_ON
51# define MINESWP_TOGGLE BUTTON_SELECT
52# define MINESWP_TOGGLE2 BUTTON_F1 50# define MINESWP_TOGGLE2 BUTTON_F1
53# define MINESWP_DISCOVER BUTTON_ON 51# define MINESWP_DISCOVER BUTTON_SELECT
54# define MINESWP_DISCOVER2 BUTTON_F2 52# define MINESWP_DISCOVER2 BUTTON_F2
55# define MINESWP_INFO BUTTON_F3 53# define MINESWP_INFO BUTTON_F3
56 54
@@ -58,7 +56,6 @@ enum minesweeper_status {
58# define MINESWP_UP BUTTON_UP 56# define MINESWP_UP BUTTON_UP
59# define MINESWP_DOWN BUTTON_DOWN 57# define MINESWP_DOWN BUTTON_DOWN
60# define MINESWP_QUIT BUTTON_OFF 58# define MINESWP_QUIT BUTTON_OFF
61# define MINESWP_START BUTTON_MENU
62# define MINESWP_TOGGLE_PRE BUTTON_MENU 59# define MINESWP_TOGGLE_PRE BUTTON_MENU
63# define MINESWP_TOGGLE (BUTTON_MENU | BUTTON_REL) 60# define MINESWP_TOGGLE (BUTTON_MENU | BUTTON_REL)
64# define MINESWP_DISCOVER (BUTTON_MENU | BUTTON_REPEAT) 61# define MINESWP_DISCOVER (BUTTON_MENU | BUTTON_REPEAT)
@@ -69,8 +66,8 @@ enum minesweeper_status {
69# define MINESWP_UP BUTTON_UP 66# define MINESWP_UP BUTTON_UP
70# define MINESWP_DOWN BUTTON_DOWN 67# define MINESWP_DOWN BUTTON_DOWN
71# define MINESWP_QUIT BUTTON_OFF 68# define MINESWP_QUIT BUTTON_OFF
72# define MINESWP_START BUTTON_SELECT
73# define MINESWP_TOGGLE BUTTON_ON 69# define MINESWP_TOGGLE BUTTON_ON
70# define MINESWP_TOGGLE2 BUTTON_REC
74# define MINESWP_DISCOVER BUTTON_SELECT 71# define MINESWP_DISCOVER BUTTON_SELECT
75# define MINESWP_INFO BUTTON_MODE 72# define MINESWP_INFO BUTTON_MODE
76 73
@@ -78,37 +75,40 @@ enum minesweeper_status {
78 75
79#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ 76#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
80 (CONFIG_KEYPAD == IPOD_3G_PAD) 77 (CONFIG_KEYPAD == IPOD_3G_PAD)
81# define MINESWP_UP BUTTON_SCROLL_BACK 78# define MINESWP_SCROLLWHEEL
82# define MINESWP_DOWN BUTTON_SCROLL_FWD 79# define MINESWP_UP BUTTON_MENU
83# define MINESWP_QUIT BUTTON_MENU 80# define MINESWP_DOWN BUTTON_PLAY
84# define MINESWP_START BUTTON_SELECT 81# define MINESWP_NEXT BUTTON_SCROLL_FWD
85# define MINESWP_TOGGLE BUTTON_PLAY 82# define MINESWP_PREV BUTTON_SCROLL_BACK
86# define MINESWP_DISCOVER (BUTTON_SELECT | BUTTON_PLAY) 83# define MINESWP_QUIT (BUTTON_SELECT | BUTTON_MENU)
87# define MINESWP_INFO (BUTTON_SELECT | BUTTON_MENU) 84# define MINESWP_TOGGLE_PRE BUTTON_SELECT
85# define MINESWP_TOGGLE (BUTTON_SELECT | BUTTON_REL)
86# define MINESWP_DISCOVER (BUTTON_SELECT | BUTTON_REPEAT)
87# define MINESWP_INFO (BUTTON_SELECT | BUTTON_PLAY)
88 88
89#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) 89#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
90# define MINESWP_UP BUTTON_UP 90# define MINESWP_UP BUTTON_UP
91# define MINESWP_DOWN BUTTON_DOWN 91# define MINESWP_DOWN BUTTON_DOWN
92# define MINESWP_QUIT BUTTON_POWER 92# define MINESWP_QUIT BUTTON_POWER
93# define MINESWP_START BUTTON_REC 93# define MINESWP_TOGGLE BUTTON_PLAY
94# define MINESWP_TOGGLE BUTTON_PLAY 94# define MINESWP_DISCOVER BUTTON_SELECT
95# define MINESWP_DISCOVER BUTTON_SELECT 95# define MINESWP_INFO BUTTON_REC
96# define MINESWP_INFO (BUTTON_REC | BUTTON_PLAY)
97 96
98#elif (CONFIG_KEYPAD == GIGABEAT_PAD) 97#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
99# define MINESWP_UP BUTTON_UP 98# define MINESWP_UP BUTTON_UP
100# define MINESWP_DOWN BUTTON_DOWN 99# define MINESWP_DOWN BUTTON_DOWN
101# define MINESWP_QUIT BUTTON_POWER 100# define MINESWP_QUIT BUTTON_POWER
102# define MINESWP_START BUTTON_SELECT
103# define MINESWP_TOGGLE BUTTON_A 101# define MINESWP_TOGGLE BUTTON_A
104# define MINESWP_DISCOVER BUTTON_SELECT 102# define MINESWP_DISCOVER BUTTON_SELECT
105# define MINESWP_INFO BUTTON_MENU 103# define MINESWP_INFO BUTTON_MENU
106 104
107#elif (CONFIG_KEYPAD == SANSA_E200_PAD) 105#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
106# define MINESWP_SCROLLWHEEL
108# define MINESWP_UP BUTTON_UP 107# define MINESWP_UP BUTTON_UP
109# define MINESWP_DOWN BUTTON_DOWN 108# define MINESWP_DOWN BUTTON_DOWN
110# define MINESWP_QUIT BUTTON_POWER 109# define MINESWP_QUIT BUTTON_POWER
111# define MINESWP_START BUTTON_SELECT 110# define MINESWP_NEXT BUTTON_SCROLL_DOWN
111# define MINESWP_PREV BUTTON_SCROLL_UP
112# define MINESWP_TOGGLE BUTTON_REC 112# define MINESWP_TOGGLE BUTTON_REC
113# define MINESWP_DISCOVER BUTTON_SELECT 113# define MINESWP_DISCOVER BUTTON_SELECT
114# define MINESWP_INFO (BUTTON_REC|BUTTON_REPEAT) 114# define MINESWP_INFO (BUTTON_REC|BUTTON_REPEAT)
@@ -117,7 +117,6 @@ enum minesweeper_status {
117# define MINESWP_UP BUTTON_SCROLL_UP 117# define MINESWP_UP BUTTON_SCROLL_UP
118# define MINESWP_DOWN BUTTON_SCROLL_DOWN 118# define MINESWP_DOWN BUTTON_SCROLL_DOWN
119# define MINESWP_QUIT BUTTON_POWER 119# define MINESWP_QUIT BUTTON_POWER
120# define MINESWP_START BUTTON_FF
121# define MINESWP_TOGGLE BUTTON_PLAY 120# define MINESWP_TOGGLE BUTTON_PLAY
122# define MINESWP_DISCOVER BUTTON_REW 121# define MINESWP_DISCOVER BUTTON_REW
123# define MINESWP_INFO (BUTTON_REW | BUTTON_PLAY) 122# define MINESWP_INFO (BUTTON_REW | BUTTON_PLAY)
@@ -198,6 +197,9 @@ int p = 16;
198/* number of tiles left on the game */ 197/* number of tiles left on the game */
199int tiles_left; 198int tiles_left;
200 199
200/* number of used flags on the game */
201int flags_used;
202
201/* Because mines are set after the first move... */ 203/* Because mines are set after the first move... */
202bool no_mines = true; 204bool no_mines = true;
203 205
@@ -394,6 +396,17 @@ int count_tiles_left( void )
394 return tiles_left; 396 return tiles_left;
395} 397}
396 398
399int count_flags( void )
400{
401 int flags_used = 0;
402 int i, j;
403 for( i = 0; i < height; i++ )
404 for( j = 0; j < width; j++ )
405 if( minefield[i][j].flag == 1 )
406 flags_used++;
407 return flags_used;
408}
409
397/* welcome screen where player can chose mine percentage */ 410/* welcome screen where player can chose mine percentage */
398enum minesweeper_status menu( void ) 411enum minesweeper_status menu( void )
399{ 412{
@@ -540,6 +553,24 @@ enum minesweeper_status minesweeper( void )
540 y = ( y + height - 1 )%height; 553 y = ( y + height - 1 )%height;
541 break; 554 break;
542 555
556 /*move cursor though the entire field*/
557#ifdef MINESWP_SCROLLWHEEL
558 case MINESWP_NEXT:
559 case MINESWP_NEXT|BUTTON_REPEAT:
560 if (x == width -1 ) {
561 y = ( y + 1 )%height;
562 }
563 x = ( x + 1 )%width;
564 break;
565
566 case MINESWP_PREV:
567 case MINESWP_PREV|BUTTON_REPEAT:
568 if (x == 0) {
569 y = ( y + height - 1 )%height;
570 }
571 x = ( x + width - 1 )%width;
572 break;
573#endif
543 /* discover a tile (and it's neighbors if .neighbors == 0) */ 574 /* discover a tile (and it's neighbors if .neighbors == 0) */
544 case MINESWP_DISCOVER: 575 case MINESWP_DISCOVER:
545#ifdef MINESWP_DISCOVER2 576#ifdef MINESWP_DISCOVER2
@@ -582,9 +613,16 @@ enum minesweeper_status minesweeper( void )
582 case MINESWP_INFO: 613 case MINESWP_INFO:
583 if( no_mines ) 614 if( no_mines )
584 break; 615 break;
585 tiles_left = count_tiles_left(); 616 flags_used = count_flags();
586 rb->splash( HZ*2, "You found %d mines out of %d", 617 if (flags_used == 1) {
587 tiles_left, mine_num ); 618 rb->splash( HZ*2, "You marked 1 field. There are %d mines.",
619 mine_num );
620 }
621 else
622 {
623 rb->splash( HZ*2, "You marked %d fields. There are %d mines.",
624 flags_used, mine_num );
625 }
588 break; 626 break;
589 627
590 default: 628 default: