Various applications using the LCD. Cycle through the applications by pressing down on the joystick
Dependencies: C12832 MMA7660 mbed
main.cpp@0:b8fc40cb537b, 2014-02-21 (annotated)
- Committer:
- jad19925
- Date:
- Fri Feb 21 22:12:31 2014 +0000
- Revision:
- 0:b8fc40cb537b
- Child:
- 1:ff7ee2c32cd1
LCD Games base
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jad19925 | 0:b8fc40cb537b | 1 | #include "mbed.h" |
jad19925 | 0:b8fc40cb537b | 2 | #include "C12832.h" |
jad19925 | 0:b8fc40cb537b | 3 | #include "MMA7660.h" |
jad19925 | 0:b8fc40cb537b | 4 | |
jad19925 | 0:b8fc40cb537b | 5 | BusIn joy(p15,p12,p13,p16); |
jad19925 | 0:b8fc40cb537b | 6 | DigitalIn fire(p14); |
jad19925 | 0:b8fc40cb537b | 7 | C12832 lcd(p5, p7, p6, p8, p11); |
jad19925 | 0:b8fc40cb537b | 8 | AnalogIn pot1(p19); |
jad19925 | 0:b8fc40cb537b | 9 | AnalogIn pot2(p20); |
jad19925 | 0:b8fc40cb537b | 10 | DigitalIn joyUp(p15); |
jad19925 | 0:b8fc40cb537b | 11 | DigitalIn joyDown(p12); |
jad19925 | 0:b8fc40cb537b | 12 | DigitalIn joyLeft(p13); |
jad19925 | 0:b8fc40cb537b | 13 | DigitalIn joyRight(p16); |
jad19925 | 0:b8fc40cb537b | 14 | MMA7660 MMA(p28, p27); //I2C Accelerometer |
jad19925 | 0:b8fc40cb537b | 15 | Serial pc(USBTX, USBRX); // tx, rx |
jad19925 | 0:b8fc40cb537b | 16 | |
jad19925 | 0:b8fc40cb537b | 17 | BusOut leds(LED1,LED2,LED3,LED4); |
jad19925 | 0:b8fc40cb537b | 18 | int appIndex = 0; |
jad19925 | 0:b8fc40cb537b | 19 | const int NUM_APPS = 4; |
jad19925 | 0:b8fc40cb537b | 20 | bool appSwitch = true; |
jad19925 | 0:b8fc40cb537b | 21 | enum SnakeDirection{RIGHT,LEFT,UP,DOWN}; |
jad19925 | 0:b8fc40cb537b | 22 | const int SCREEN_WIDTH = 128; |
jad19925 | 0:b8fc40cb537b | 23 | const int SCREEN_HEIGHT = 32; |
jad19925 | 0:b8fc40cb537b | 24 | struct Point {int x; int y;}; |
jad19925 | 0:b8fc40cb537b | 25 | /* |
jad19925 | 0:b8fc40cb537b | 26 | Index App |
jad19925 | 0:b8fc40cb537b | 27 | 0 Etch a sketch |
jad19925 | 0:b8fc40cb537b | 28 | 1 Flat Level |
jad19925 | 0:b8fc40cb537b | 29 | 2 Snake |
jad19925 | 0:b8fc40cb537b | 30 | 3 ? |
jad19925 | 0:b8fc40cb537b | 31 | */ |
jad19925 | 0:b8fc40cb537b | 32 | |
jad19925 | 0:b8fc40cb537b | 33 | int main() |
jad19925 | 0:b8fc40cb537b | 34 | { |
jad19925 | 0:b8fc40cb537b | 35 | //potentiometer variables |
jad19925 | 0:b8fc40cb537b | 36 | float etchX = 0; |
jad19925 | 0:b8fc40cb537b | 37 | float etchY = 0; |
jad19925 | 0:b8fc40cb537b | 38 | //accelerometer variables |
jad19925 | 0:b8fc40cb537b | 39 | int x=0,y=0; |
jad19925 | 0:b8fc40cb537b | 40 | //snake variables |
jad19925 | 0:b8fc40cb537b | 41 | const int SNAKE_MAX = 256; |
jad19925 | 0:b8fc40cb537b | 42 | Point snake[SNAKE_MAX]; |
jad19925 | 0:b8fc40cb537b | 43 | int snakeHead = 4;//the front filled square in the snake |
jad19925 | 0:b8fc40cb537b | 44 | int snakeTail = 0; |
jad19925 | 0:b8fc40cb537b | 45 | SnakeDirection snakeGo = RIGHT; |
jad19925 | 0:b8fc40cb537b | 46 | bool gameOver = false; |
jad19925 | 0:b8fc40cb537b | 47 | int points = 0; |
jad19925 | 0:b8fc40cb537b | 48 | Point goalLoc; |
jad19925 | 0:b8fc40cb537b | 49 | |
jad19925 | 0:b8fc40cb537b | 50 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 51 | lcd.printf("hello world"); |
jad19925 | 0:b8fc40cb537b | 52 | |
jad19925 | 0:b8fc40cb537b | 53 | while(1) { |
jad19925 | 0:b8fc40cb537b | 54 | if (fire) { |
jad19925 | 0:b8fc40cb537b | 55 | appIndex = (appIndex+1)%NUM_APPS; |
jad19925 | 0:b8fc40cb537b | 56 | leds=0xf; |
jad19925 | 0:b8fc40cb537b | 57 | appSwitch = true; |
jad19925 | 0:b8fc40cb537b | 58 | } |
jad19925 | 0:b8fc40cb537b | 59 | else { |
jad19925 | 0:b8fc40cb537b | 60 | leds=joy; |
jad19925 | 0:b8fc40cb537b | 61 | } |
jad19925 | 0:b8fc40cb537b | 62 | |
jad19925 | 0:b8fc40cb537b | 63 | switch(appIndex) { |
jad19925 | 0:b8fc40cb537b | 64 | case 0: { |
jad19925 | 0:b8fc40cb537b | 65 | if(appSwitch){ |
jad19925 | 0:b8fc40cb537b | 66 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 67 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 68 | lcd.printf("Etch-a-Sketch"); |
jad19925 | 0:b8fc40cb537b | 69 | wait(2); |
jad19925 | 0:b8fc40cb537b | 70 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 71 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 72 | appSwitch=false; |
jad19925 | 0:b8fc40cb537b | 73 | } |
jad19925 | 0:b8fc40cb537b | 74 | //read potentiometers in scaled volatge |
jad19925 | 0:b8fc40cb537b | 75 | etchY = 32-pot1.read()*32; |
jad19925 | 0:b8fc40cb537b | 76 | etchX = 128-pot2.read()*128; |
jad19925 | 0:b8fc40cb537b | 77 | lcd.pixel((int)etchX, (int)etchY, 1); |
jad19925 | 0:b8fc40cb537b | 78 | lcd.copy_to_lcd(); |
jad19925 | 0:b8fc40cb537b | 79 | x = MMA.x(); |
jad19925 | 0:b8fc40cb537b | 80 | y = MMA.y(); |
jad19925 | 0:b8fc40cb537b | 81 | if(x > .9 || x < -.9 || y > .9 || y < -.9){ |
jad19925 | 0:b8fc40cb537b | 82 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 83 | } |
jad19925 | 0:b8fc40cb537b | 84 | break;} |
jad19925 | 0:b8fc40cb537b | 85 | case 1: { |
jad19925 | 0:b8fc40cb537b | 86 | if(appSwitch){ |
jad19925 | 0:b8fc40cb537b | 87 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 88 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 89 | lcd.printf("Flat Level"); |
jad19925 | 0:b8fc40cb537b | 90 | wait(2); |
jad19925 | 0:b8fc40cb537b | 91 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 92 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 93 | appSwitch=false; |
jad19925 | 0:b8fc40cb537b | 94 | } |
jad19925 | 0:b8fc40cb537b | 95 | //read X,Y +/-Gs and scale for #display pixels |
jad19925 | 0:b8fc40cb537b | 96 | x = (x + MMA.x() * 32.0)/2.0; |
jad19925 | 0:b8fc40cb537b | 97 | y = (y -(MMA.y() * 16.0))/2.0; |
jad19925 | 0:b8fc40cb537b | 98 | lcd.fillcircle(x+63, y+15, 3, 1); //draw bubble |
jad19925 | 0:b8fc40cb537b | 99 | lcd.line(0, 11, 127, 11, 1); |
jad19925 | 0:b8fc40cb537b | 100 | lcd.line(0, 20, 127, 20, 1); |
jad19925 | 0:b8fc40cb537b | 101 | lcd.line(59, 0, 59, 31, 1); |
jad19925 | 0:b8fc40cb537b | 102 | lcd.line(68, 0, 68, 31, 1); |
jad19925 | 0:b8fc40cb537b | 103 | //lcd.circle(63, 15, 8, 1); |
jad19925 | 0:b8fc40cb537b | 104 | wait(.2); //time delay |
jad19925 | 0:b8fc40cb537b | 105 | lcd.fillcircle(x+63, y+15, 3, 0); //erase bubble |
jad19925 | 0:b8fc40cb537b | 106 | break;} |
jad19925 | 0:b8fc40cb537b | 107 | case 2: {//snake |
jad19925 | 0:b8fc40cb537b | 108 | if(appSwitch || gameOver){ |
jad19925 | 0:b8fc40cb537b | 109 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 110 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 111 | lcd.printf("Snake"); |
jad19925 | 0:b8fc40cb537b | 112 | |
jad19925 | 0:b8fc40cb537b | 113 | //setup new snake |
jad19925 | 0:b8fc40cb537b | 114 | snakeTail = 0; |
jad19925 | 0:b8fc40cb537b | 115 | snakeHead = 4; |
jad19925 | 0:b8fc40cb537b | 116 | snakeGo = RIGHT; |
jad19925 | 0:b8fc40cb537b | 117 | snake[0].x = 0; |
jad19925 | 0:b8fc40cb537b | 118 | snake[0].y = 14; |
jad19925 | 0:b8fc40cb537b | 119 | snake[1].x = 2; |
jad19925 | 0:b8fc40cb537b | 120 | snake[1].y = 14; |
jad19925 | 0:b8fc40cb537b | 121 | snake[2].x = 4; |
jad19925 | 0:b8fc40cb537b | 122 | snake[2].y = 14; |
jad19925 | 0:b8fc40cb537b | 123 | snake[3].x = 6; |
jad19925 | 0:b8fc40cb537b | 124 | snake[3].y = 14; |
jad19925 | 0:b8fc40cb537b | 125 | snake[4].x = 8; |
jad19925 | 0:b8fc40cb537b | 126 | snake[4].y = 14; |
jad19925 | 0:b8fc40cb537b | 127 | gameOver = false; |
jad19925 | 0:b8fc40cb537b | 128 | points = 0; |
jad19925 | 0:b8fc40cb537b | 129 | float seed = pot1.read()*pot2.read()*100000; |
jad19925 | 0:b8fc40cb537b | 130 | srand((int)seed); |
jad19925 | 0:b8fc40cb537b | 131 | goalLoc.x = (rand()%64)*2; |
jad19925 | 0:b8fc40cb537b | 132 | goalLoc.y = (rand()%16)*2; |
jad19925 | 0:b8fc40cb537b | 133 | |
jad19925 | 0:b8fc40cb537b | 134 | wait(2); |
jad19925 | 0:b8fc40cb537b | 135 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 136 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 137 | appSwitch=false; |
jad19925 | 0:b8fc40cb537b | 138 | |
jad19925 | 0:b8fc40cb537b | 139 | //draw initial snake |
jad19925 | 0:b8fc40cb537b | 140 | for(int i = 0; i<=snakeHead; i++){ |
jad19925 | 0:b8fc40cb537b | 141 | lcd.fillrect(snake[i].x, snake[i].y, snake[i].x+1, snake[i].y+1, 1); |
jad19925 | 0:b8fc40cb537b | 142 | } |
jad19925 | 0:b8fc40cb537b | 143 | //draw initial goal location |
jad19925 | 0:b8fc40cb537b | 144 | lcd.fillrect(goalLoc.x, goalLoc.y, goalLoc.x+1, goalLoc.y+1, 1); |
jad19925 | 0:b8fc40cb537b | 145 | lcd.copy_to_lcd(); |
jad19925 | 0:b8fc40cb537b | 146 | |
jad19925 | 0:b8fc40cb537b | 147 | //wait for user to see snake before moving |
jad19925 | 0:b8fc40cb537b | 148 | wait(1); |
jad19925 | 0:b8fc40cb537b | 149 | } |
jad19925 | 0:b8fc40cb537b | 150 | |
jad19925 | 0:b8fc40cb537b | 151 | //read joystick to get new direction |
jad19925 | 0:b8fc40cb537b | 152 | if(joyUp && DOWN != snakeGo) |
jad19925 | 0:b8fc40cb537b | 153 | {snakeGo = UP;} |
jad19925 | 0:b8fc40cb537b | 154 | if(joyDown && UP != snakeGo) |
jad19925 | 0:b8fc40cb537b | 155 | {snakeGo = DOWN;} |
jad19925 | 0:b8fc40cb537b | 156 | if(joyLeft && RIGHT != snakeGo) |
jad19925 | 0:b8fc40cb537b | 157 | {snakeGo = LEFT;} |
jad19925 | 0:b8fc40cb537b | 158 | if(joyRight && LEFT != snakeGo) |
jad19925 | 0:b8fc40cb537b | 159 | {snakeGo = RIGHT;} |
jad19925 | 0:b8fc40cb537b | 160 | |
jad19925 | 0:b8fc40cb537b | 161 | //move snake |
jad19925 | 0:b8fc40cb537b | 162 | switch(snakeGo){ |
jad19925 | 0:b8fc40cb537b | 163 | case RIGHT: |
jad19925 | 0:b8fc40cb537b | 164 | //clear tail |
jad19925 | 0:b8fc40cb537b | 165 | lcd.fillrect(snake[snakeTail].x, snake[snakeTail].y, snake[snakeTail].x+1, snake[snakeTail].y+1, 0); |
jad19925 | 0:b8fc40cb537b | 166 | snakeTail = (snakeTail+1)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 167 | //draw new front |
jad19925 | 0:b8fc40cb537b | 168 | snake[snakeHead+1].x = snake[snakeHead].x + 2; |
jad19925 | 0:b8fc40cb537b | 169 | snake[snakeHead+1].y = snake[snakeHead].y; |
jad19925 | 0:b8fc40cb537b | 170 | snakeHead = (snakeHead+1)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 171 | lcd.fillrect(snake[snakeHead].x, snake[snakeHead].y, snake[snakeHead].x+1, snake[snakeHead].y+1, 1); |
jad19925 | 0:b8fc40cb537b | 172 | //copy to lcd |
jad19925 | 0:b8fc40cb537b | 173 | lcd.copy_to_lcd(); |
jad19925 | 0:b8fc40cb537b | 174 | //check if we went off the screen |
jad19925 | 0:b8fc40cb537b | 175 | if(snake[snakeHead].x >= SCREEN_WIDTH){ |
jad19925 | 0:b8fc40cb537b | 176 | gameOver = true; |
jad19925 | 0:b8fc40cb537b | 177 | pc.printf("Off screen to right\n"); |
jad19925 | 0:b8fc40cb537b | 178 | } |
jad19925 | 0:b8fc40cb537b | 179 | break; |
jad19925 | 0:b8fc40cb537b | 180 | case LEFT: |
jad19925 | 0:b8fc40cb537b | 181 | //clear tail |
jad19925 | 0:b8fc40cb537b | 182 | lcd.fillrect(snake[snakeTail].x, snake[snakeTail].y, snake[snakeTail].x+1, snake[snakeTail].y+1, 0); |
jad19925 | 0:b8fc40cb537b | 183 | snakeTail = (snakeTail+1)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 184 | //draw new front |
jad19925 | 0:b8fc40cb537b | 185 | snake[snakeHead+1].x = snake[snakeHead].x - 2; |
jad19925 | 0:b8fc40cb537b | 186 | snake[snakeHead+1].y = snake[snakeHead].y; |
jad19925 | 0:b8fc40cb537b | 187 | snakeHead = (snakeHead+1)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 188 | lcd.fillrect(snake[snakeHead].x, snake[snakeHead].y, snake[snakeHead].x+1, snake[snakeHead].y+1, 1); |
jad19925 | 0:b8fc40cb537b | 189 | //copy to lcd |
jad19925 | 0:b8fc40cb537b | 190 | lcd.copy_to_lcd(); |
jad19925 | 0:b8fc40cb537b | 191 | //check if we went off the screen |
jad19925 | 0:b8fc40cb537b | 192 | if(snake[snakeHead].x < 0){ |
jad19925 | 0:b8fc40cb537b | 193 | gameOver = true; |
jad19925 | 0:b8fc40cb537b | 194 | pc.printf("Off screen to left\n"); |
jad19925 | 0:b8fc40cb537b | 195 | } |
jad19925 | 0:b8fc40cb537b | 196 | break; |
jad19925 | 0:b8fc40cb537b | 197 | case UP: |
jad19925 | 0:b8fc40cb537b | 198 | //clear tail |
jad19925 | 0:b8fc40cb537b | 199 | lcd.fillrect(snake[snakeTail].x, snake[snakeTail].y, snake[snakeTail].x+1, snake[snakeTail].y+1, 0); |
jad19925 | 0:b8fc40cb537b | 200 | snakeTail = (snakeTail+1)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 201 | //draw new front |
jad19925 | 0:b8fc40cb537b | 202 | snake[snakeHead+1].x = snake[snakeHead].x; |
jad19925 | 0:b8fc40cb537b | 203 | snake[snakeHead+1].y = snake[snakeHead].y - 2; |
jad19925 | 0:b8fc40cb537b | 204 | snakeHead = (snakeHead+1)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 205 | lcd.fillrect(snake[snakeHead].x, snake[snakeHead].y, snake[snakeHead].x+1, snake[snakeHead].y+1, 1); |
jad19925 | 0:b8fc40cb537b | 206 | //copy to lcd |
jad19925 | 0:b8fc40cb537b | 207 | lcd.copy_to_lcd(); |
jad19925 | 0:b8fc40cb537b | 208 | //check if we went off the screen |
jad19925 | 0:b8fc40cb537b | 209 | if(snake[snakeHead].y < 0){ |
jad19925 | 0:b8fc40cb537b | 210 | gameOver = true; |
jad19925 | 0:b8fc40cb537b | 211 | pc.printf("Off screen top\n"); |
jad19925 | 0:b8fc40cb537b | 212 | } |
jad19925 | 0:b8fc40cb537b | 213 | //wait? |
jad19925 | 0:b8fc40cb537b | 214 | break; |
jad19925 | 0:b8fc40cb537b | 215 | case DOWN: |
jad19925 | 0:b8fc40cb537b | 216 | //clear tail |
jad19925 | 0:b8fc40cb537b | 217 | lcd.fillrect(snake[snakeTail].x, snake[snakeTail].y, snake[snakeTail].x+1, snake[snakeTail].y+1, 0); |
jad19925 | 0:b8fc40cb537b | 218 | snakeTail = (snakeTail+1)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 219 | //draw new front |
jad19925 | 0:b8fc40cb537b | 220 | snake[snakeHead+1].x = snake[snakeHead].x; |
jad19925 | 0:b8fc40cb537b | 221 | snake[snakeHead+1].y = snake[snakeHead].y + 2; |
jad19925 | 0:b8fc40cb537b | 222 | snakeHead = (snakeHead+1)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 223 | lcd.fillrect(snake[snakeHead].x, snake[snakeHead].y, snake[snakeHead].x+1, snake[snakeHead].y+1, 1); |
jad19925 | 0:b8fc40cb537b | 224 | //copy to lcd |
jad19925 | 0:b8fc40cb537b | 225 | lcd.copy_to_lcd(); |
jad19925 | 0:b8fc40cb537b | 226 | //check if we went off the screen |
jad19925 | 0:b8fc40cb537b | 227 | if(snake[snakeHead].y >= SCREEN_HEIGHT){ |
jad19925 | 0:b8fc40cb537b | 228 | gameOver = true; |
jad19925 | 0:b8fc40cb537b | 229 | pc.printf("Off screen bottom\n"); |
jad19925 | 0:b8fc40cb537b | 230 | } |
jad19925 | 0:b8fc40cb537b | 231 | //wait? |
jad19925 | 0:b8fc40cb537b | 232 | break; |
jad19925 | 0:b8fc40cb537b | 233 | } |
jad19925 | 0:b8fc40cb537b | 234 | //check if we scored a point |
jad19925 | 0:b8fc40cb537b | 235 | if(snake[snakeHead].x == goalLoc.x && snake[snakeHead].y == goalLoc.y){ |
jad19925 | 0:b8fc40cb537b | 236 | points++; |
jad19925 | 0:b8fc40cb537b | 237 | //clear old goal and set new goal |
jad19925 | 0:b8fc40cb537b | 238 | lcd.fillrect(goalLoc.x, goalLoc.y, goalLoc.x+1, goalLoc.y+1, 0); |
jad19925 | 0:b8fc40cb537b | 239 | goalLoc.x = (rand()%64)*2; |
jad19925 | 0:b8fc40cb537b | 240 | goalLoc.y = (rand()%16)*2; |
jad19925 | 0:b8fc40cb537b | 241 | lcd.fillrect(goalLoc.x, goalLoc.y, goalLoc.x+1, goalLoc.y+1, 1); |
jad19925 | 0:b8fc40cb537b | 242 | |
jad19925 | 0:b8fc40cb537b | 243 | //add on to the tail |
jad19925 | 0:b8fc40cb537b | 244 | int newTail = (snakeTail-1+SNAKE_MAX)%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 245 | snake[newTail].x = snake[snakeTail].x; |
jad19925 | 0:b8fc40cb537b | 246 | snake[newTail].y = snake[snakeTail].y; |
jad19925 | 0:b8fc40cb537b | 247 | snakeTail = newTail; |
jad19925 | 0:b8fc40cb537b | 248 | |
jad19925 | 0:b8fc40cb537b | 249 | //copy everything to the lcd |
jad19925 | 0:b8fc40cb537b | 250 | lcd.copy_to_lcd(); |
jad19925 | 0:b8fc40cb537b | 251 | if(points > SNAKE_MAX-5) |
jad19925 | 0:b8fc40cb537b | 252 | { |
jad19925 | 0:b8fc40cb537b | 253 | gameOver = true; |
jad19925 | 0:b8fc40cb537b | 254 | pc.printf("Game Winner!\n"); |
jad19925 | 0:b8fc40cb537b | 255 | } |
jad19925 | 0:b8fc40cb537b | 256 | } |
jad19925 | 0:b8fc40cb537b | 257 | //check if we hit ourself |
jad19925 | 0:b8fc40cb537b | 258 | int testLimit = snakeHead; |
jad19925 | 0:b8fc40cb537b | 259 | if(snakeTail > snakeHead){ |
jad19925 | 0:b8fc40cb537b | 260 | testLimit = snakeHead+SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 261 | } |
jad19925 | 0:b8fc40cb537b | 262 | for(int i = snakeTail; i < testLimit; i++){ |
jad19925 | 0:b8fc40cb537b | 263 | int iMod = i%SNAKE_MAX; |
jad19925 | 0:b8fc40cb537b | 264 | if(snake[snakeHead].x == snake[iMod].x && snake[snakeHead].y == snake[iMod].y){ |
jad19925 | 0:b8fc40cb537b | 265 | gameOver = true; |
jad19925 | 0:b8fc40cb537b | 266 | pc.printf("Hit Self\n"); |
jad19925 | 0:b8fc40cb537b | 267 | } |
jad19925 | 0:b8fc40cb537b | 268 | } |
jad19925 | 0:b8fc40cb537b | 269 | |
jad19925 | 0:b8fc40cb537b | 270 | if(gameOver){ |
jad19925 | 0:b8fc40cb537b | 271 | //lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 272 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 273 | lcd.printf("Game Over, Press Joystick to start over\nPoints Scored: %d",points); |
jad19925 | 0:b8fc40cb537b | 274 | pc.printf("Game Over\n"); |
jad19925 | 0:b8fc40cb537b | 275 | while(!fire){ |
jad19925 | 0:b8fc40cb537b | 276 | //infinite loop to wait for user to press joystick to restart |
jad19925 | 0:b8fc40cb537b | 277 | } |
jad19925 | 0:b8fc40cb537b | 278 | wait(.5); |
jad19925 | 0:b8fc40cb537b | 279 | } |
jad19925 | 0:b8fc40cb537b | 280 | |
jad19925 | 0:b8fc40cb537b | 281 | break;} |
jad19925 | 0:b8fc40cb537b | 282 | case 3: { |
jad19925 | 0:b8fc40cb537b | 283 | if(appSwitch){ |
jad19925 | 0:b8fc40cb537b | 284 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 285 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 286 | lcd.printf("Horizontal Level"); |
jad19925 | 0:b8fc40cb537b | 287 | wait(2); |
jad19925 | 0:b8fc40cb537b | 288 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 289 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 290 | appSwitch=false; |
jad19925 | 0:b8fc40cb537b | 291 | } |
jad19925 | 0:b8fc40cb537b | 292 | break;} |
jad19925 | 0:b8fc40cb537b | 293 | default: { |
jad19925 | 0:b8fc40cb537b | 294 | lcd.cls(); |
jad19925 | 0:b8fc40cb537b | 295 | lcd.locate(0,0); |
jad19925 | 0:b8fc40cb537b | 296 | lcd.printf("Error: appIndex out of range - appIndes=%d",appIndex); |
jad19925 | 0:b8fc40cb537b | 297 | break;} |
jad19925 | 0:b8fc40cb537b | 298 | } |
jad19925 | 0:b8fc40cb537b | 299 | |
jad19925 | 0:b8fc40cb537b | 300 | |
jad19925 | 0:b8fc40cb537b | 301 | wait(0.1); |
jad19925 | 0:b8fc40cb537b | 302 | } |
jad19925 | 0:b8fc40cb537b | 303 | } |