diff options
Diffstat (limited to 'apps/plugins/minesweeper.c')
-rw-r--r-- | apps/plugins/minesweeper.c | 94 |
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 */ |
199 | int tiles_left; | 198 | int tiles_left; |
200 | 199 | ||
200 | /* number of used flags on the game */ | ||
201 | int flags_used; | ||
202 | |||
201 | /* Because mines are set after the first move... */ | 203 | /* Because mines are set after the first move... */ |
202 | bool no_mines = true; | 204 | bool 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 | ||
399 | int 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 */ |
398 | enum minesweeper_status menu( void ) | 411 | enum 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: |