ECE 4180 Spring 2016 Lab 4

Dependencies:   Memory_Card_Game SDFileSystem mbed

Dependents:   Memory_Card_Game

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?

UserRevisionLine numberNew 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 }