1st half of mbed DDR game

Dependencies:   4DGL-uLCD-SE PinDetect mbed

Committer:
jmelliadis3
Date:
Tue Apr 29 23:24:46 2014 +0000
Revision:
0:5a54aaccd065
To put on primary mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jmelliadis3 0:5a54aaccd065 1 #include "mbed.h"
jmelliadis3 0:5a54aaccd065 2
jmelliadis3 0:5a54aaccd065 3 #include "uLCD_4DGL.h"
jmelliadis3 0:5a54aaccd065 4 #include "PinDetect.h"
jmelliadis3 0:5a54aaccd065 5 #include <mpr121.h>
jmelliadis3 0:5a54aaccd065 6
jmelliadis3 0:5a54aaccd065 7
jmelliadis3 0:5a54aaccd065 8 uLCD_4DGL uLCD(p28, p27, p29); // create a global lcd object
jmelliadis3 0:5a54aaccd065 9
jmelliadis3 0:5a54aaccd065 10 // Create the interrupt receiver object on pin 26
jmelliadis3 0:5a54aaccd065 11 InterruptIn interrupt(p26);
jmelliadis3 0:5a54aaccd065 12
jmelliadis3 0:5a54aaccd065 13 // Setup the i2c bus on pins 28 and 27
jmelliadis3 0:5a54aaccd065 14 I2C i2c(p9, p10);
jmelliadis3 0:5a54aaccd065 15
jmelliadis3 0:5a54aaccd065 16 // Setup the Mpr121:
jmelliadis3 0:5a54aaccd065 17 // constructor(i2c object, i2c address of the mpr121)
jmelliadis3 0:5a54aaccd065 18 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
jmelliadis3 0:5a54aaccd065 19
jmelliadis3 0:5a54aaccd065 20 DigitalOut start (p21);
jmelliadis3 0:5a54aaccd065 21 DigitalOut stop (p22);
jmelliadis3 0:5a54aaccd065 22 InterruptIn songOver (p23);
jmelliadis3 0:5a54aaccd065 23
jmelliadis3 0:5a54aaccd065 24
jmelliadis3 0:5a54aaccd065 25
jmelliadis3 0:5a54aaccd065 26 //PinDetect pb1(p26);
jmelliadis3 0:5a54aaccd065 27
jmelliadis3 0:5a54aaccd065 28 int volatile score = 0;
jmelliadis3 0:5a54aaccd065 29 int volatile meter = 15;
jmelliadis3 0:5a54aaccd065 30 int scrollSpeed = 6;
jmelliadis3 0:5a54aaccd065 31
jmelliadis3 0:5a54aaccd065 32 int volatile rightPressed = 0;
jmelliadis3 0:5a54aaccd065 33 int volatile leftPressed = 0;
jmelliadis3 0:5a54aaccd065 34 int volatile upPressed = 0;
jmelliadis3 0:5a54aaccd065 35 int volatile downPressed = 0;
jmelliadis3 0:5a54aaccd065 36
jmelliadis3 0:5a54aaccd065 37 struct arrow {
jmelliadis3 0:5a54aaccd065 38 int yPos;
jmelliadis3 0:5a54aaccd065 39 int alive;
jmelliadis3 0:5a54aaccd065 40 arrow *next;
jmelliadis3 0:5a54aaccd065 41 };
jmelliadis3 0:5a54aaccd065 42
jmelliadis3 0:5a54aaccd065 43 arrow* leftRoot = NULL;
jmelliadis3 0:5a54aaccd065 44 arrow* rightRoot = NULL;
jmelliadis3 0:5a54aaccd065 45 arrow* upRoot = NULL;
jmelliadis3 0:5a54aaccd065 46 arrow* downRoot = NULL;
jmelliadis3 0:5a54aaccd065 47
jmelliadis3 0:5a54aaccd065 48
jmelliadis3 0:5a54aaccd065 49 enum gameState{
jmelliadis3 0:5a54aaccd065 50 begin,
jmelliadis3 0:5a54aaccd065 51 playing,
jmelliadis3 0:5a54aaccd065 52 over};
jmelliadis3 0:5a54aaccd065 53
jmelliadis3 0:5a54aaccd065 54 int volatile state;
jmelliadis3 0:5a54aaccd065 55
jmelliadis3 0:5a54aaccd065 56 enum node{
jmelliadis3 0:5a54aaccd065 57 up,
jmelliadis3 0:5a54aaccd065 58 down,
jmelliadis3 0:5a54aaccd065 59 left,
jmelliadis3 0:5a54aaccd065 60 right,
jmelliadis3 0:5a54aaccd065 61 none
jmelliadis3 0:5a54aaccd065 62 };
jmelliadis3 0:5a54aaccd065 63
jmelliadis3 0:5a54aaccd065 64 enum difficultyLevels{
jmelliadis3 0:5a54aaccd065 65 easy,
jmelliadis3 0:5a54aaccd065 66 medium,
jmelliadis3 0:5a54aaccd065 67 hard
jmelliadis3 0:5a54aaccd065 68 };
jmelliadis3 0:5a54aaccd065 69
jmelliadis3 0:5a54aaccd065 70 int volatile nodeToDelete(none);
jmelliadis3 0:5a54aaccd065 71
jmelliadis3 0:5a54aaccd065 72 int volatile difficulty(easy);
jmelliadis3 0:5a54aaccd065 73
jmelliadis3 0:5a54aaccd065 74 void deleteRoot (arrow* &root, int direction) {
jmelliadis3 0:5a54aaccd065 75 arrow* temp = root;
jmelliadis3 0:5a54aaccd065 76
jmelliadis3 0:5a54aaccd065 77 switch(direction) {
jmelliadis3 0:5a54aaccd065 78 case 0:
jmelliadis3 0:5a54aaccd065 79 uLCD.line(4, root->yPos-scrollSpeed,24, root->yPos-scrollSpeed,0x0000FF);
jmelliadis3 0:5a54aaccd065 80 uLCD.line(4, root->yPos-scrollSpeed, 14, root->yPos+10-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 81 uLCD.line(4, root->yPos-scrollSpeed, 14, root->yPos-10-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 82 break;
jmelliadis3 0:5a54aaccd065 83
jmelliadis3 0:5a54aaccd065 84 case 1:
jmelliadis3 0:5a54aaccd065 85 uLCD.line(47,root->yPos-scrollSpeed-10,47,root->yPos-scrollSpeed+10,0x0000FF);
jmelliadis3 0:5a54aaccd065 86 uLCD.line(47, root->yPos-scrollSpeed-10, 37, root->yPos-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 87 uLCD.line(47, root->yPos-scrollSpeed-10, 57, root->yPos-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 88 break;
jmelliadis3 0:5a54aaccd065 89
jmelliadis3 0:5a54aaccd065 90 case 2:
jmelliadis3 0:5a54aaccd065 91 uLCD.line(80,root->yPos-scrollSpeed-10,80,root->yPos-scrollSpeed+10,0x0000FF);
jmelliadis3 0:5a54aaccd065 92 uLCD.line(80, root->yPos-scrollSpeed+10, 70, root->yPos-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 93 uLCD.line(80, root->yPos-scrollSpeed+10, 90, root->yPos-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 94 break;
jmelliadis3 0:5a54aaccd065 95
jmelliadis3 0:5a54aaccd065 96 case 3:
jmelliadis3 0:5a54aaccd065 97 uLCD.line(104,root->yPos-scrollSpeed,124,root->yPos-scrollSpeed,0x0000FF);
jmelliadis3 0:5a54aaccd065 98 uLCD.line(124, root->yPos-scrollSpeed, 114, root->yPos-scrollSpeed+10, 0x0000FF);
jmelliadis3 0:5a54aaccd065 99 uLCD.line(124, root->yPos-scrollSpeed, 114, root->yPos-scrollSpeed-10, 0x0000FF);
jmelliadis3 0:5a54aaccd065 100 break;
jmelliadis3 0:5a54aaccd065 101 }
jmelliadis3 0:5a54aaccd065 102
jmelliadis3 0:5a54aaccd065 103 root = root->next;
jmelliadis3 0:5a54aaccd065 104 delete temp;
jmelliadis3 0:5a54aaccd065 105 }
jmelliadis3 0:5a54aaccd065 106
jmelliadis3 0:5a54aaccd065 107 void addToEnd (arrow* &root) {
jmelliadis3 0:5a54aaccd065 108 arrow * temp = root;
jmelliadis3 0:5a54aaccd065 109 if (root == NULL)
jmelliadis3 0:5a54aaccd065 110 {
jmelliadis3 0:5a54aaccd065 111 root = new arrow;
jmelliadis3 0:5a54aaccd065 112 root->yPos = 10;
jmelliadis3 0:5a54aaccd065 113 root->alive = 1;
jmelliadis3 0:5a54aaccd065 114 root->next = 0;
jmelliadis3 0:5a54aaccd065 115 }
jmelliadis3 0:5a54aaccd065 116 else {
jmelliadis3 0:5a54aaccd065 117 while (temp->next)
jmelliadis3 0:5a54aaccd065 118 {
jmelliadis3 0:5a54aaccd065 119 temp = temp->next;
jmelliadis3 0:5a54aaccd065 120 }
jmelliadis3 0:5a54aaccd065 121
jmelliadis3 0:5a54aaccd065 122 temp->next = new arrow;
jmelliadis3 0:5a54aaccd065 123 temp = temp->next;
jmelliadis3 0:5a54aaccd065 124 temp->yPos = 10;
jmelliadis3 0:5a54aaccd065 125 temp->alive = 1;
jmelliadis3 0:5a54aaccd065 126 temp->next = 0;
jmelliadis3 0:5a54aaccd065 127 }
jmelliadis3 0:5a54aaccd065 128 }
jmelliadis3 0:5a54aaccd065 129
jmelliadis3 0:5a54aaccd065 130 void fallInterrupt() {
jmelliadis3 0:5a54aaccd065 131 int key_code=0;
jmelliadis3 0:5a54aaccd065 132 int i=0;
jmelliadis3 0:5a54aaccd065 133 int value=mpr121.read(0x00);
jmelliadis3 0:5a54aaccd065 134 value +=mpr121.read(0x01)<<8;
jmelliadis3 0:5a54aaccd065 135
jmelliadis3 0:5a54aaccd065 136 i=0;
jmelliadis3 0:5a54aaccd065 137 // puts key number out to LEDs for demo
jmelliadis3 0:5a54aaccd065 138 for (i=0; i<12; i++) {
jmelliadis3 0:5a54aaccd065 139 if (((value>>i)&0x01)==1) key_code=i+1;
jmelliadis3 0:5a54aaccd065 140 }
jmelliadis3 0:5a54aaccd065 141
jmelliadis3 0:5a54aaccd065 142 switch (key_code) {
jmelliadis3 0:5a54aaccd065 143 case 2:
jmelliadis3 0:5a54aaccd065 144 upPressed = 1;
jmelliadis3 0:5a54aaccd065 145 if (upRoot) {
jmelliadis3 0:5a54aaccd065 146 if (upRoot->yPos > 100 && upRoot->yPos < 120)
jmelliadis3 0:5a54aaccd065 147 {
jmelliadis3 0:5a54aaccd065 148 score++;
jmelliadis3 0:5a54aaccd065 149 meter+=2;
jmelliadis3 0:5a54aaccd065 150 }
jmelliadis3 0:5a54aaccd065 151 if (upRoot->yPos > 95)
jmelliadis3 0:5a54aaccd065 152 {
jmelliadis3 0:5a54aaccd065 153 nodeToDelete = up;
jmelliadis3 0:5a54aaccd065 154 }
jmelliadis3 0:5a54aaccd065 155 }
jmelliadis3 0:5a54aaccd065 156 break;
jmelliadis3 0:5a54aaccd065 157
jmelliadis3 0:5a54aaccd065 158 case 5:
jmelliadis3 0:5a54aaccd065 159 leftPressed = 1;
jmelliadis3 0:5a54aaccd065 160 if (leftRoot) {
jmelliadis3 0:5a54aaccd065 161 if (leftRoot->yPos > 100 && leftRoot->yPos < 120)
jmelliadis3 0:5a54aaccd065 162 {
jmelliadis3 0:5a54aaccd065 163 score++;
jmelliadis3 0:5a54aaccd065 164 meter+=2;
jmelliadis3 0:5a54aaccd065 165 }
jmelliadis3 0:5a54aaccd065 166 if (leftRoot->yPos > 95)
jmelliadis3 0:5a54aaccd065 167 {
jmelliadis3 0:5a54aaccd065 168 nodeToDelete = left;
jmelliadis3 0:5a54aaccd065 169 }
jmelliadis3 0:5a54aaccd065 170 }
jmelliadis3 0:5a54aaccd065 171 break;
jmelliadis3 0:5a54aaccd065 172
jmelliadis3 0:5a54aaccd065 173 case 6:
jmelliadis3 0:5a54aaccd065 174 switch (state) {
jmelliadis3 0:5a54aaccd065 175 case begin:
jmelliadis3 0:5a54aaccd065 176 state = playing;
jmelliadis3 0:5a54aaccd065 177 break;
jmelliadis3 0:5a54aaccd065 178 case playing:
jmelliadis3 0:5a54aaccd065 179 break;
jmelliadis3 0:5a54aaccd065 180 case over:
jmelliadis3 0:5a54aaccd065 181 state = begin;
jmelliadis3 0:5a54aaccd065 182 break;
jmelliadis3 0:5a54aaccd065 183 }
jmelliadis3 0:5a54aaccd065 184 break;
jmelliadis3 0:5a54aaccd065 185
jmelliadis3 0:5a54aaccd065 186 case 7:
jmelliadis3 0:5a54aaccd065 187 rightPressed = 1;
jmelliadis3 0:5a54aaccd065 188 if (rightRoot) {
jmelliadis3 0:5a54aaccd065 189 if (rightRoot->yPos > 100 && rightRoot->yPos < 120)
jmelliadis3 0:5a54aaccd065 190 {
jmelliadis3 0:5a54aaccd065 191 score++;
jmelliadis3 0:5a54aaccd065 192 meter+=2;
jmelliadis3 0:5a54aaccd065 193 }
jmelliadis3 0:5a54aaccd065 194 if (rightRoot->yPos > 95)
jmelliadis3 0:5a54aaccd065 195 {
jmelliadis3 0:5a54aaccd065 196 nodeToDelete = right;
jmelliadis3 0:5a54aaccd065 197 }
jmelliadis3 0:5a54aaccd065 198 }
jmelliadis3 0:5a54aaccd065 199 break;
jmelliadis3 0:5a54aaccd065 200
jmelliadis3 0:5a54aaccd065 201 case 10:
jmelliadis3 0:5a54aaccd065 202 downPressed = 1;
jmelliadis3 0:5a54aaccd065 203 if (downRoot) {
jmelliadis3 0:5a54aaccd065 204 if (downRoot->yPos > 100 && downRoot->yPos < 120)
jmelliadis3 0:5a54aaccd065 205 {
jmelliadis3 0:5a54aaccd065 206 score++;
jmelliadis3 0:5a54aaccd065 207 meter+=2;
jmelliadis3 0:5a54aaccd065 208 }
jmelliadis3 0:5a54aaccd065 209 if (downRoot->yPos > 95)
jmelliadis3 0:5a54aaccd065 210 {
jmelliadis3 0:5a54aaccd065 211 nodeToDelete = down;
jmelliadis3 0:5a54aaccd065 212 }
jmelliadis3 0:5a54aaccd065 213 }
jmelliadis3 0:5a54aaccd065 214 break;
jmelliadis3 0:5a54aaccd065 215
jmelliadis3 0:5a54aaccd065 216 case 4:
jmelliadis3 0:5a54aaccd065 217 if (state == begin) {
jmelliadis3 0:5a54aaccd065 218 difficulty = easy;
jmelliadis3 0:5a54aaccd065 219 }
jmelliadis3 0:5a54aaccd065 220 break;
jmelliadis3 0:5a54aaccd065 221
jmelliadis3 0:5a54aaccd065 222 case 8:
jmelliadis3 0:5a54aaccd065 223 if (state == begin) {
jmelliadis3 0:5a54aaccd065 224 difficulty = medium;
jmelliadis3 0:5a54aaccd065 225 }
jmelliadis3 0:5a54aaccd065 226 break;
jmelliadis3 0:5a54aaccd065 227
jmelliadis3 0:5a54aaccd065 228 case 12:
jmelliadis3 0:5a54aaccd065 229 if (state == begin) {
jmelliadis3 0:5a54aaccd065 230 difficulty = hard;
jmelliadis3 0:5a54aaccd065 231 }
jmelliadis3 0:5a54aaccd065 232 break;
jmelliadis3 0:5a54aaccd065 233 }
jmelliadis3 0:5a54aaccd065 234
jmelliadis3 0:5a54aaccd065 235 }
jmelliadis3 0:5a54aaccd065 236
jmelliadis3 0:5a54aaccd065 237
jmelliadis3 0:5a54aaccd065 238 void pb1_hit_callback() {
jmelliadis3 0:5a54aaccd065 239
jmelliadis3 0:5a54aaccd065 240 switch (state) {
jmelliadis3 0:5a54aaccd065 241 case begin:
jmelliadis3 0:5a54aaccd065 242 state = playing;
jmelliadis3 0:5a54aaccd065 243 break;
jmelliadis3 0:5a54aaccd065 244 case playing:
jmelliadis3 0:5a54aaccd065 245 break;
jmelliadis3 0:5a54aaccd065 246 case over:
jmelliadis3 0:5a54aaccd065 247 state = begin;
jmelliadis3 0:5a54aaccd065 248 break;
jmelliadis3 0:5a54aaccd065 249 }
jmelliadis3 0:5a54aaccd065 250 }
jmelliadis3 0:5a54aaccd065 251
jmelliadis3 0:5a54aaccd065 252 void drawLeftArrow (int y) {
jmelliadis3 0:5a54aaccd065 253
jmelliadis3 0:5a54aaccd065 254 uLCD.line(4,y-scrollSpeed,24,y-scrollSpeed,0x0000FF);
jmelliadis3 0:5a54aaccd065 255 uLCD.line(4, y-scrollSpeed, 14, y-scrollSpeed+10, 0x0000FF);
jmelliadis3 0:5a54aaccd065 256 uLCD.line(4, y-scrollSpeed, 14, y-scrollSpeed-10, 0x0000FF);
jmelliadis3 0:5a54aaccd065 257
jmelliadis3 0:5a54aaccd065 258
jmelliadis3 0:5a54aaccd065 259 uLCD.line(4,y,24,y,0x000000);
jmelliadis3 0:5a54aaccd065 260 uLCD.line(4, y, 14, y+10, 0x000000);
jmelliadis3 0:5a54aaccd065 261 uLCD.line(4, y, 14, y-10, 0x000000);
jmelliadis3 0:5a54aaccd065 262 }
jmelliadis3 0:5a54aaccd065 263
jmelliadis3 0:5a54aaccd065 264 void drawUpArrow (int y) {
jmelliadis3 0:5a54aaccd065 265 uLCD.line(47,y-scrollSpeed-10,47,y-scrollSpeed+10,0x0000FF);
jmelliadis3 0:5a54aaccd065 266 uLCD.line(47, y-scrollSpeed-10, 37, y-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 267 uLCD.line(47, y-scrollSpeed-10, 57, y-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 268
jmelliadis3 0:5a54aaccd065 269 uLCD.line(47,y-10,47,y+10,0x000000);
jmelliadis3 0:5a54aaccd065 270 uLCD.line(47, y-10, 37, y, 0x000000);
jmelliadis3 0:5a54aaccd065 271 uLCD.line(47, y-10, 57, y, 0x000000);
jmelliadis3 0:5a54aaccd065 272 }
jmelliadis3 0:5a54aaccd065 273
jmelliadis3 0:5a54aaccd065 274 void drawDownArrow (int y) {
jmelliadis3 0:5a54aaccd065 275 uLCD.line(80,y-scrollSpeed-10,80,y-scrollSpeed+10,0x0000FF);
jmelliadis3 0:5a54aaccd065 276 uLCD.line(80, y-scrollSpeed+10, 70, y-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 277 uLCD.line(80, y-scrollSpeed+10, 90, y-scrollSpeed, 0x0000FF);
jmelliadis3 0:5a54aaccd065 278
jmelliadis3 0:5a54aaccd065 279 uLCD.line(80,y-10,80,y+10,0x000000);
jmelliadis3 0:5a54aaccd065 280 uLCD.line(80, y+10, 70, y, 0x000000);
jmelliadis3 0:5a54aaccd065 281 uLCD.line(80, y+10, 90, y, 0x000000);
jmelliadis3 0:5a54aaccd065 282 }
jmelliadis3 0:5a54aaccd065 283
jmelliadis3 0:5a54aaccd065 284 void drawRightArrow (int y) {
jmelliadis3 0:5a54aaccd065 285 uLCD.line(104,y-scrollSpeed,124,y-scrollSpeed,0x0000FF);
jmelliadis3 0:5a54aaccd065 286 uLCD.line(124, y-scrollSpeed, 114, y-scrollSpeed+10, 0x0000FF);
jmelliadis3 0:5a54aaccd065 287 uLCD.line(124, y-scrollSpeed, 114, y-scrollSpeed-10, 0x0000FF);
jmelliadis3 0:5a54aaccd065 288
jmelliadis3 0:5a54aaccd065 289 uLCD.line(104,y,124,y,0x000000);
jmelliadis3 0:5a54aaccd065 290 uLCD.line(124, y, 114, y+10, 0x000000);
jmelliadis3 0:5a54aaccd065 291 uLCD.line(124, y, 114, y-10, 0x000000);
jmelliadis3 0:5a54aaccd065 292 }
jmelliadis3 0:5a54aaccd065 293
jmelliadis3 0:5a54aaccd065 294 void songOverInterrupt () {
jmelliadis3 0:5a54aaccd065 295 state = over;
jmelliadis3 0:5a54aaccd065 296 }
jmelliadis3 0:5a54aaccd065 297
jmelliadis3 0:5a54aaccd065 298 int main() {
jmelliadis3 0:5a54aaccd065 299
jmelliadis3 0:5a54aaccd065 300 state = begin;
jmelliadis3 0:5a54aaccd065 301 srand(time(NULL));
jmelliadis3 0:5a54aaccd065 302
jmelliadis3 0:5a54aaccd065 303 interrupt.fall(&fallInterrupt);
jmelliadis3 0:5a54aaccd065 304 interrupt.mode(PullUp);
jmelliadis3 0:5a54aaccd065 305
jmelliadis3 0:5a54aaccd065 306 songOver.rise(&songOverInterrupt);
jmelliadis3 0:5a54aaccd065 307
jmelliadis3 0:5a54aaccd065 308 uLCD.baudrate(3000000);
jmelliadis3 0:5a54aaccd065 309 uLCD.cls();
jmelliadis3 0:5a54aaccd065 310
jmelliadis3 0:5a54aaccd065 311 uLCD.filled_rectangle(0,0,128,128,0x0000FF);
jmelliadis3 0:5a54aaccd065 312
jmelliadis3 0:5a54aaccd065 313 int go = 1;
jmelliadis3 0:5a54aaccd065 314 int scoreWrite = 1;
jmelliadis3 0:5a54aaccd065 315 int ready;
jmelliadis3 0:5a54aaccd065 316 int leftCounter;
jmelliadis3 0:5a54aaccd065 317 int rightCounter;
jmelliadis3 0:5a54aaccd065 318 int upCounter;
jmelliadis3 0:5a54aaccd065 319 int downCounter;
jmelliadis3 0:5a54aaccd065 320
jmelliadis3 0:5a54aaccd065 321 int deleted = 0;
jmelliadis3 0:5a54aaccd065 322
jmelliadis3 0:5a54aaccd065 323 int drawArrow = 1;
jmelliadis3 0:5a54aaccd065 324
jmelliadis3 0:5a54aaccd065 325
jmelliadis3 0:5a54aaccd065 326 Timer t;
jmelliadis3 0:5a54aaccd065 327 float time = 0.0;
jmelliadis3 0:5a54aaccd065 328
jmelliadis3 0:5a54aaccd065 329 arrow * temp;
jmelliadis3 0:5a54aaccd065 330
jmelliadis3 0:5a54aaccd065 331 while(go) {
jmelliadis3 0:5a54aaccd065 332 t.reset();
jmelliadis3 0:5a54aaccd065 333 t.start();
jmelliadis3 0:5a54aaccd065 334 drawArrow = 1;
jmelliadis3 0:5a54aaccd065 335
jmelliadis3 0:5a54aaccd065 336 switch (state) {
jmelliadis3 0:5a54aaccd065 337 case begin:
jmelliadis3 0:5a54aaccd065 338 uLCD.locate(5,2);
jmelliadis3 0:5a54aaccd065 339 uLCD.color(WHITE);
jmelliadis3 0:5a54aaccd065 340 uLCD.textbackground_color(BLUE);
jmelliadis3 0:5a54aaccd065 341 uLCD.text_mode(OPAQUE);
jmelliadis3 0:5a54aaccd065 342 uLCD.set_font(FONT_7X8);
jmelliadis3 0:5a54aaccd065 343 uLCD.printf("MBED DDR");
jmelliadis3 0:5a54aaccd065 344
jmelliadis3 0:5a54aaccd065 345 uLCD.locate(0,4);
jmelliadis3 0:5a54aaccd065 346 uLCD.printf("Difficulty: 3,7,11");
jmelliadis3 0:5a54aaccd065 347
jmelliadis3 0:5a54aaccd065 348 uLCD.locate(1,10);
jmelliadis3 0:5a54aaccd065 349 uLCD.printf("Press 5 to Start");
jmelliadis3 0:5a54aaccd065 350
jmelliadis3 0:5a54aaccd065 351 switch (difficulty) {
jmelliadis3 0:5a54aaccd065 352 case easy:
jmelliadis3 0:5a54aaccd065 353 leftCounter = rand()%200 + 75;
jmelliadis3 0:5a54aaccd065 354 rightCounter = rand()%200 + 75;
jmelliadis3 0:5a54aaccd065 355 upCounter = rand()%200 + 75;
jmelliadis3 0:5a54aaccd065 356 downCounter = rand()%200 + 75;
jmelliadis3 0:5a54aaccd065 357 scrollSpeed = 2;
jmelliadis3 0:5a54aaccd065 358
jmelliadis3 0:5a54aaccd065 359 uLCD.locate(7,6);
jmelliadis3 0:5a54aaccd065 360 uLCD.printf("Easy ");
jmelliadis3 0:5a54aaccd065 361 break;
jmelliadis3 0:5a54aaccd065 362
jmelliadis3 0:5a54aaccd065 363 case medium:
jmelliadis3 0:5a54aaccd065 364 leftCounter = rand()%150 + 50;
jmelliadis3 0:5a54aaccd065 365 rightCounter = rand()%150 + 50;
jmelliadis3 0:5a54aaccd065 366 upCounter = rand()%150 + 50;
jmelliadis3 0:5a54aaccd065 367 downCounter = rand()%150 + 50;
jmelliadis3 0:5a54aaccd065 368 scrollSpeed = 4;
jmelliadis3 0:5a54aaccd065 369
jmelliadis3 0:5a54aaccd065 370 uLCD.locate(7,6);
jmelliadis3 0:5a54aaccd065 371 uLCD.printf("Medium");
jmelliadis3 0:5a54aaccd065 372 break;
jmelliadis3 0:5a54aaccd065 373
jmelliadis3 0:5a54aaccd065 374 case hard:
jmelliadis3 0:5a54aaccd065 375 leftCounter = rand()%100 + 25;
jmelliadis3 0:5a54aaccd065 376 rightCounter = rand()%100 + 25;
jmelliadis3 0:5a54aaccd065 377 upCounter = rand()%100 + 25;
jmelliadis3 0:5a54aaccd065 378 downCounter = rand()%100 + 25;
jmelliadis3 0:5a54aaccd065 379 scrollSpeed = 6;
jmelliadis3 0:5a54aaccd065 380
jmelliadis3 0:5a54aaccd065 381 uLCD.locate(7,6);
jmelliadis3 0:5a54aaccd065 382 uLCD.printf("Hard ");
jmelliadis3 0:5a54aaccd065 383 break;
jmelliadis3 0:5a54aaccd065 384 }
jmelliadis3 0:5a54aaccd065 385
jmelliadis3 0:5a54aaccd065 386 ready = 0;
jmelliadis3 0:5a54aaccd065 387
jmelliadis3 0:5a54aaccd065 388
jmelliadis3 0:5a54aaccd065 389
jmelliadis3 0:5a54aaccd065 390 break;
jmelliadis3 0:5a54aaccd065 391
jmelliadis3 0:5a54aaccd065 392 case playing:
jmelliadis3 0:5a54aaccd065 393
jmelliadis3 0:5a54aaccd065 394 if (!ready)
jmelliadis3 0:5a54aaccd065 395 {
jmelliadis3 0:5a54aaccd065 396 uLCD.cls();
jmelliadis3 0:5a54aaccd065 397
jmelliadis3 0:5a54aaccd065 398 uLCD.filled_rectangle(0,0,128,128,0x0000FF);
jmelliadis3 0:5a54aaccd065 399
jmelliadis3 0:5a54aaccd065 400 uLCD.filled_rectangle(0,100,3,120,0xFFFFFF);
jmelliadis3 0:5a54aaccd065 401 uLCD.filled_rectangle(25,100,36,120,0xFFFFFF);
jmelliadis3 0:5a54aaccd065 402 uLCD.filled_rectangle(58,100,69,120,0xFFFFFF);
jmelliadis3 0:5a54aaccd065 403 uLCD.filled_rectangle(91,100,103,120,0xFFFFFF);
jmelliadis3 0:5a54aaccd065 404 uLCD.filled_rectangle(125,100,128,120,0xFFFFFF);
jmelliadis3 0:5a54aaccd065 405
jmelliadis3 0:5a54aaccd065 406 ready = 1;
jmelliadis3 0:5a54aaccd065 407 start = 1;
jmelliadis3 0:5a54aaccd065 408 stop = 0;
jmelliadis3 0:5a54aaccd065 409 }
jmelliadis3 0:5a54aaccd065 410
jmelliadis3 0:5a54aaccd065 411 if (leftCounter <= 0){
jmelliadis3 0:5a54aaccd065 412 addToEnd(leftRoot);
jmelliadis3 0:5a54aaccd065 413
jmelliadis3 0:5a54aaccd065 414 switch (difficulty) {
jmelliadis3 0:5a54aaccd065 415 case easy:
jmelliadis3 0:5a54aaccd065 416 leftCounter = rand()%200 + 75;
jmelliadis3 0:5a54aaccd065 417 break;
jmelliadis3 0:5a54aaccd065 418
jmelliadis3 0:5a54aaccd065 419 case medium:
jmelliadis3 0:5a54aaccd065 420 leftCounter = rand()%150 + 50;
jmelliadis3 0:5a54aaccd065 421 break;
jmelliadis3 0:5a54aaccd065 422
jmelliadis3 0:5a54aaccd065 423 case hard:
jmelliadis3 0:5a54aaccd065 424 leftCounter = rand()%100 + 25;
jmelliadis3 0:5a54aaccd065 425 break;
jmelliadis3 0:5a54aaccd065 426 }
jmelliadis3 0:5a54aaccd065 427 drawArrow = 0;
jmelliadis3 0:5a54aaccd065 428 }
jmelliadis3 0:5a54aaccd065 429
jmelliadis3 0:5a54aaccd065 430 leftCounter-=scrollSpeed;
jmelliadis3 0:5a54aaccd065 431
jmelliadis3 0:5a54aaccd065 432 temp = leftRoot;
jmelliadis3 0:5a54aaccd065 433 while (temp != NULL)
jmelliadis3 0:5a54aaccd065 434 {
jmelliadis3 0:5a54aaccd065 435 drawLeftArrow(temp->yPos);
jmelliadis3 0:5a54aaccd065 436 (temp->yPos)+=scrollSpeed;
jmelliadis3 0:5a54aaccd065 437 temp = temp->next;
jmelliadis3 0:5a54aaccd065 438 }
jmelliadis3 0:5a54aaccd065 439
jmelliadis3 0:5a54aaccd065 440 if (leftRoot != NULL) {
jmelliadis3 0:5a54aaccd065 441 if (leftRoot->yPos >= 120 || nodeToDelete == left) {
jmelliadis3 0:5a54aaccd065 442 meter--;
jmelliadis3 0:5a54aaccd065 443 deleteRoot(leftRoot, 0);
jmelliadis3 0:5a54aaccd065 444 deleted = 1;
jmelliadis3 0:5a54aaccd065 445 }
jmelliadis3 0:5a54aaccd065 446 }
jmelliadis3 0:5a54aaccd065 447
jmelliadis3 0:5a54aaccd065 448
jmelliadis3 0:5a54aaccd065 449
jmelliadis3 0:5a54aaccd065 450
jmelliadis3 0:5a54aaccd065 451
jmelliadis3 0:5a54aaccd065 452 if (downCounter <= 0 && drawArrow){
jmelliadis3 0:5a54aaccd065 453 addToEnd(downRoot);
jmelliadis3 0:5a54aaccd065 454 switch (difficulty) {
jmelliadis3 0:5a54aaccd065 455 case easy:
jmelliadis3 0:5a54aaccd065 456 downCounter = rand()%200 + 75;
jmelliadis3 0:5a54aaccd065 457 break;
jmelliadis3 0:5a54aaccd065 458
jmelliadis3 0:5a54aaccd065 459 case medium:
jmelliadis3 0:5a54aaccd065 460 downCounter = rand()%150 + 50;
jmelliadis3 0:5a54aaccd065 461 break;
jmelliadis3 0:5a54aaccd065 462
jmelliadis3 0:5a54aaccd065 463 case hard:
jmelliadis3 0:5a54aaccd065 464 downCounter = rand()%100 + 25;
jmelliadis3 0:5a54aaccd065 465 break;
jmelliadis3 0:5a54aaccd065 466 }
jmelliadis3 0:5a54aaccd065 467 drawArrow = 0;
jmelliadis3 0:5a54aaccd065 468 }
jmelliadis3 0:5a54aaccd065 469
jmelliadis3 0:5a54aaccd065 470 downCounter-=scrollSpeed;
jmelliadis3 0:5a54aaccd065 471
jmelliadis3 0:5a54aaccd065 472 temp = downRoot;
jmelliadis3 0:5a54aaccd065 473 while (temp != NULL)
jmelliadis3 0:5a54aaccd065 474 {
jmelliadis3 0:5a54aaccd065 475 drawDownArrow(temp->yPos);
jmelliadis3 0:5a54aaccd065 476 (temp->yPos)+=scrollSpeed;
jmelliadis3 0:5a54aaccd065 477 temp = temp->next;
jmelliadis3 0:5a54aaccd065 478 }
jmelliadis3 0:5a54aaccd065 479
jmelliadis3 0:5a54aaccd065 480 if (downRoot != NULL) {
jmelliadis3 0:5a54aaccd065 481 if (downRoot->yPos >= 120 || nodeToDelete == down) {
jmelliadis3 0:5a54aaccd065 482 meter--;
jmelliadis3 0:5a54aaccd065 483 deleteRoot(downRoot, 2);
jmelliadis3 0:5a54aaccd065 484 deleted = 1;
jmelliadis3 0:5a54aaccd065 485 }
jmelliadis3 0:5a54aaccd065 486 }
jmelliadis3 0:5a54aaccd065 487
jmelliadis3 0:5a54aaccd065 488
jmelliadis3 0:5a54aaccd065 489
jmelliadis3 0:5a54aaccd065 490
jmelliadis3 0:5a54aaccd065 491
jmelliadis3 0:5a54aaccd065 492 if (rightCounter <= 0 && drawArrow){
jmelliadis3 0:5a54aaccd065 493 addToEnd(rightRoot);
jmelliadis3 0:5a54aaccd065 494 switch (difficulty) {
jmelliadis3 0:5a54aaccd065 495 case easy:
jmelliadis3 0:5a54aaccd065 496 rightCounter = rand()%200 + 75;
jmelliadis3 0:5a54aaccd065 497 break;
jmelliadis3 0:5a54aaccd065 498
jmelliadis3 0:5a54aaccd065 499 case medium:
jmelliadis3 0:5a54aaccd065 500 rightCounter = rand()%150 + 50;
jmelliadis3 0:5a54aaccd065 501 break;
jmelliadis3 0:5a54aaccd065 502
jmelliadis3 0:5a54aaccd065 503 case hard:
jmelliadis3 0:5a54aaccd065 504 rightCounter = rand()%100 + 25;
jmelliadis3 0:5a54aaccd065 505 break;
jmelliadis3 0:5a54aaccd065 506 }
jmelliadis3 0:5a54aaccd065 507
jmelliadis3 0:5a54aaccd065 508 drawArrow = 0;
jmelliadis3 0:5a54aaccd065 509 }
jmelliadis3 0:5a54aaccd065 510
jmelliadis3 0:5a54aaccd065 511 rightCounter-=scrollSpeed;
jmelliadis3 0:5a54aaccd065 512
jmelliadis3 0:5a54aaccd065 513 temp = rightRoot;
jmelliadis3 0:5a54aaccd065 514 while (temp != NULL)
jmelliadis3 0:5a54aaccd065 515 {
jmelliadis3 0:5a54aaccd065 516 drawRightArrow(temp->yPos);
jmelliadis3 0:5a54aaccd065 517 (temp->yPos)+=scrollSpeed;
jmelliadis3 0:5a54aaccd065 518 temp = temp->next;
jmelliadis3 0:5a54aaccd065 519 }
jmelliadis3 0:5a54aaccd065 520
jmelliadis3 0:5a54aaccd065 521 if (rightRoot != NULL) {
jmelliadis3 0:5a54aaccd065 522 if (rightRoot->yPos >= 120 || nodeToDelete == right) {
jmelliadis3 0:5a54aaccd065 523 meter--;
jmelliadis3 0:5a54aaccd065 524 deleteRoot(rightRoot, 3);
jmelliadis3 0:5a54aaccd065 525 deleted = 1;
jmelliadis3 0:5a54aaccd065 526 }
jmelliadis3 0:5a54aaccd065 527 }
jmelliadis3 0:5a54aaccd065 528
jmelliadis3 0:5a54aaccd065 529
jmelliadis3 0:5a54aaccd065 530
jmelliadis3 0:5a54aaccd065 531
jmelliadis3 0:5a54aaccd065 532
jmelliadis3 0:5a54aaccd065 533 if (upCounter <= 0 && drawArrow){
jmelliadis3 0:5a54aaccd065 534 addToEnd(upRoot);
jmelliadis3 0:5a54aaccd065 535 switch (difficulty) {
jmelliadis3 0:5a54aaccd065 536 case easy:
jmelliadis3 0:5a54aaccd065 537 upCounter = rand()%200 + 75;
jmelliadis3 0:5a54aaccd065 538 break;
jmelliadis3 0:5a54aaccd065 539
jmelliadis3 0:5a54aaccd065 540 case medium:
jmelliadis3 0:5a54aaccd065 541 upCounter = rand()%150 + 50;
jmelliadis3 0:5a54aaccd065 542 break;
jmelliadis3 0:5a54aaccd065 543
jmelliadis3 0:5a54aaccd065 544 case hard:
jmelliadis3 0:5a54aaccd065 545 upCounter = rand()%100 + 25;
jmelliadis3 0:5a54aaccd065 546 break;
jmelliadis3 0:5a54aaccd065 547 }
jmelliadis3 0:5a54aaccd065 548
jmelliadis3 0:5a54aaccd065 549 drawArrow = 0;
jmelliadis3 0:5a54aaccd065 550 }
jmelliadis3 0:5a54aaccd065 551
jmelliadis3 0:5a54aaccd065 552 upCounter-=scrollSpeed;
jmelliadis3 0:5a54aaccd065 553
jmelliadis3 0:5a54aaccd065 554 temp = upRoot;
jmelliadis3 0:5a54aaccd065 555 while (temp != NULL)
jmelliadis3 0:5a54aaccd065 556 {
jmelliadis3 0:5a54aaccd065 557 drawUpArrow(temp->yPos);
jmelliadis3 0:5a54aaccd065 558 (temp->yPos)+=scrollSpeed;
jmelliadis3 0:5a54aaccd065 559 temp = temp->next;
jmelliadis3 0:5a54aaccd065 560 }
jmelliadis3 0:5a54aaccd065 561
jmelliadis3 0:5a54aaccd065 562 if (upRoot != NULL) {
jmelliadis3 0:5a54aaccd065 563 if (upRoot->yPos >= 120 || nodeToDelete == up) {
jmelliadis3 0:5a54aaccd065 564 meter--;
jmelliadis3 0:5a54aaccd065 565 deleteRoot(upRoot, 1);
jmelliadis3 0:5a54aaccd065 566 deleted = 1;
jmelliadis3 0:5a54aaccd065 567 }
jmelliadis3 0:5a54aaccd065 568 }
jmelliadis3 0:5a54aaccd065 569
jmelliadis3 0:5a54aaccd065 570 break;
jmelliadis3 0:5a54aaccd065 571
jmelliadis3 0:5a54aaccd065 572 case over:
jmelliadis3 0:5a54aaccd065 573 if (ready)
jmelliadis3 0:5a54aaccd065 574 {
jmelliadis3 0:5a54aaccd065 575 stop = 1;
jmelliadis3 0:5a54aaccd065 576 start = 0;
jmelliadis3 0:5a54aaccd065 577 while (leftRoot) {
jmelliadis3 0:5a54aaccd065 578 deleteRoot(leftRoot,0);
jmelliadis3 0:5a54aaccd065 579 }
jmelliadis3 0:5a54aaccd065 580
jmelliadis3 0:5a54aaccd065 581 while (upRoot) {
jmelliadis3 0:5a54aaccd065 582 deleteRoot(upRoot,1);
jmelliadis3 0:5a54aaccd065 583 }
jmelliadis3 0:5a54aaccd065 584
jmelliadis3 0:5a54aaccd065 585 while (downRoot) {
jmelliadis3 0:5a54aaccd065 586 deleteRoot(downRoot,2);
jmelliadis3 0:5a54aaccd065 587 }
jmelliadis3 0:5a54aaccd065 588
jmelliadis3 0:5a54aaccd065 589 while (rightRoot) {
jmelliadis3 0:5a54aaccd065 590 deleteRoot(rightRoot,3);
jmelliadis3 0:5a54aaccd065 591 }
jmelliadis3 0:5a54aaccd065 592
jmelliadis3 0:5a54aaccd065 593 uLCD.locate(5,8);
jmelliadis3 0:5a54aaccd065 594 uLCD.color(WHITE);
jmelliadis3 0:5a54aaccd065 595 uLCD.textbackground_color(BLUE);
jmelliadis3 0:5a54aaccd065 596 uLCD.text_mode(OPAQUE);
jmelliadis3 0:5a54aaccd065 597 uLCD.set_font(FONT_7X8);
jmelliadis3 0:5a54aaccd065 598 uLCD.printf("Game Over");
jmelliadis3 0:5a54aaccd065 599
jmelliadis3 0:5a54aaccd065 600 uLCD.locate(14,0);
jmelliadis3 0:5a54aaccd065 601 uLCD.printf("%04d", score);
jmelliadis3 0:5a54aaccd065 602 ready = 0;
jmelliadis3 0:5a54aaccd065 603 score = 0;
jmelliadis3 0:5a54aaccd065 604 meter = 15;
jmelliadis3 0:5a54aaccd065 605 }
jmelliadis3 0:5a54aaccd065 606 break;
jmelliadis3 0:5a54aaccd065 607 }
jmelliadis3 0:5a54aaccd065 608 t.stop();
jmelliadis3 0:5a54aaccd065 609 time = .1-t.read();
jmelliadis3 0:5a54aaccd065 610 if (time < 0) time = 0;
jmelliadis3 0:5a54aaccd065 611 uLCD.locate(0,0);
jmelliadis3 0:5a54aaccd065 612 uLCD.printf("%04d", score);
jmelliadis3 0:5a54aaccd065 613
jmelliadis3 0:5a54aaccd065 614
jmelliadis3 0:5a54aaccd065 615 if (meter > 15) meter = 15;
jmelliadis3 0:5a54aaccd065 616 uLCD.locate(14,0);
jmelliadis3 0:5a54aaccd065 617 uLCD.printf("%4d", meter);
jmelliadis3 0:5a54aaccd065 618
jmelliadis3 0:5a54aaccd065 619 if (meter < 0) state = over;
jmelliadis3 0:5a54aaccd065 620
jmelliadis3 0:5a54aaccd065 621 if (deleted)
jmelliadis3 0:5a54aaccd065 622 {
jmelliadis3 0:5a54aaccd065 623 nodeToDelete = none;
jmelliadis3 0:5a54aaccd065 624 deleted = 0;
jmelliadis3 0:5a54aaccd065 625 }
jmelliadis3 0:5a54aaccd065 626 wait(time);
jmelliadis3 0:5a54aaccd065 627 }
jmelliadis3 0:5a54aaccd065 628 }