A game created using the uLCD and an Analog Joystick.
Dependencies: 4DGL-uLCD-SE mbed
main.cpp@0:c034c9e5fb77, 2014-10-21 (annotated)
- Committer:
- sjsm3
- Date:
- Tue Oct 21 01:04:06 2014 +0000
- Revision:
- 0:c034c9e5fb77
Upload
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sjsm3 | 0:c034c9e5fb77 | 1 | #include "mbed.h" |
sjsm3 | 0:c034c9e5fb77 | 2 | #include "uLCD_4DGL.h" |
sjsm3 | 0:c034c9e5fb77 | 3 | |
sjsm3 | 0:c034c9e5fb77 | 4 | uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; |
sjsm3 | 0:c034c9e5fb77 | 5 | |
sjsm3 | 0:c034c9e5fb77 | 6 | AnalogIn vert(p18); |
sjsm3 | 0:c034c9e5fb77 | 7 | AnalogIn horz(p19); |
sjsm3 | 0:c034c9e5fb77 | 8 | AnalogIn sel(p20); |
sjsm3 | 0:c034c9e5fb77 | 9 | |
sjsm3 | 0:c034c9e5fb77 | 10 | // In current layout vert->0 = left, vert->1 = right, horz->0 = down, horz->1 = up |
sjsm3 | 0:c034c9e5fb77 | 11 | // 0=left 1=up 2=right 3=down |
sjsm3 | 0:c034c9e5fb77 | 12 | |
sjsm3 | 0:c034c9e5fb77 | 13 | // Box variables |
sjsm3 | 0:c034c9e5fb77 | 14 | int xloc = 60; |
sjsm3 | 0:c034c9e5fb77 | 15 | int yloc = 60; |
sjsm3 | 0:c034c9e5fb77 | 16 | int rv[9][4] = {{1,1,41,41},{43,1,84,41},{86,1,127,41},{1,43,41,84},{43,43,84,84},{86,43,127,84},{1,86,41,127},{43,86,84,127},{86,86,127,127}}; |
sjsm3 | 0:c034c9e5fb77 | 17 | int spots[9] = {-1,-1,-1,-1,-1,-1,-1,-1,-1}; |
sjsm3 | 0:c034c9e5fb77 | 18 | int emptyloc = -1; |
sjsm3 | 0:c034c9e5fb77 | 19 | int temploc = -1; |
sjsm3 | 0:c034c9e5fb77 | 20 | |
sjsm3 | 0:c034c9e5fb77 | 21 | // Number print variables |
sjsm3 | 0:c034c9e5fb77 | 22 | int printx[9] = {2,8,14,2,8,14,2,8,14}; |
sjsm3 | 0:c034c9e5fb77 | 23 | int printy[9] = {2,2,2,7,7,7,13,13,13}; |
sjsm3 | 0:c034c9e5fb77 | 24 | |
sjsm3 | 0:c034c9e5fb77 | 25 | // Menu variables |
sjsm3 | 0:c034c9e5fb77 | 26 | int selection = 0; |
sjsm3 | 0:c034c9e5fb77 | 27 | int difficulty = 1; // Default difficulty is hard |
sjsm3 | 0:c034c9e5fb77 | 28 | int setselect = 1; |
sjsm3 | 0:c034c9e5fb77 | 29 | |
sjsm3 | 0:c034c9e5fb77 | 30 | // Waits until a big enough change in joystick to select direction |
sjsm3 | 0:c034c9e5fb77 | 31 | int getInput() { |
sjsm3 | 0:c034c9e5fb77 | 32 | int direction = -1; |
sjsm3 | 0:c034c9e5fb77 | 33 | |
sjsm3 | 0:c034c9e5fb77 | 34 | while(direction < 0) { |
sjsm3 | 0:c034c9e5fb77 | 35 | float v = vert.read(); |
sjsm3 | 0:c034c9e5fb77 | 36 | float h = horz.read(); |
sjsm3 | 0:c034c9e5fb77 | 37 | float s = sel.read(); |
sjsm3 | 0:c034c9e5fb77 | 38 | |
sjsm3 | 0:c034c9e5fb77 | 39 | wait(0.01); |
sjsm3 | 0:c034c9e5fb77 | 40 | |
sjsm3 | 0:c034c9e5fb77 | 41 | if(v < .2) |
sjsm3 | 0:c034c9e5fb77 | 42 | direction = 0; |
sjsm3 | 0:c034c9e5fb77 | 43 | else if(v > .8) |
sjsm3 | 0:c034c9e5fb77 | 44 | direction = 2; |
sjsm3 | 0:c034c9e5fb77 | 45 | else if(h < .2) |
sjsm3 | 0:c034c9e5fb77 | 46 | direction = 3; |
sjsm3 | 0:c034c9e5fb77 | 47 | else if(h > .8) |
sjsm3 | 0:c034c9e5fb77 | 48 | direction = 1; |
sjsm3 | 0:c034c9e5fb77 | 49 | else if(s < .01) |
sjsm3 | 0:c034c9e5fb77 | 50 | direction = 5; |
sjsm3 | 0:c034c9e5fb77 | 51 | } |
sjsm3 | 0:c034c9e5fb77 | 52 | |
sjsm3 | 0:c034c9e5fb77 | 53 | return direction; |
sjsm3 | 0:c034c9e5fb77 | 54 | } |
sjsm3 | 0:c034c9e5fb77 | 55 | |
sjsm3 | 0:c034c9e5fb77 | 56 | // Draws the rectanges on the screen |
sjsm3 | 0:c034c9e5fb77 | 57 | void drawRectangles() { |
sjsm3 | 0:c034c9e5fb77 | 58 | for(int i = 0; i < 9; i++) { |
sjsm3 | 0:c034c9e5fb77 | 59 | if(i != emptyloc) |
sjsm3 | 0:c034c9e5fb77 | 60 | uLCD.filled_rectangle(rv[i][0],rv[i][1],rv[i][2],rv[i][3],BLUE); |
sjsm3 | 0:c034c9e5fb77 | 61 | else |
sjsm3 | 0:c034c9e5fb77 | 62 | uLCD.filled_rectangle(rv[i][0],rv[i][1],rv[i][2],rv[i][3],BLACK); |
sjsm3 | 0:c034c9e5fb77 | 63 | } |
sjsm3 | 0:c034c9e5fb77 | 64 | } |
sjsm3 | 0:c034c9e5fb77 | 65 | |
sjsm3 | 0:c034c9e5fb77 | 66 | // Registers joystick flick as a directino change |
sjsm3 | 0:c034c9e5fb77 | 67 | void updateLocations(int direction) { |
sjsm3 | 0:c034c9e5fb77 | 68 | temploc = emptyloc; |
sjsm3 | 0:c034c9e5fb77 | 69 | |
sjsm3 | 0:c034c9e5fb77 | 70 | if(direction == 0) { |
sjsm3 | 0:c034c9e5fb77 | 71 | if(emptyloc !=2 && emptyloc != 5 && emptyloc != 8) |
sjsm3 | 0:c034c9e5fb77 | 72 | emptyloc = emptyloc + 1; //new empty location |
sjsm3 | 0:c034c9e5fb77 | 73 | } |
sjsm3 | 0:c034c9e5fb77 | 74 | else if(direction == 1) { |
sjsm3 | 0:c034c9e5fb77 | 75 | if(emptyloc != 6 && emptyloc != 7 && emptyloc !=8) |
sjsm3 | 0:c034c9e5fb77 | 76 | emptyloc = emptyloc + 3; |
sjsm3 | 0:c034c9e5fb77 | 77 | } |
sjsm3 | 0:c034c9e5fb77 | 78 | else if(direction == 2) { |
sjsm3 | 0:c034c9e5fb77 | 79 | if(emptyloc != 0 && emptyloc != 3 && emptyloc != 6) |
sjsm3 | 0:c034c9e5fb77 | 80 | emptyloc = emptyloc - 1; |
sjsm3 | 0:c034c9e5fb77 | 81 | } |
sjsm3 | 0:c034c9e5fb77 | 82 | else if(direction == 3) { |
sjsm3 | 0:c034c9e5fb77 | 83 | if(emptyloc != 0 && emptyloc != 1 && emptyloc != 2) |
sjsm3 | 0:c034c9e5fb77 | 84 | emptyloc = emptyloc - 3; |
sjsm3 | 0:c034c9e5fb77 | 85 | } |
sjsm3 | 0:c034c9e5fb77 | 86 | } |
sjsm3 | 0:c034c9e5fb77 | 87 | |
sjsm3 | 0:c034c9e5fb77 | 88 | // Updates spots array and reprints the numbers in the rectangles |
sjsm3 | 0:c034c9e5fb77 | 89 | void updateNumbers() { |
sjsm3 | 0:c034c9e5fb77 | 90 | //Flip empty box with box next to its number |
sjsm3 | 0:c034c9e5fb77 | 91 | spots[temploc] = spots[emptyloc]; |
sjsm3 | 0:c034c9e5fb77 | 92 | spots[emptyloc] = 0; |
sjsm3 | 0:c034c9e5fb77 | 93 | |
sjsm3 | 0:c034c9e5fb77 | 94 | for(int i=0;i<9;i++) { |
sjsm3 | 0:c034c9e5fb77 | 95 | uLCD.locate(printx[i],printy[i]); |
sjsm3 | 0:c034c9e5fb77 | 96 | if(spots[i] != 0) |
sjsm3 | 0:c034c9e5fb77 | 97 | uLCD.printf("%d",spots[i]); |
sjsm3 | 0:c034c9e5fb77 | 98 | } |
sjsm3 | 0:c034c9e5fb77 | 99 | } |
sjsm3 | 0:c034c9e5fb77 | 100 | |
sjsm3 | 0:c034c9e5fb77 | 101 | // Check if boxes are ordered correctly |
sjsm3 | 0:c034c9e5fb77 | 102 | int checkWinCondition() { |
sjsm3 | 0:c034c9e5fb77 | 103 | int winner = 1; |
sjsm3 | 0:c034c9e5fb77 | 104 | |
sjsm3 | 0:c034c9e5fb77 | 105 | for(int i=0;i<9;i++) { |
sjsm3 | 0:c034c9e5fb77 | 106 | if(spots[i] != i) |
sjsm3 | 0:c034c9e5fb77 | 107 | winner = 0; |
sjsm3 | 0:c034c9e5fb77 | 108 | } |
sjsm3 | 0:c034c9e5fb77 | 109 | |
sjsm3 | 0:c034c9e5fb77 | 110 | return winner; |
sjsm3 | 0:c034c9e5fb77 | 111 | } |
sjsm3 | 0:c034c9e5fb77 | 112 | |
sjsm3 | 0:c034c9e5fb77 | 113 | // For help when randomly generating the board |
sjsm3 | 0:c034c9e5fb77 | 114 | int already(int dist,int lookfor) { |
sjsm3 | 0:c034c9e5fb77 | 115 | int found = 0; |
sjsm3 | 0:c034c9e5fb77 | 116 | |
sjsm3 | 0:c034c9e5fb77 | 117 | for(int i=0;i<dist;i++) { |
sjsm3 | 0:c034c9e5fb77 | 118 | if(spots[i] == lookfor) |
sjsm3 | 0:c034c9e5fb77 | 119 | found = 1; |
sjsm3 | 0:c034c9e5fb77 | 120 | } |
sjsm3 | 0:c034c9e5fb77 | 121 | |
sjsm3 | 0:c034c9e5fb77 | 122 | return found; |
sjsm3 | 0:c034c9e5fb77 | 123 | } |
sjsm3 | 0:c034c9e5fb77 | 124 | |
sjsm3 | 0:c034c9e5fb77 | 125 | // Generates a gameboard based off of the difficulty settings |
sjsm3 | 0:c034c9e5fb77 | 126 | void generateBoard() { |
sjsm3 | 0:c034c9e5fb77 | 127 | |
sjsm3 | 0:c034c9e5fb77 | 128 | srand(time(NULL)); |
sjsm3 | 0:c034c9e5fb77 | 129 | int ran = rand() % 9; |
sjsm3 | 0:c034c9e5fb77 | 130 | |
sjsm3 | 0:c034c9e5fb77 | 131 | if(difficulty == 0) { |
sjsm3 | 0:c034c9e5fb77 | 132 | int easyspots[9] = {1,2,0,3,4,5,6,7,8}; |
sjsm3 | 0:c034c9e5fb77 | 133 | |
sjsm3 | 0:c034c9e5fb77 | 134 | for(int i=0;i<9;i++) { |
sjsm3 | 0:c034c9e5fb77 | 135 | spots[i] = easyspots[i]; |
sjsm3 | 0:c034c9e5fb77 | 136 | } |
sjsm3 | 0:c034c9e5fb77 | 137 | |
sjsm3 | 0:c034c9e5fb77 | 138 | emptyloc = 2; |
sjsm3 | 0:c034c9e5fb77 | 139 | temploc = 2; |
sjsm3 | 0:c034c9e5fb77 | 140 | } |
sjsm3 | 0:c034c9e5fb77 | 141 | else { |
sjsm3 | 0:c034c9e5fb77 | 142 | for(int i=0;i<9;i++) { |
sjsm3 | 0:c034c9e5fb77 | 143 | // If already in the spots array |
sjsm3 | 0:c034c9e5fb77 | 144 | while(already(i,ran) != 0) |
sjsm3 | 0:c034c9e5fb77 | 145 | ran = rand() % 9; |
sjsm3 | 0:c034c9e5fb77 | 146 | |
sjsm3 | 0:c034c9e5fb77 | 147 | if(ran == 0) { |
sjsm3 | 0:c034c9e5fb77 | 148 | emptyloc = i; |
sjsm3 | 0:c034c9e5fb77 | 149 | temploc = i; |
sjsm3 | 0:c034c9e5fb77 | 150 | } |
sjsm3 | 0:c034c9e5fb77 | 151 | |
sjsm3 | 0:c034c9e5fb77 | 152 | spots[i] = ran; |
sjsm3 | 0:c034c9e5fb77 | 153 | } |
sjsm3 | 0:c034c9e5fb77 | 154 | } |
sjsm3 | 0:c034c9e5fb77 | 155 | |
sjsm3 | 0:c034c9e5fb77 | 156 | uLCD.locate(4,7); |
sjsm3 | 0:c034c9e5fb77 | 157 | uLCD.printf("Shuffling"); |
sjsm3 | 0:c034c9e5fb77 | 158 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 159 | uLCD.locate(4,7); |
sjsm3 | 0:c034c9e5fb77 | 160 | uLCD.printf("Shuffling.."); |
sjsm3 | 0:c034c9e5fb77 | 161 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 162 | uLCD.locate(4,7); |
sjsm3 | 0:c034c9e5fb77 | 163 | uLCD.printf("Shuffling...."); |
sjsm3 | 0:c034c9e5fb77 | 164 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 165 | uLCD.cls(); |
sjsm3 | 0:c034c9e5fb77 | 166 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 167 | } |
sjsm3 | 0:c034c9e5fb77 | 168 | |
sjsm3 | 0:c034c9e5fb77 | 169 | // Game loop |
sjsm3 | 0:c034c9e5fb77 | 170 | void game() { |
sjsm3 | 0:c034c9e5fb77 | 171 | drawRectangles(); |
sjsm3 | 0:c034c9e5fb77 | 172 | updateNumbers(); |
sjsm3 | 0:c034c9e5fb77 | 173 | |
sjsm3 | 0:c034c9e5fb77 | 174 | int win = 0; |
sjsm3 | 0:c034c9e5fb77 | 175 | |
sjsm3 | 0:c034c9e5fb77 | 176 | while(1) { |
sjsm3 | 0:c034c9e5fb77 | 177 | int direction = getInput(); |
sjsm3 | 0:c034c9e5fb77 | 178 | // If center button is clicked, keep checking |
sjsm3 | 0:c034c9e5fb77 | 179 | if(direction == 5) |
sjsm3 | 0:c034c9e5fb77 | 180 | break; |
sjsm3 | 0:c034c9e5fb77 | 181 | |
sjsm3 | 0:c034c9e5fb77 | 182 | updateLocations(direction); |
sjsm3 | 0:c034c9e5fb77 | 183 | drawRectangles(); |
sjsm3 | 0:c034c9e5fb77 | 184 | updateNumbers(); |
sjsm3 | 0:c034c9e5fb77 | 185 | win = checkWinCondition(); |
sjsm3 | 0:c034c9e5fb77 | 186 | |
sjsm3 | 0:c034c9e5fb77 | 187 | if(win == 1) |
sjsm3 | 0:c034c9e5fb77 | 188 | break; |
sjsm3 | 0:c034c9e5fb77 | 189 | |
sjsm3 | 0:c034c9e5fb77 | 190 | wait(0.3); |
sjsm3 | 0:c034c9e5fb77 | 191 | } |
sjsm3 | 0:c034c9e5fb77 | 192 | uLCD.cls(); |
sjsm3 | 0:c034c9e5fb77 | 193 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 194 | uLCD.textbackground_color(BLACK); |
sjsm3 | 0:c034c9e5fb77 | 195 | uLCD.color(RED); |
sjsm3 | 0:c034c9e5fb77 | 196 | uLCD.locate(5,7); |
sjsm3 | 0:c034c9e5fb77 | 197 | uLCD.printf("Game Over!"); |
sjsm3 | 0:c034c9e5fb77 | 198 | |
sjsm3 | 0:c034c9e5fb77 | 199 | if(win == 1) { |
sjsm3 | 0:c034c9e5fb77 | 200 | uLCD.locate(6,10); |
sjsm3 | 0:c034c9e5fb77 | 201 | uLCD.printf("You Won!"); |
sjsm3 | 0:c034c9e5fb77 | 202 | } |
sjsm3 | 0:c034c9e5fb77 | 203 | |
sjsm3 | 0:c034c9e5fb77 | 204 | int direction = getInput(); |
sjsm3 | 0:c034c9e5fb77 | 205 | while(direction != 5) |
sjsm3 | 0:c034c9e5fb77 | 206 | getInput(); |
sjsm3 | 0:c034c9e5fb77 | 207 | |
sjsm3 | 0:c034c9e5fb77 | 208 | uLCD.cls(); |
sjsm3 | 0:c034c9e5fb77 | 209 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 210 | } |
sjsm3 | 0:c034c9e5fb77 | 211 | |
sjsm3 | 0:c034c9e5fb77 | 212 | // Settings menu loop |
sjsm3 | 0:c034c9e5fb77 | 213 | void settings() { |
sjsm3 | 0:c034c9e5fb77 | 214 | uLCD.locate(5,4); |
sjsm3 | 0:c034c9e5fb77 | 215 | uLCD.printf("Easy Mode"); |
sjsm3 | 0:c034c9e5fb77 | 216 | uLCD.locate(5,11); |
sjsm3 | 0:c034c9e5fb77 | 217 | uLCD.printf("Hard Mode"); |
sjsm3 | 0:c034c9e5fb77 | 218 | |
sjsm3 | 0:c034c9e5fb77 | 219 | if(setselect == 0) |
sjsm3 | 0:c034c9e5fb77 | 220 | uLCD.line(22, 42, 106, 42, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 221 | else |
sjsm3 | 0:c034c9e5fb77 | 222 | uLCD.line(22, 98, 106, 98, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 223 | |
sjsm3 | 0:c034c9e5fb77 | 224 | int direction = getInput(); |
sjsm3 | 0:c034c9e5fb77 | 225 | |
sjsm3 | 0:c034c9e5fb77 | 226 | while(direction !=5 ) { |
sjsm3 | 0:c034c9e5fb77 | 227 | if(direction == 1 && setselect == 1) { |
sjsm3 | 0:c034c9e5fb77 | 228 | uLCD.line(22, 98, 106, 98, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 229 | uLCD.line(22, 42, 106, 42, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 230 | setselect = 0; |
sjsm3 | 0:c034c9e5fb77 | 231 | } |
sjsm3 | 0:c034c9e5fb77 | 232 | else if(direction == 3 && setselect == 0) { |
sjsm3 | 0:c034c9e5fb77 | 233 | uLCD.line(22, 42, 106, 42, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 234 | uLCD.line(22, 98, 106, 98, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 235 | setselect = 1; |
sjsm3 | 0:c034c9e5fb77 | 236 | } |
sjsm3 | 0:c034c9e5fb77 | 237 | |
sjsm3 | 0:c034c9e5fb77 | 238 | direction = getInput(); |
sjsm3 | 0:c034c9e5fb77 | 239 | } |
sjsm3 | 0:c034c9e5fb77 | 240 | |
sjsm3 | 0:c034c9e5fb77 | 241 | difficulty = setselect; |
sjsm3 | 0:c034c9e5fb77 | 242 | uLCD.cls(); |
sjsm3 | 0:c034c9e5fb77 | 243 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 244 | } |
sjsm3 | 0:c034c9e5fb77 | 245 | |
sjsm3 | 0:c034c9e5fb77 | 246 | // Help screen loop |
sjsm3 | 0:c034c9e5fb77 | 247 | void help() { |
sjsm3 | 0:c034c9e5fb77 | 248 | uLCD.locate(1,1); |
sjsm3 | 0:c034c9e5fb77 | 249 | uLCD.printf("Change difficulty in settings"); |
sjsm3 | 0:c034c9e5fb77 | 250 | uLCD.locate(1,4); |
sjsm3 | 0:c034c9e5fb77 | 251 | uLCD.printf("Flick stick to\n move blocks"); |
sjsm3 | 0:c034c9e5fb77 | 252 | uLCD.locate(1,7); |
sjsm3 | 0:c034c9e5fb77 | 253 | uLCD.printf("Empty block in\n top left"); |
sjsm3 | 0:c034c9e5fb77 | 254 | uLCD.locate(1,10); |
sjsm3 | 0:c034c9e5fb77 | 255 | uLCD.printf("Click to reset\n back to menu"); |
sjsm3 | 0:c034c9e5fb77 | 256 | uLCD.locate(1,14); |
sjsm3 | 0:c034c9e5fb77 | 257 | uLCD.printf("Click to return\n to menu now"); |
sjsm3 | 0:c034c9e5fb77 | 258 | |
sjsm3 | 0:c034c9e5fb77 | 259 | int direction = getInput(); |
sjsm3 | 0:c034c9e5fb77 | 260 | |
sjsm3 | 0:c034c9e5fb77 | 261 | while(direction != 5) { |
sjsm3 | 0:c034c9e5fb77 | 262 | direction = getInput(); |
sjsm3 | 0:c034c9e5fb77 | 263 | } |
sjsm3 | 0:c034c9e5fb77 | 264 | |
sjsm3 | 0:c034c9e5fb77 | 265 | uLCD.cls(); |
sjsm3 | 0:c034c9e5fb77 | 266 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 267 | } |
sjsm3 | 0:c034c9e5fb77 | 268 | |
sjsm3 | 0:c034c9e5fb77 | 269 | // Main menu loop |
sjsm3 | 0:c034c9e5fb77 | 270 | int main() { |
sjsm3 | 0:c034c9e5fb77 | 271 | uLCD.baudrate(3000000); |
sjsm3 | 0:c034c9e5fb77 | 272 | |
sjsm3 | 0:c034c9e5fb77 | 273 | uLCD.textbackground_color(BLACK); |
sjsm3 | 0:c034c9e5fb77 | 274 | uLCD.color(RED); |
sjsm3 | 0:c034c9e5fb77 | 275 | |
sjsm3 | 0:c034c9e5fb77 | 276 | uLCD.locate(4,4); |
sjsm3 | 0:c034c9e5fb77 | 277 | uLCD.printf("Start Game"); |
sjsm3 | 0:c034c9e5fb77 | 278 | uLCD.locate(5,7); |
sjsm3 | 0:c034c9e5fb77 | 279 | uLCD.printf("Settings"); |
sjsm3 | 0:c034c9e5fb77 | 280 | uLCD.locate(7,11); |
sjsm3 | 0:c034c9e5fb77 | 281 | uLCD.printf("Help"); |
sjsm3 | 0:c034c9e5fb77 | 282 | |
sjsm3 | 0:c034c9e5fb77 | 283 | uLCD.line(22, 42, 106, 42, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 284 | |
sjsm3 | 0:c034c9e5fb77 | 285 | while(1) { |
sjsm3 | 0:c034c9e5fb77 | 286 | |
sjsm3 | 0:c034c9e5fb77 | 287 | int direction = getInput(); |
sjsm3 | 0:c034c9e5fb77 | 288 | |
sjsm3 | 0:c034c9e5fb77 | 289 | while(direction == 0 || direction == 2) |
sjsm3 | 0:c034c9e5fb77 | 290 | direction = getInput(); |
sjsm3 | 0:c034c9e5fb77 | 291 | |
sjsm3 | 0:c034c9e5fb77 | 292 | // If clicked in |
sjsm3 | 0:c034c9e5fb77 | 293 | if(direction == 5) { |
sjsm3 | 0:c034c9e5fb77 | 294 | if(selection == 0) { |
sjsm3 | 0:c034c9e5fb77 | 295 | uLCD.cls(); |
sjsm3 | 0:c034c9e5fb77 | 296 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 297 | uLCD.textbackground_color(BLUE); |
sjsm3 | 0:c034c9e5fb77 | 298 | generateBoard(); |
sjsm3 | 0:c034c9e5fb77 | 299 | game(); |
sjsm3 | 0:c034c9e5fb77 | 300 | } |
sjsm3 | 0:c034c9e5fb77 | 301 | else if(selection == 1) { |
sjsm3 | 0:c034c9e5fb77 | 302 | uLCD.cls(); |
sjsm3 | 0:c034c9e5fb77 | 303 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 304 | settings(); |
sjsm3 | 0:c034c9e5fb77 | 305 | selection = 0; |
sjsm3 | 0:c034c9e5fb77 | 306 | } |
sjsm3 | 0:c034c9e5fb77 | 307 | else if(selection == 2) { |
sjsm3 | 0:c034c9e5fb77 | 308 | uLCD.cls(); |
sjsm3 | 0:c034c9e5fb77 | 309 | wait(0.2); |
sjsm3 | 0:c034c9e5fb77 | 310 | help(); |
sjsm3 | 0:c034c9e5fb77 | 311 | selection = 0; |
sjsm3 | 0:c034c9e5fb77 | 312 | } |
sjsm3 | 0:c034c9e5fb77 | 313 | |
sjsm3 | 0:c034c9e5fb77 | 314 | uLCD.locate(4,4); |
sjsm3 | 0:c034c9e5fb77 | 315 | uLCD.printf("Start Game"); |
sjsm3 | 0:c034c9e5fb77 | 316 | uLCD.locate(5,7); |
sjsm3 | 0:c034c9e5fb77 | 317 | uLCD.printf("Settings"); |
sjsm3 | 0:c034c9e5fb77 | 318 | uLCD.locate(7,11); |
sjsm3 | 0:c034c9e5fb77 | 319 | uLCD.printf("Help"); |
sjsm3 | 0:c034c9e5fb77 | 320 | |
sjsm3 | 0:c034c9e5fb77 | 321 | uLCD.line(22, 42, 106, 42, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 322 | } |
sjsm3 | 0:c034c9e5fb77 | 323 | else if(direction == 1 && (selection == 1 || selection == 2)) { |
sjsm3 | 0:c034c9e5fb77 | 324 | selection = selection-1; |
sjsm3 | 0:c034c9e5fb77 | 325 | if(selection == 0) { |
sjsm3 | 0:c034c9e5fb77 | 326 | uLCD.line(22, 42, 106, 42, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 327 | uLCD.line(22, 68, 106, 68, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 328 | uLCD.line(22, 98, 106, 98, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 329 | } |
sjsm3 | 0:c034c9e5fb77 | 330 | else { |
sjsm3 | 0:c034c9e5fb77 | 331 | uLCD.line(22, 42, 106, 42, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 332 | uLCD.line(22, 68, 106, 68, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 333 | uLCD.line(22, 98, 106, 98, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 334 | } |
sjsm3 | 0:c034c9e5fb77 | 335 | } |
sjsm3 | 0:c034c9e5fb77 | 336 | else if(direction == 3 && (selection == 0 || selection == 1)) { |
sjsm3 | 0:c034c9e5fb77 | 337 | selection = selection+1; |
sjsm3 | 0:c034c9e5fb77 | 338 | if(selection == 1) { |
sjsm3 | 0:c034c9e5fb77 | 339 | uLCD.line(22, 42, 106, 42, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 340 | uLCD.line(22, 68, 106, 68, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 341 | uLCD.line(22, 98, 106, 98, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 342 | } |
sjsm3 | 0:c034c9e5fb77 | 343 | else { |
sjsm3 | 0:c034c9e5fb77 | 344 | uLCD.line(22, 42, 106, 42, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 345 | uLCD.line(22, 68, 106, 68, BLACK); |
sjsm3 | 0:c034c9e5fb77 | 346 | uLCD.line(22, 98, 106, 98, WHITE); |
sjsm3 | 0:c034c9e5fb77 | 347 | } |
sjsm3 | 0:c034c9e5fb77 | 348 | } |
sjsm3 | 0:c034c9e5fb77 | 349 | |
sjsm3 | 0:c034c9e5fb77 | 350 | //Wait to essentialially debounce (want to flick switch) |
sjsm3 | 0:c034c9e5fb77 | 351 | wait(0.3); |
sjsm3 | 0:c034c9e5fb77 | 352 | |
sjsm3 | 0:c034c9e5fb77 | 353 | } |
sjsm3 | 0:c034c9e5fb77 | 354 | } |