ECE 4180 Spring 2016 Lab 4
Dependencies: Memory_Card_Game SDFileSystem mbed
main.cpp@6:88e284f2063c, 2016-03-14 (annotated)
- Committer:
- kravemind
- Date:
- Mon Mar 14 19:53:33 2016 +0000
- Revision:
- 6:88e284f2063c
- Parent:
- 5:6853dc5bd06d
fixed nav switch pins;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kravemind | 2:9a3154ce8b51 | 1 | // Authors: Kristen Fernandez, Krish Ravindranath |
kravemind | 5:6853dc5bd06d | 2 | // Target: MBED nxp lpc1768 |
kravemind | 2:9a3154ce8b51 | 3 | |
kravemind | 0:5b9b9c78552d | 4 | #include "mbed.h" |
kravemind | 0:5b9b9c78552d | 5 | #include "SDFileSystem.h" |
kravemind | 0:5b9b9c78552d | 6 | #include "uLCD_4DGL.h" |
kravemind | 0:5b9b9c78552d | 7 | #include "wave_player.h" |
kravemind | 0:5b9b9c78552d | 8 | //#include <time.h> |
kravemind | 0:5b9b9c78552d | 9 | //#include "Nav_Switch.h" |
kravemind | 0:5b9b9c78552d | 10 | |
kravemind | 0:5b9b9c78552d | 11 | AnalogOut DACout(p18); // used to play sound on speaker |
kravemind | 0:5b9b9c78552d | 12 | wave_player waver(&DACout); //wave player plays a *.wav file to D/A and a PWM |
kravemind | 6:88e284f2063c | 13 | uLCD_4DGL uLCD(p28,p27,p26); // serial tx, serial rx, reset pin; |
kravemind | 0:5b9b9c78552d | 14 | SDFileSystem sd(p11, p12, p13, p14, "sd"); //SD card setup |
kravemind | 0:5b9b9c78552d | 15 | |
kravemind | 0:5b9b9c78552d | 16 | // Function to play wav file |
kravemind | 0:5b9b9c78552d | 17 | void playSound(char * wav); |
kravemind | 0:5b9b9c78552d | 18 | void playSound(char * wav) |
kravemind | 0:5b9b9c78552d | 19 | { |
kravemind | 0:5b9b9c78552d | 20 | // open wav file |
kravemind | 0:5b9b9c78552d | 21 | FILE *wave_file; |
kravemind | 0:5b9b9c78552d | 22 | wave_file=fopen(wav,"r"); |
kravemind | 0:5b9b9c78552d | 23 | |
kravemind | 0:5b9b9c78552d | 24 | // play wav file |
kravemind | 0:5b9b9c78552d | 25 | waver.play(wave_file); |
kravemind | 0:5b9b9c78552d | 26 | |
kravemind | 0:5b9b9c78552d | 27 | // close wav file |
kravemind | 0:5b9b9c78552d | 28 | fclose(wave_file); |
kravemind | 0:5b9b9c78552d | 29 | } |
kravemind | 0:5b9b9c78552d | 30 | |
kravemind | 0:5b9b9c78552d | 31 | // Navigation switch class |
kravemind | 0:5b9b9c78552d | 32 | class Nav_Switch |
kravemind | 0:5b9b9c78552d | 33 | { |
kravemind | 0:5b9b9c78552d | 34 | public: |
kravemind | 0:5b9b9c78552d | 35 | Nav_Switch(PinName up,PinName down,PinName left,PinName right,PinName fire); |
kravemind | 0:5b9b9c78552d | 36 | int read(); |
kravemind | 0:5b9b9c78552d | 37 | //boolean functions to test each switch |
kravemind | 0:5b9b9c78552d | 38 | bool up(); |
kravemind | 0:5b9b9c78552d | 39 | bool down(); |
kravemind | 0:5b9b9c78552d | 40 | bool left(); |
kravemind | 0:5b9b9c78552d | 41 | bool right(); |
kravemind | 0:5b9b9c78552d | 42 | bool fire(); |
kravemind | 0:5b9b9c78552d | 43 | //automatic read on RHS |
kravemind | 0:5b9b9c78552d | 44 | operator int (); |
kravemind | 0:5b9b9c78552d | 45 | //index to any switch array style |
kravemind | 0:5b9b9c78552d | 46 | bool operator[](int index) { |
kravemind | 0:5b9b9c78552d | 47 | return _pins[index]; |
kravemind | 0:5b9b9c78552d | 48 | }; |
kravemind | 0:5b9b9c78552d | 49 | private: |
kravemind | 0:5b9b9c78552d | 50 | BusIn _pins; |
kravemind | 0:5b9b9c78552d | 51 | |
kravemind | 0:5b9b9c78552d | 52 | }; |
kravemind | 0:5b9b9c78552d | 53 | Nav_Switch::Nav_Switch (PinName up,PinName down,PinName left,PinName right,PinName fire): |
kravemind | 0:5b9b9c78552d | 54 | _pins(up, down, left, right, fire) |
kravemind | 0:5b9b9c78552d | 55 | { |
kravemind | 0:5b9b9c78552d | 56 | _pins.mode(PullUp); //needed if pullups not on board or a bare nav switch is used - delete otherwise |
kravemind | 0:5b9b9c78552d | 57 | wait(0.001); //delays just a bit for pullups to pull inputs high |
kravemind | 0:5b9b9c78552d | 58 | } |
kravemind | 0:5b9b9c78552d | 59 | inline bool Nav_Switch::up() |
kravemind | 0:5b9b9c78552d | 60 | { |
kravemind | 0:5b9b9c78552d | 61 | return !(_pins[0]); |
kravemind | 0:5b9b9c78552d | 62 | } |
kravemind | 0:5b9b9c78552d | 63 | inline bool Nav_Switch::down() |
kravemind | 0:5b9b9c78552d | 64 | { |
kravemind | 0:5b9b9c78552d | 65 | return !(_pins[1]); |
kravemind | 0:5b9b9c78552d | 66 | } |
kravemind | 0:5b9b9c78552d | 67 | inline bool Nav_Switch::left() |
kravemind | 0:5b9b9c78552d | 68 | { |
kravemind | 0:5b9b9c78552d | 69 | return !(_pins[2]); |
kravemind | 0:5b9b9c78552d | 70 | } |
kravemind | 0:5b9b9c78552d | 71 | inline bool Nav_Switch::right() |
kravemind | 0:5b9b9c78552d | 72 | { |
kravemind | 0:5b9b9c78552d | 73 | return !(_pins[3]); |
kravemind | 0:5b9b9c78552d | 74 | } |
kravemind | 0:5b9b9c78552d | 75 | inline bool Nav_Switch::fire() |
kravemind | 0:5b9b9c78552d | 76 | { |
kravemind | 0:5b9b9c78552d | 77 | return !(_pins[4]); |
kravemind | 0:5b9b9c78552d | 78 | } |
kravemind | 0:5b9b9c78552d | 79 | inline int Nav_Switch::read() |
kravemind | 0:5b9b9c78552d | 80 | { |
kravemind | 0:5b9b9c78552d | 81 | return _pins.read(); |
kravemind | 0:5b9b9c78552d | 82 | } |
kravemind | 0:5b9b9c78552d | 83 | inline Nav_Switch::operator int () |
kravemind | 0:5b9b9c78552d | 84 | { |
kravemind | 0:5b9b9c78552d | 85 | return _pins.read(); |
kravemind | 0:5b9b9c78552d | 86 | } |
kravemind | 0:5b9b9c78552d | 87 | |
kravemind | 0:5b9b9c78552d | 88 | //up, down, left, right, center |
kravemind | 6:88e284f2063c | 89 | Nav_Switch myNav( p9, p6, p7, p5, p8); |
kravemind | 0:5b9b9c78552d | 90 | |
kravemind | 0:5b9b9c78552d | 91 | Timer t; |
kravemind | 0:5b9b9c78552d | 92 | |
kravemind | 0:5b9b9c78552d | 93 | // Game Variables |
kravemind | 0:5b9b9c78552d | 94 | const int BLOCK_SIDE = 29; // side of card |
kravemind | 0:5b9b9c78552d | 95 | const int BUFFER = 5; // space between cards |
kravemind | 0:5b9b9c78552d | 96 | const int NUM_ROWS = 4; // num of rows and also columns since it's a square grid |
kravemind | 0:5b9b9c78552d | 97 | int score = 0; // initialize score |
kravemind | 0:5b9b9c78552d | 98 | float time_limit = 60.0; // set time limit |
kravemind | 0:5b9b9c78552d | 99 | |
kravemind | 0:5b9b9c78552d | 100 | bool start_game = 1; // Determines if it is the start of the game |
kravemind | 0:5b9b9c78552d | 101 | typedef enum { |
kravemind | 0:5b9b9c78552d | 102 | red_circle, blue_circle, green_circle, pink_circle, red_square, blue_square, green_square, pink_square |
kravemind | 0:5b9b9c78552d | 103 | } shapes; |
kravemind | 0:5b9b9c78552d | 104 | int final_shapes[4][4] = {red_circle, blue_circle, green_circle, pink_circle, red_square, blue_square, green_square, pink_square, red_circle, blue_circle, green_circle, pink_circle, red_square, blue_square, green_square, pink_square}; |
kravemind | 0:5b9b9c78552d | 105 | int temp_shape; // temp shape array |
kravemind | 0:5b9b9c78552d | 106 | int block_arr[NUM_ROWS][NUM_ROWS] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; |
kravemind | 0:5b9b9c78552d | 107 | int current_x = 0; |
kravemind | 0:5b9b9c78552d | 108 | int current_y = 0; |
kravemind | 0:5b9b9c78552d | 109 | int prev_x = 0; |
kravemind | 0:5b9b9c78552d | 110 | int prev_y = 0; |
kravemind | 0:5b9b9c78552d | 111 | int num_flips = 0; |
kravemind | 0:5b9b9c78552d | 112 | int current_shape = 0; |
kravemind | 0:5b9b9c78552d | 113 | int prev_shape = 0; |
kravemind | 0:5b9b9c78552d | 114 | int k = 0; |
kravemind | 0:5b9b9c78552d | 115 | int main() { |
kravemind | 0:5b9b9c78552d | 116 | t.start(); |
kravemind | 0:5b9b9c78552d | 117 | while(score<8 && t.read() < time_limit) { |
kravemind | 0:5b9b9c78552d | 118 | if (start_game) { |
kravemind | 0:5b9b9c78552d | 119 | //set_time(1256729737); |
kravemind | 0:5b9b9c78552d | 120 | srand(time(0)); // create random seed so rand() will generate new random numbers each time |
kravemind | 0:5b9b9c78552d | 121 | for (int i = 0; i < NUM_ROWS; i++ ) { |
kravemind | 0:5b9b9c78552d | 122 | for (int j = 0; j < NUM_ROWS; j++ ) { |
kravemind | 0:5b9b9c78552d | 123 | // randomize elements within the array using "shuffle" algorithm |
kravemind | 0:5b9b9c78552d | 124 | int rand_x = rand() % 4; |
kravemind | 0:5b9b9c78552d | 125 | int rand_y = rand() % 4; |
kravemind | 0:5b9b9c78552d | 126 | int temp = final_shapes[i][j]; |
kravemind | 0:5b9b9c78552d | 127 | final_shapes[i][j] = final_shapes[rand_x][rand_y]; |
kravemind | 0:5b9b9c78552d | 128 | final_shapes[rand_x][rand_y] = temp; |
kravemind | 0:5b9b9c78552d | 129 | |
kravemind | 0:5b9b9c78552d | 130 | // draw all white blocks |
kravemind | 0:5b9b9c78552d | 131 | uLCD.filled_rectangle(BUFFER + (j * BLOCK_SIDE), BUFFER + (i * BLOCK_SIDE), BLOCK_SIDE + (j * BLOCK_SIDE), BLOCK_SIDE + (i * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 132 | } |
kravemind | 0:5b9b9c78552d | 133 | } |
kravemind | 0:5b9b9c78552d | 134 | uLCD.rectangle(BUFFER, BUFFER, BLOCK_SIDE, BLOCK_SIDE, RED); // initialize player at top left block |
kravemind | 0:5b9b9c78552d | 135 | start_game = 0; |
kravemind | 0:5b9b9c78552d | 136 | } |
kravemind | 0:5b9b9c78552d | 137 | uLCD.locate(0,15); |
kravemind | 0:5b9b9c78552d | 138 | uLCD.color(0xFFCCCC); |
kravemind | 0:5b9b9c78552d | 139 | uLCD.printf("Time left: %2.0F", time_limit - t.read()); |
kravemind | 0:5b9b9c78552d | 140 | |
kravemind | 0:5b9b9c78552d | 141 | /* |
kravemind | 0:5b9b9c78552d | 142 | * Handle player input for movement |
kravemind | 0:5b9b9c78552d | 143 | */ |
kravemind | 0:5b9b9c78552d | 144 | |
kravemind | 0:5b9b9c78552d | 145 | if (myNav.right() && current_x < NUM_ROWS - 1) { |
kravemind | 0:5b9b9c78552d | 146 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 147 | current_x++; |
kravemind | 0:5b9b9c78552d | 148 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), RED); |
kravemind | 0:5b9b9c78552d | 149 | // playSound("/sd/wavfiles/shoot.wav"); |
kravemind | 0:5b9b9c78552d | 150 | wait(.2); |
kravemind | 0:5b9b9c78552d | 151 | } |
kravemind | 0:5b9b9c78552d | 152 | if (myNav.left() && current_x > 0) { |
kravemind | 0:5b9b9c78552d | 153 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 154 | current_x--; |
kravemind | 0:5b9b9c78552d | 155 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), RED); |
kravemind | 0:5b9b9c78552d | 156 | wait(.2); |
kravemind | 0:5b9b9c78552d | 157 | } |
kravemind | 0:5b9b9c78552d | 158 | if (myNav.down() && current_y < NUM_ROWS - 1) { |
kravemind | 0:5b9b9c78552d | 159 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 160 | current_y++; |
kravemind | 0:5b9b9c78552d | 161 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), RED); |
kravemind | 0:5b9b9c78552d | 162 | wait(.2); |
kravemind | 0:5b9b9c78552d | 163 | } |
kravemind | 0:5b9b9c78552d | 164 | if (myNav.up() && current_y > 0) { |
kravemind | 0:5b9b9c78552d | 165 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 166 | current_y--; |
kravemind | 0:5b9b9c78552d | 167 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), RED); |
kravemind | 0:5b9b9c78552d | 168 | wait(.2); |
kravemind | 0:5b9b9c78552d | 169 | } |
kravemind | 0:5b9b9c78552d | 170 | |
kravemind | 0:5b9b9c78552d | 171 | /* |
kravemind | 0:5b9b9c78552d | 172 | * When user clicks, draw the according shape from the final_shapes array in that spot |
kravemind | 0:5b9b9c78552d | 173 | */ |
kravemind | 0:5b9b9c78552d | 174 | if(myNav.fire() && num_flips < 2 && final_shapes[current_x][current_y]!= -1) { |
kravemind | 0:5b9b9c78552d | 175 | // keep track of shape's position from first click |
kravemind | 0:5b9b9c78552d | 176 | if(num_flips == 0) { |
kravemind | 0:5b9b9c78552d | 177 | prev_x = current_x; |
kravemind | 0:5b9b9c78552d | 178 | prev_y = current_y; |
kravemind | 0:5b9b9c78552d | 179 | } |
kravemind | 0:5b9b9c78552d | 180 | playSound("/sd/wavfiles/buttonpress.wav"); |
kravemind | 0:5b9b9c78552d | 181 | // fill block background with black |
kravemind | 0:5b9b9c78552d | 182 | uLCD.filled_rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), BLACK); |
kravemind | 0:5b9b9c78552d | 183 | prev_shape = current_shape; |
kravemind | 0:5b9b9c78552d | 184 | switch(final_shapes[current_x][current_y]) { |
kravemind | 0:5b9b9c78552d | 185 | case red_circle: |
kravemind | 0:5b9b9c78552d | 186 | uLCD.filled_circle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), 5, RED); |
kravemind | 0:5b9b9c78552d | 187 | current_shape = red_circle; |
kravemind | 0:5b9b9c78552d | 188 | break; |
kravemind | 0:5b9b9c78552d | 189 | case blue_circle: |
kravemind | 0:5b9b9c78552d | 190 | uLCD.filled_circle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), 5, BLUE); |
kravemind | 0:5b9b9c78552d | 191 | current_shape = blue_circle; |
kravemind | 0:5b9b9c78552d | 192 | break; |
kravemind | 0:5b9b9c78552d | 193 | case green_circle: |
kravemind | 0:5b9b9c78552d | 194 | uLCD.filled_circle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), 5, GREEN); |
kravemind | 0:5b9b9c78552d | 195 | current_shape = green_circle; |
kravemind | 0:5b9b9c78552d | 196 | break; |
kravemind | 0:5b9b9c78552d | 197 | case pink_circle: |
kravemind | 0:5b9b9c78552d | 198 | uLCD.filled_circle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), 5, PINK); |
kravemind | 0:5b9b9c78552d | 199 | current_shape = pink_circle; |
kravemind | 0:5b9b9c78552d | 200 | break; |
kravemind | 0:5b9b9c78552d | 201 | case red_square: |
kravemind | 0:5b9b9c78552d | 202 | uLCD.filled_rectangle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), BLOCK_SIDE - BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BLOCK_SIDE - BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), RED); |
kravemind | 0:5b9b9c78552d | 203 | current_shape = red_square; |
kravemind | 0:5b9b9c78552d | 204 | break; |
kravemind | 0:5b9b9c78552d | 205 | case green_square: |
kravemind | 0:5b9b9c78552d | 206 | uLCD.filled_rectangle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), BLOCK_SIDE - BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BLOCK_SIDE - BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), BLUE); |
kravemind | 0:5b9b9c78552d | 207 | current_shape = green_square; |
kravemind | 0:5b9b9c78552d | 208 | break; |
kravemind | 0:5b9b9c78552d | 209 | case blue_square: |
kravemind | 0:5b9b9c78552d | 210 | uLCD.filled_rectangle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), BLOCK_SIDE - BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BLOCK_SIDE - BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), GREEN); |
kravemind | 0:5b9b9c78552d | 211 | current_shape = blue_square; |
kravemind | 0:5b9b9c78552d | 212 | break; |
kravemind | 0:5b9b9c78552d | 213 | case pink_square: |
kravemind | 0:5b9b9c78552d | 214 | uLCD.filled_rectangle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), BLOCK_SIDE - BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BLOCK_SIDE - BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), PINK); |
kravemind | 0:5b9b9c78552d | 215 | current_shape = pink_square; |
kravemind | 0:5b9b9c78552d | 216 | break; |
kravemind | 0:5b9b9c78552d | 217 | default: |
kravemind | 0:5b9b9c78552d | 218 | uLCD.filled_circle(BUFFER + BLOCK_SIDE / 2 + (current_x * BLOCK_SIDE), BUFFER + BLOCK_SIDE / 2 + (current_y * BLOCK_SIDE), 5, BLACK); |
kravemind | 0:5b9b9c78552d | 219 | break; |
kravemind | 0:5b9b9c78552d | 220 | } |
kravemind | 0:5b9b9c78552d | 221 | num_flips++; |
kravemind | 0:5b9b9c78552d | 222 | //wait(.2); |
kravemind | 0:5b9b9c78552d | 223 | } |
kravemind | 0:5b9b9c78552d | 224 | |
kravemind | 0:5b9b9c78552d | 225 | // Prevents double click from registering as match |
kravemind | 0:5b9b9c78552d | 226 | if(num_flips == 2 && current_x == prev_x && current_y == prev_y){ |
kravemind | 0:5b9b9c78552d | 227 | num_flips--; |
kravemind | 0:5b9b9c78552d | 228 | } |
kravemind | 0:5b9b9c78552d | 229 | /* |
kravemind | 0:5b9b9c78552d | 230 | * After user flips 2 cards, check to see if they are correct |
kravemind | 0:5b9b9c78552d | 231 | */ |
kravemind | 0:5b9b9c78552d | 232 | if(num_flips == 2) { |
kravemind | 0:5b9b9c78552d | 233 | num_flips = 0; |
kravemind | 0:5b9b9c78552d | 234 | wait(.5); // seconds before shapes disappears (time to memorize shapes) |
kravemind | 0:5b9b9c78552d | 235 | |
kravemind | 0:5b9b9c78552d | 236 | //user is correct (shapes match) |
kravemind | 0:5b9b9c78552d | 237 | if (prev_shape == current_shape) { |
kravemind | 0:5b9b9c78552d | 238 | // draws black rectangles over the two blocks so they go away |
kravemind | 0:5b9b9c78552d | 239 | uLCD.filled_rectangle(BUFFER + (prev_x * BLOCK_SIDE), BUFFER + (prev_y * BLOCK_SIDE), BLOCK_SIDE + (prev_x * BLOCK_SIDE), BLOCK_SIDE + (prev_y * BLOCK_SIDE), BLACK); |
kravemind | 0:5b9b9c78552d | 240 | uLCD.filled_rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), BLACK); |
kravemind | 0:5b9b9c78552d | 241 | playSound("/sd/wavfiles/supermissile.wav"); |
kravemind | 0:5b9b9c78552d | 242 | final_shapes[current_x][current_y] = -1; |
kravemind | 0:5b9b9c78552d | 243 | final_shapes[prev_x][prev_y] = -1; |
kravemind | 0:5b9b9c78552d | 244 | score++; |
kravemind | 0:5b9b9c78552d | 245 | } |
kravemind | 0:5b9b9c78552d | 246 | // user did not match shapes |
kravemind | 0:5b9b9c78552d | 247 | else { |
kravemind | 0:5b9b9c78552d | 248 | // draws white blocks back over them (back to unflipped) |
kravemind | 0:5b9b9c78552d | 249 | uLCD.filled_rectangle(BUFFER + (prev_x * BLOCK_SIDE), BUFFER + (prev_y * BLOCK_SIDE), BLOCK_SIDE + (prev_x * BLOCK_SIDE), BLOCK_SIDE + (prev_y * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 250 | uLCD.filled_rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 251 | } |
kravemind | 0:5b9b9c78552d | 252 | uLCD.rectangle(BUFFER + (prev_x * BLOCK_SIDE), BUFFER + (prev_y * BLOCK_SIDE), BLOCK_SIDE + (prev_x * BLOCK_SIDE), BLOCK_SIDE + (prev_y * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 253 | uLCD.rectangle(BUFFER + (current_x * BLOCK_SIDE), BUFFER + (current_y * BLOCK_SIDE), BLOCK_SIDE + (current_x * BLOCK_SIDE), BLOCK_SIDE + (current_y * BLOCK_SIDE), WHITE); |
kravemind | 0:5b9b9c78552d | 254 | } |
kravemind | 0:5b9b9c78552d | 255 | } |
kravemind | 0:5b9b9c78552d | 256 | // End Screen |
kravemind | 0:5b9b9c78552d | 257 | t.stop(); |
kravemind | 0:5b9b9c78552d | 258 | uLCD.cls(); |
kravemind | 0:5b9b9c78552d | 259 | uLCD.text_string("GAME OVER", 5, 5, FONT_7X8, 0xFFCCCC); |
kravemind | 0:5b9b9c78552d | 260 | uLCD.locate(5,8); |
kravemind | 0:5b9b9c78552d | 261 | uLCD.printf("Score = %D",score); |
kravemind | 0:5b9b9c78552d | 262 | } |