Kamikaze Race. Bin Mohd Kamaludin. 200876993.

Dependencies:   el14hzbm_Final_Project mbed

Fork of el14hzbm_FinalProject by ELEC2645 (2015/16)

Committer:
Zafranhernandez
Date:
Tue Feb 20 11:56:52 2018 +0000
Revision:
3:c2227b3e2f0c
Parent:
1:58b4f9dda460
hah

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Zafranhernandez 1:58b4f9dda460 1 /**
Zafranhernandez 1:58b4f9dda460 2 @file main.cpp
Zafranhernandez 1:58b4f9dda460 3 @brief Program implementation
Zafranhernandez 1:58b4f9dda460 4 */
Zafranhernandez 1:58b4f9dda460 5
Zafranhernandez 1:58b4f9dda460 6 #include "main.h"
Zafranhernandez 0:211360300ec1 7
Zafranhernandez 0:211360300ec1 8 int main()
Zafranhernandez 0:211360300ec1 9 {
Zafranhernandez 1:58b4f9dda460 10 lcd.init(); //initialize the lcd
Zafranhernandez 1:58b4f9dda460 11 initArray(); //fill array with sine sample
Zafranhernandez 1:58b4f9dda460 12 button.rise(&button_isr); //will read the rise edge when button is pressed
Zafranhernandez 1:58b4f9dda460 13 button.mode(PullDown); //external button is set as PullDown
Zafranhernandez 0:211360300ec1 14
Zafranhernandez 0:211360300ec1 15 while(1) {
Zafranhernandez 1:58b4f9dda460 16
Zafranhernandez 1:58b4f9dda460 17 intro(); //state 0 - introduction interface
Zafranhernandez 1:58b4f9dda460 18 firstView(); //state 1 - main menu interface
Zafranhernandez 1:58b4f9dda460 19 gameView(); //state 2 - game interface
Zafranhernandez 1:58b4f9dda460 20 optionView(); //state 3 - option interface
Zafranhernandez 1:58b4f9dda460 21 instructionView(); //state 4 - how to play interface
Zafranhernandez 1:58b4f9dda460 22 brightnessView(); //state 5 - set up brightness interface
Zafranhernandez 1:58b4f9dda460 23 finishView(g_score); //state 6 - final score interface
Zafranhernandez 1:58b4f9dda460 24 }
Zafranhernandez 1:58b4f9dda460 25 }
Zafranhernandez 3:c2227b3e2f0c 26
Zafranhernandez 1:58b4f9dda460 27 void intro() //state 0 - introduction interface
Zafranhernandez 1:58b4f9dda460 28 {
Zafranhernandez 1:58b4f9dda460 29 if(state==0) {
Zafranhernandez 0:211360300ec1 30
Zafranhernandez 1:58b4f9dda460 31 for(int k=90; k>5; k--) {
Zafranhernandez 1:58b4f9dda460 32 lcd.printString("KAMIKAZE",k,1); //display game title in left moving motion
Zafranhernandez 1:58b4f9dda460 33 lcd.printString("RACE",k+12,2);
Zafranhernandez 1:58b4f9dda460 34 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 35 wait(0.1);
Zafranhernandez 1:58b4f9dda460 36 lcd.clear();
Zafranhernandez 1:58b4f9dda460 37
Zafranhernandez 1:58b4f9dda460 38 if(g_button_flag==1) {
Zafranhernandez 1:58b4f9dda460 39 g_button_flag=0;
Zafranhernandez 1:58b4f9dda460 40 state=1;
Zafranhernandez 1:58b4f9dda460 41 break;
Zafranhernandez 1:58b4f9dda460 42 }
Zafranhernandez 1:58b4f9dda460 43 }
Zafranhernandez 1:58b4f9dda460 44 state=1;
Zafranhernandez 0:211360300ec1 45 }
Zafranhernandez 0:211360300ec1 46 }
Zafranhernandez 0:211360300ec1 47
Zafranhernandez 1:58b4f9dda460 48 void firstView() //state 1 - main menu interface
Zafranhernandez 0:211360300ec1 49 {
Zafranhernandez 1:58b4f9dda460 50 if(state==1) {
Zafranhernandez 0:211360300ec1 51 pointer_x=20;
Zafranhernandez 1:58b4f9dda460 52 pointer_y=31;
Zafranhernandez 1:58b4f9dda460 53
Zafranhernandez 0:211360300ec1 54 while(loop==0) {
Zafranhernandez 1:58b4f9dda460 55 sleepTimer.start(); // start timer
Zafranhernandez 1:58b4f9dda460 56
Zafranhernandez 1:58b4f9dda460 57 if(sleepTimer.read()<15) { //display all the main menu interface
Zafranhernandez 1:58b4f9dda460 58 lcd.printString("KAMIKAZE",5,1);
Zafranhernandez 1:58b4f9dda460 59 lcd.printString("RACE",17,2);
Zafranhernandez 1:58b4f9dda460 60 lcd.drawLine(58,46,58,2,2);
Zafranhernandez 1:58b4f9dda460 61 lcd.drawLine(67,46,67,2,2);
Zafranhernandez 1:58b4f9dda460 62 lcd.drawLine(76,46,76,2,2);
Zafranhernandez 1:58b4f9dda460 63 lcd.drawCar(60,10,1);
Zafranhernandez 1:58b4f9dda460 64 lcd.drawCar(60,25,1);
Zafranhernandez 1:58b4f9dda460 65 lcd.drawCar(69,23,1);
Zafranhernandez 1:58b4f9dda460 66 lcd.printString("Start",14,4);
Zafranhernandez 1:58b4f9dda460 67 lcd.printString("Option",14,5);
Zafranhernandez 1:58b4f9dda460 68 firstViewPointer();
Zafranhernandez 1:58b4f9dda460 69 lcd.drawCar(5,pointer_y,1);
Zafranhernandez 1:58b4f9dda460 70 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 71 wait(0.1);
Zafranhernandez 1:58b4f9dda460 72 lcd.clear();
Zafranhernandez 1:58b4f9dda460 73
Zafranhernandez 1:58b4f9dda460 74 if(g_button_flag==1) {
Zafranhernandez 1:58b4f9dda460 75 g_button_flag=0;
Zafranhernandez 1:58b4f9dda460 76 loop=1;
Zafranhernandez 1:58b4f9dda460 77
Zafranhernandez 1:58b4f9dda460 78 if(pointer_y==31) {
Zafranhernandez 1:58b4f9dda460 79 state=2; //go to game state
Zafranhernandez 1:58b4f9dda460 80 } else {
Zafranhernandez 1:58b4f9dda460 81 state=3; //go to option state
Zafranhernandez 1:58b4f9dda460 82 }
Zafranhernandez 0:211360300ec1 83 }
Zafranhernandez 1:58b4f9dda460 84 } else { //go to sleep mode after 15 second has passed
Zafranhernandez 1:58b4f9dda460 85 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 86 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 87 SleepView();
Zafranhernandez 0:211360300ec1 88 }
Zafranhernandez 0:211360300ec1 89 }
Zafranhernandez 0:211360300ec1 90 loop=0;
Zafranhernandez 1:58b4f9dda460 91 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 92 sleepTimer.reset(); // reset to 0
Zafranhernandez 0:211360300ec1 93 }
Zafranhernandez 0:211360300ec1 94 }
Zafranhernandez 0:211360300ec1 95
Zafranhernandez 1:58b4f9dda460 96 void gameView() //state 2 - game interface
Zafranhernandez 0:211360300ec1 97 {
Zafranhernandez 1:58b4f9dda460 98 if(state==2) {
Zafranhernandez 0:211360300ec1 99
Zafranhernandez 1:58b4f9dda460 100 initialGameInterface(); //function to initialize the game with countdown timer.
Zafranhernandez 1:58b4f9dda460 101 initGameVar(); //function to initiate all variable used in the game
Zafranhernandez 0:211360300ec1 102
Zafranhernandez 1:58b4f9dda460 103 while(g_crash==0) { //0 - crash not occur
Zafranhernandez 0:211360300ec1 104
Zafranhernandez 0:211360300ec1 105 for(int i=1; i<=g_level*20; i++) {
Zafranhernandez 1:58b4f9dda460 106 carValue[i]=9*((rand()%6)+1)-5; //generate random position for all vehicle on the road
Zafranhernandez 0:211360300ec1 107 }
Zafranhernandez 0:211360300ec1 108
Zafranhernandez 0:211360300ec1 109 for(int y_move=-5; y_move<100000; y_move++) {
Zafranhernandez 0:211360300ec1 110
Zafranhernandez 1:58b4f9dda460 111 if(game==PLAY) { //when game is played
Zafranhernandez 0:211360300ec1 112 crash(carValue,y_move,g_score,g_level,car_x,car_y,delay); //function to check whether crash occur
Zafranhernandez 1:58b4f9dda460 113 playermovement(g_level); //function to control the player's car movement
Zafranhernandez 0:211360300ec1 114 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 115 checkLastCar(g_level); //function to check when will the last last car go out from the screen to finish level
Zafranhernandez 3:c2227b3e2f0c 116
Zafranhernandez 3:c2227b3e2f0c 117 if((y_move-(lastCar))>40) {
Zafranhernandez 1:58b4f9dda460 118 finishLevel(g_level); //finish level when last car has passed through
Zafranhernandez 0:211360300ec1 119 break;
Zafranhernandez 0:211360300ec1 120 }
Zafranhernandez 0:211360300ec1 121 if(g_crash==1) {
Zafranhernandez 0:211360300ec1 122 crashsound(); //play sound when crush happened
Zafranhernandez 0:211360300ec1 123 wait(2); //delay to give time for new game
Zafranhernandez 0:211360300ec1 124
Zafranhernandez 0:211360300ec1 125 if(g_liveleft<=1) { //check if live is zero after crash occured
Zafranhernandez 0:211360300ec1 126 lcd.clear(); // if zero, game stop
Zafranhernandez 0:211360300ec1 127 break;
Zafranhernandez 1:58b4f9dda460 128 } else { //if still has life
Zafranhernandez 1:58b4f9dda460 129 g_crash=0; //continue the game
Zafranhernandez 1:58b4f9dda460 130 g_liveleft=g_liveleft-1; //reduce the life
Zafranhernandez 1:58b4f9dda460 131 g_level=g_level-1; //start at same level when crash occur
Zafranhernandez 1:58b4f9dda460 132 car_x=22; //return the car back to initial position
Zafranhernandez 0:211360300ec1 133 car_y=38;
Zafranhernandez 0:211360300ec1 134 break;
Zafranhernandez 0:211360300ec1 135 }
Zafranhernandez 0:211360300ec1 136 }
Zafranhernandez 0:211360300ec1 137 lcd.clear();
Zafranhernandez 0:211360300ec1 138 g_score=g_score+1; //increase the score by 1 after every loop
Zafranhernandez 1:58b4f9dda460 139 } else { //when game is paused
Zafranhernandez 1:58b4f9dda460 140 y_move=y_move-1; //fix y_move to make the vehicle static
Zafranhernandez 3:c2227b3e2f0c 141 game_interface(g_score,g_level,g_liveleft);
Zafranhernandez 1:58b4f9dda460 142 lcd.printString("Paused",15,2); //display pause on the screen
Zafranhernandez 0:211360300ec1 143 lcd.refresh();
Zafranhernandez 0:211360300ec1 144 }
Zafranhernandez 1:58b4f9dda460 145 if (g_button_flag==1) { //press button to paused/play the game.
Zafranhernandez 0:211360300ec1 146 g_button_flag=0;
Zafranhernandez 0:211360300ec1 147 pausesound();
Zafranhernandez 0:211360300ec1 148 wait(0.1);
Zafranhernandez 0:211360300ec1 149 if(game == PLAY) {
Zafranhernandez 0:211360300ec1 150 game = PAUSE;
Zafranhernandez 0:211360300ec1 151 } else {
Zafranhernandez 0:211360300ec1 152 game=PLAY;
Zafranhernandez 0:211360300ec1 153 }
Zafranhernandez 0:211360300ec1 154 }
Zafranhernandez 0:211360300ec1 155 }
Zafranhernandez 0:211360300ec1 156 g_level=g_level+1;
Zafranhernandez 3:c2227b3e2f0c 157 } //when the game finished, move to finish View(display high score)
Zafranhernandez 1:58b4f9dda460 158 state=6;
Zafranhernandez 1:58b4f9dda460 159 finishView(g_score);
Zafranhernandez 1:58b4f9dda460 160 state=0; //goes back to main menu
Zafranhernandez 1:58b4f9dda460 161 }
Zafranhernandez 1:58b4f9dda460 162 }
Zafranhernandez 1:58b4f9dda460 163
Zafranhernandez 1:58b4f9dda460 164 void optionView() //state 3 - option interface
Zafranhernandez 1:58b4f9dda460 165 {
Zafranhernandez 1:58b4f9dda460 166 if(state==3) {
Zafranhernandez 1:58b4f9dda460 167 pointer_x=5;
Zafranhernandez 1:58b4f9dda460 168 pointer_y=7;
Zafranhernandez 3:c2227b3e2f0c 169
Zafranhernandez 1:58b4f9dda460 170 while(loop==0) {
Zafranhernandez 1:58b4f9dda460 171 sleepTimer.start(); // start timer
Zafranhernandez 3:c2227b3e2f0c 172
Zafranhernandez 1:58b4f9dda460 173 if(sleepTimer.read()<15) {
Zafranhernandez 1:58b4f9dda460 174 lcd.printString("Instruction",13,1);
Zafranhernandez 1:58b4f9dda460 175 lcd.printString("Brightness",13,2);
Zafranhernandez 1:58b4f9dda460 176 lcd.printString("Achievement",13,3);
Zafranhernandez 1:58b4f9dda460 177 lcd.printString("Back",13,4);
Zafranhernandez 1:58b4f9dda460 178 optionPointer();
Zafranhernandez 1:58b4f9dda460 179 lcd.drawCar(4,pointer_y,1);
Zafranhernandez 1:58b4f9dda460 180 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 181 wait(0.1);
Zafranhernandez 1:58b4f9dda460 182 lcd.clear();
Zafranhernandez 3:c2227b3e2f0c 183
Zafranhernandez 1:58b4f9dda460 184 if(g_button_flag==1) {
Zafranhernandez 1:58b4f9dda460 185 g_button_flag=0;
Zafranhernandez 1:58b4f9dda460 186 loop=1;
Zafranhernandez 3:c2227b3e2f0c 187
Zafranhernandez 1:58b4f9dda460 188 if(pointer_y==7) {
Zafranhernandez 1:58b4f9dda460 189 state=4;//go to instruction
Zafranhernandez 1:58b4f9dda460 190 } else if(pointer_y==15) {
Zafranhernandez 1:58b4f9dda460 191 state=5;//go to brightness
Zafranhernandez 1:58b4f9dda460 192 } else if(pointer_y==31) {
Zafranhernandez 1:58b4f9dda460 193 state=1;//go back
Zafranhernandez 1:58b4f9dda460 194 } else { //pointer====23
Zafranhernandez 1:58b4f9dda460 195 state=6;//go to achievement
Zafranhernandez 1:58b4f9dda460 196 }
Zafranhernandez 1:58b4f9dda460 197 }
Zafranhernandez 1:58b4f9dda460 198 } else {
Zafranhernandez 1:58b4f9dda460 199 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 200 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 201 SleepView();
Zafranhernandez 1:58b4f9dda460 202 }
Zafranhernandez 0:211360300ec1 203 }
Zafranhernandez 1:58b4f9dda460 204 loop=0;
Zafranhernandez 1:58b4f9dda460 205 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 206 sleepTimer.reset(); // reset to 0
Zafranhernandez 0:211360300ec1 207 }
Zafranhernandez 0:211360300ec1 208 }
Zafranhernandez 0:211360300ec1 209
Zafranhernandez 1:58b4f9dda460 210 void instructionView() //state 4 - how to play interface
Zafranhernandez 1:58b4f9dda460 211 {
Zafranhernandez 1:58b4f9dda460 212 if(state==4) {
Zafranhernandez 3:c2227b3e2f0c 213
Zafranhernandez 1:58b4f9dda460 214 while(loop==0) {
Zafranhernandez 1:58b4f9dda460 215 sleepTimer.start(); // start timer
Zafranhernandez 3:c2227b3e2f0c 216
Zafranhernandez 1:58b4f9dda460 217 if(sleepTimer.read()<15) {
Zafranhernandez 1:58b4f9dda460 218 lcd.printString("Make your way",0,0); //explain how to play the game
Zafranhernandez 1:58b4f9dda460 219 lcd.printString("through the",0,1);
Zafranhernandez 1:58b4f9dda460 220 lcd.printString("traffic by ",0,2);
Zafranhernandez 1:58b4f9dda460 221 lcd.printString("avoiding all",0,3);
Zafranhernandez 1:58b4f9dda460 222 lcd.printString("vehicles on",0,4);
Zafranhernandez 1:58b4f9dda460 223 lcd.printString("the highway.",0,5);
Zafranhernandez 1:58b4f9dda460 224 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 225 wait(0.1);
Zafranhernandez 1:58b4f9dda460 226 lcd.clear();
Zafranhernandez 3:c2227b3e2f0c 227
Zafranhernandez 1:58b4f9dda460 228 if(g_button_flag==1) {
Zafranhernandez 1:58b4f9dda460 229 g_button_flag=0;
Zafranhernandez 1:58b4f9dda460 230 loop=1;
Zafranhernandez 1:58b4f9dda460 231 state=9;
Zafranhernandez 1:58b4f9dda460 232 }
Zafranhernandez 1:58b4f9dda460 233 } else {
Zafranhernandez 1:58b4f9dda460 234 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 235 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 236 SleepView();
Zafranhernandez 1:58b4f9dda460 237 }
Zafranhernandez 1:58b4f9dda460 238 }
Zafranhernandez 1:58b4f9dda460 239 loop=0;
Zafranhernandez 1:58b4f9dda460 240 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 241 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 242 }
Zafranhernandez 1:58b4f9dda460 243 if(state==9) {
Zafranhernandez 3:c2227b3e2f0c 244
Zafranhernandez 1:58b4f9dda460 245 while(loop==0) {
Zafranhernandez 1:58b4f9dda460 246 sleepTimer.start(); // start timer
Zafranhernandez 3:c2227b3e2f0c 247
Zafranhernandez 1:58b4f9dda460 248 if(sleepTimer.read()<15) {
Zafranhernandez 1:58b4f9dda460 249 lcd.printString("You have ",0,0);
Zafranhernandez 1:58b4f9dda460 250 lcd.printString("three lives",0,1);
Zafranhernandez 1:58b4f9dda460 251 lcd.printString("at the ",0,2);
Zafranhernandez 1:58b4f9dda460 252 lcd.printString("start of",0,3);
Zafranhernandez 1:58b4f9dda460 253 lcd.printString("the game.",0,4);
Zafranhernandez 1:58b4f9dda460 254 lcd.printString("Good Luck!!!",0,5);
Zafranhernandez 1:58b4f9dda460 255 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 256 wait(0.1);
Zafranhernandez 1:58b4f9dda460 257 lcd.clear();
Zafranhernandez 3:c2227b3e2f0c 258
Zafranhernandez 1:58b4f9dda460 259 if(g_button_flag==1) {
Zafranhernandez 1:58b4f9dda460 260 g_button_flag=0;
Zafranhernandez 1:58b4f9dda460 261 loop=1;
Zafranhernandez 1:58b4f9dda460 262 state=3;
Zafranhernandez 1:58b4f9dda460 263 }
Zafranhernandez 1:58b4f9dda460 264 } else {
Zafranhernandez 1:58b4f9dda460 265 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 266 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 267 SleepView();
Zafranhernandez 1:58b4f9dda460 268 }
Zafranhernandez 1:58b4f9dda460 269 }
Zafranhernandez 1:58b4f9dda460 270 loop=0;
Zafranhernandez 1:58b4f9dda460 271 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 272 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 273 }
Zafranhernandez 1:58b4f9dda460 274 }
Zafranhernandez 1:58b4f9dda460 275
Zafranhernandez 1:58b4f9dda460 276 void brightnessView() //state 5 - set up brightness interface
Zafranhernandez 0:211360300ec1 277 {
Zafranhernandez 1:58b4f9dda460 278 if(state==5) {
Zafranhernandez 1:58b4f9dda460 279 brightness_adjuster=5;
Zafranhernandez 3:c2227b3e2f0c 280
Zafranhernandez 1:58b4f9dda460 281 while(loop==0) {
Zafranhernandez 1:58b4f9dda460 282 sleepTimer.start(); // start timer
Zafranhernandez 3:c2227b3e2f0c 283
Zafranhernandez 1:58b4f9dda460 284 if(sleepTimer.read()<15) {
Zafranhernandez 1:58b4f9dda460 285 brightnessController();
Zafranhernandez 1:58b4f9dda460 286 lcd.printString("Adjust",25,1);
Zafranhernandez 1:58b4f9dda460 287 lcd.printString("Brightness",13,2);
Zafranhernandez 1:58b4f9dda460 288 lcd.printString("+",78,4);
Zafranhernandez 1:58b4f9dda460 289 lcd.printString("-",2,4);
Zafranhernandez 1:58b4f9dda460 290 lcd.setBrightness(brightness_adjuster/10);
Zafranhernandez 1:58b4f9dda460 291 lcd.drawRect(1,27,brightness_adjuster*8,4,1);
Zafranhernandez 1:58b4f9dda460 292 lcd.drawRect(1,27,81,4,0);
Zafranhernandez 1:58b4f9dda460 293 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 294 wait(0.1);
Zafranhernandez 1:58b4f9dda460 295 lcd.clear();
Zafranhernandez 3:c2227b3e2f0c 296
Zafranhernandez 1:58b4f9dda460 297 if(g_button_flag==1) {
Zafranhernandez 1:58b4f9dda460 298 g_button_flag=0;
Zafranhernandez 1:58b4f9dda460 299 loop=1;
Zafranhernandez 1:58b4f9dda460 300 state=3;
Zafranhernandez 1:58b4f9dda460 301 }
Zafranhernandez 1:58b4f9dda460 302 } else {
Zafranhernandez 1:58b4f9dda460 303 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 304 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 305 SleepView();
Zafranhernandez 1:58b4f9dda460 306 }
Zafranhernandez 1:58b4f9dda460 307 }
Zafranhernandez 1:58b4f9dda460 308 loop=0;
Zafranhernandez 1:58b4f9dda460 309 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 310 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 311 }
Zafranhernandez 1:58b4f9dda460 312 }
Zafranhernandez 1:58b4f9dda460 313
Zafranhernandez 1:58b4f9dda460 314 void finishView(int g_score) //state 6 - final score interface
Zafranhernandez 1:58b4f9dda460 315 {
Zafranhernandez 1:58b4f9dda460 316 if(state==6) {
Zafranhernandez 3:c2227b3e2f0c 317
Zafranhernandez 1:58b4f9dda460 318 while(loop==0) {
Zafranhernandez 1:58b4f9dda460 319 sleepTimer.start(); // start timer
Zafranhernandez 3:c2227b3e2f0c 320
Zafranhernandez 1:58b4f9dda460 321 if(sleepTimer.read()<15) {
Zafranhernandez 1:58b4f9dda460 322 char buffer[14];
Zafranhernandez 1:58b4f9dda460 323 int length = sprintf(buffer,"%2d",g_score/20); //display final score
Zafranhernandez 1:58b4f9dda460 324 lcd.printString("Your",30,1);
Zafranhernandez 1:58b4f9dda460 325 lcd.printString("Final Score",10,2);
Zafranhernandez 1:58b4f9dda460 326 lcd.printString("Is",34,3);
Zafranhernandez 1:58b4f9dda460 327 lcd.printString(buffer,34,4);
Zafranhernandez 1:58b4f9dda460 328 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 329 wait(0.1);
Zafranhernandez 1:58b4f9dda460 330 lcd.clear();
Zafranhernandez 3:c2227b3e2f0c 331
Zafranhernandez 1:58b4f9dda460 332 if(g_button_flag==1) {
Zafranhernandez 1:58b4f9dda460 333 g_button_flag=0;
Zafranhernandez 1:58b4f9dda460 334 loop=1;
Zafranhernandez 1:58b4f9dda460 335 state=3;
Zafranhernandez 1:58b4f9dda460 336 }
Zafranhernandez 1:58b4f9dda460 337 } else {
Zafranhernandez 1:58b4f9dda460 338 sleepTimer.stop(); // stop the timer
Zafranhernandez 1:58b4f9dda460 339 sleepTimer.reset(); // reset to 0
Zafranhernandez 1:58b4f9dda460 340 SleepView();
Zafranhernandez 1:58b4f9dda460 341 }
Zafranhernandez 1:58b4f9dda460 342 }
Zafranhernandez 1:58b4f9dda460 343 loop=0;
Zafranhernandez 1:58b4f9dda460 344 }
Zafranhernandez 1:58b4f9dda460 345 }
Zafranhernandez 1:58b4f9dda460 346
Zafranhernandez 1:58b4f9dda460 347 void SleepView() //this function applies the sleep mode concept
Zafranhernandez 3:c2227b3e2f0c 348 {
Zafranhernandez 3:c2227b3e2f0c 349 //improve power effciency for the game system
Zafranhernandez 1:58b4f9dda460 350 while(loop==0) { //expand the battery lifetime.
Zafranhernandez 1:58b4f9dda460 351 lcd.turnOff(); //also turn off the lcd scrren when not in used
Zafranhernandez 3:c2227b3e2f0c 352 sleep();
Zafranhernandez 3:c2227b3e2f0c 353
Zafranhernandez 1:58b4f9dda460 354 if(g_button_flag==1) {
Zafranhernandez 1:58b4f9dda460 355 g_button_flag=0; //if button pressed, turn on the screen back.
Zafranhernandez 1:58b4f9dda460 356 lcd.init();
Zafranhernandez 1:58b4f9dda460 357 loop=1;
Zafranhernandez 1:58b4f9dda460 358 }
Zafranhernandez 1:58b4f9dda460 359 }
Zafranhernandez 1:58b4f9dda460 360 loop=0;
Zafranhernandez 1:58b4f9dda460 361 }
Zafranhernandez 1:58b4f9dda460 362
Zafranhernandez 1:58b4f9dda460 363
Zafranhernandez 1:58b4f9dda460 364
Zafranhernandez 1:58b4f9dda460 365 void crash(int carValue[],int opponent_y,int g_score,int g_level,int k,int l,int delay) //function to check if crash occur
Zafranhernandez 1:58b4f9dda460 366 {
Zafranhernandez 1:58b4f9dda460 367 float carPixel[84][48]; //create array for vehicle on the road
Zafranhernandez 0:211360300ec1 368 float enemyPixel[84][48];
Zafranhernandez 0:211360300ec1 369
Zafranhernandez 0:211360300ec1 370 lcd.clear();
Zafranhernandez 0:211360300ec1 371 lcd.drawCar(k,l,1);
Zafranhernandez 0:211360300ec1 372 lcd.refresh();
Zafranhernandez 3:c2227b3e2f0c 373
Zafranhernandez 0:211360300ec1 374 for(int i=0; i<=54; i++) {
Zafranhernandez 0:211360300ec1 375 for(int j=0; j<=48; j++) {
Zafranhernandez 1:58b4f9dda460 376 carPixel[i][j]=lcd.getPixel(i,j); //check player's car pixel
Zafranhernandez 0:211360300ec1 377 }
Zafranhernandez 0:211360300ec1 378 }
Zafranhernandez 0:211360300ec1 379 lcd.clear();
Zafranhernandez 0:211360300ec1 380
Zafranhernandez 0:211360300ec1 381 for(int i=1; i<=(g_level*20); i++) {
Zafranhernandez 0:211360300ec1 382
Zafranhernandez 1:58b4f9dda460 383 if (g_level>=9) { //for this part, it draw different type of vehicle for given road lane.
Zafranhernandez 3:c2227b3e2f0c 384 if (carValue[i]<10) {
Zafranhernandez 1:58b4f9dda460 385 lcd.drawTruck(carValue[i],opponent_y-delay,1); //truck is drawn on most left lane
Zafranhernandez 1:58b4f9dda460 386 } else if (carValue[i]<20) {
Zafranhernandez 1:58b4f9dda460 387 lcd.drawVan(carValue[i],opponent_y-delay,1); //van is drawn second left lane
Zafranhernandez 1:58b4f9dda460 388 } else if (carValue[i]<40) {
Zafranhernandez 1:58b4f9dda460 389 lcd.drawCar(carValue[i],opponent_y-delay,1); //car is drawn on lane three and four
Zafranhernandez 1:58b4f9dda460 390 } else {
Zafranhernandez 1:58b4f9dda460 391 lcd.drawCarReverse(carValue[i],opponent_y-delay,1); //car is drawn in opposite direction for opposite lane
Zafranhernandez 1:58b4f9dda460 392 }
Zafranhernandez 0:211360300ec1 393 if(i%3==0) {
Zafranhernandez 0:211360300ec1 394 delay=delay+20;
Zafranhernandez 0:211360300ec1 395 }
Zafranhernandez 1:58b4f9dda460 396 } else if(g_level>=5) { //the step is repeat for different level
Zafranhernandez 1:58b4f9dda460 397 if (carValue[i]<10) { //higher the level, more car will be on the road to make it more difficult
Zafranhernandez 1:58b4f9dda460 398 lcd.drawTruck(carValue[i],opponent_y-delay,1);
Zafranhernandez 1:58b4f9dda460 399 } else if (carValue[i]<20) {
Zafranhernandez 1:58b4f9dda460 400 lcd.drawVan(carValue[i],opponent_y-delay,1);
Zafranhernandez 1:58b4f9dda460 401 } else if (carValue[i]<40) {
Zafranhernandez 1:58b4f9dda460 402 lcd.drawCar(carValue[i],opponent_y-delay,1);
Zafranhernandez 1:58b4f9dda460 403 } else {
Zafranhernandez 1:58b4f9dda460 404 lcd.drawCarReverse(carValue[i],opponent_y-delay,1);
Zafranhernandez 1:58b4f9dda460 405 }
Zafranhernandez 0:211360300ec1 406 if(i%2==0) {
Zafranhernandez 0:211360300ec1 407 delay=delay+20;
Zafranhernandez 0:211360300ec1 408 }
Zafranhernandez 0:211360300ec1 409 } else {
Zafranhernandez 1:58b4f9dda460 410 if (carValue[i]<10) {
Zafranhernandez 1:58b4f9dda460 411 lcd.drawTruck(carValue[i],opponent_y-delay,1);
Zafranhernandez 1:58b4f9dda460 412 } else if (carValue[i]<20) {
Zafranhernandez 1:58b4f9dda460 413 lcd.drawVan(carValue[i],opponent_y-delay,1);
Zafranhernandez 1:58b4f9dda460 414 } else if (carValue[i]<40) {
Zafranhernandez 1:58b4f9dda460 415 lcd.drawCar(carValue[i],opponent_y-delay,1);
Zafranhernandez 1:58b4f9dda460 416 } else {
Zafranhernandez 1:58b4f9dda460 417 lcd.drawCarReverse(carValue[i],opponent_y-delay,1);
Zafranhernandez 1:58b4f9dda460 418 }
Zafranhernandez 0:211360300ec1 419 delay=delay+20;
Zafranhernandez 0:211360300ec1 420 }
Zafranhernandez 0:211360300ec1 421 }
Zafranhernandez 0:211360300ec1 422 lcd.refresh();
Zafranhernandez 0:211360300ec1 423 for(int i=0; i<=54; i++) {
Zafranhernandez 0:211360300ec1 424 for(int j=0; j<=48; j++) {
Zafranhernandez 1:58b4f9dda460 425 enemyPixel[i][j]=lcd.getPixel(i,j); //now, check the pixel for traffic's car
Zafranhernandez 0:211360300ec1 426 }
Zafranhernandez 0:211360300ec1 427 }
Zafranhernandez 0:211360300ec1 428 for(int i=0; i<=54; i++) {
Zafranhernandez 0:211360300ec1 429 for(int j=0; j<=48; j++) {
Zafranhernandez 1:58b4f9dda460 430 if(enemyPixel[i][j]!=0 && carPixel[i][j]!=0) { //now, check if player's car pixel overlap with traffic's car pixel
Zafranhernandez 1:58b4f9dda460 431 lcd.printString("!!CRASH!!",2,2); //if yes, print crash
Zafranhernandez 0:211360300ec1 432 g_crash=1;
Zafranhernandez 0:211360300ec1 433 }
Zafranhernandez 0:211360300ec1 434 }
Zafranhernandez 0:211360300ec1 435 }
Zafranhernandez 1:58b4f9dda460 436 game_interface(g_score,g_level,g_liveleft); //put all the other displaying stuff to finish off the interface
Zafranhernandez 0:211360300ec1 437 lcd.drawCar(k,l,1);
Zafranhernandez 0:211360300ec1 438 lcd.refresh();
Zafranhernandez 0:211360300ec1 439 double ki=-((g_level));
Zafranhernandez 1:58b4f9dda460 440 duration=(0.02*exp(ki))+0.005; //use exponential decay equation to be used for speed control at increasing level
Zafranhernandez 3:c2227b3e2f0c 441
Zafranhernandez 0:211360300ec1 442 if(opponent_y%5==0) {
Zafranhernandez 0:211360300ec1 443 gameplaysound(duration);
Zafranhernandez 0:211360300ec1 444 } else {
Zafranhernandez 3:c2227b3e2f0c 445 wait(duration);
Zafranhernandez 0:211360300ec1 446 }
Zafranhernandez 0:211360300ec1 447 }
Zafranhernandez 0:211360300ec1 448
Zafranhernandez 1:58b4f9dda460 449 void game_interface(int g_score,int g_level,int g_liveleft) //function to provide game interface during gameplay
Zafranhernandez 0:211360300ec1 450 {
Zafranhernandez 0:211360300ec1 451 score(61,2);
Zafranhernandez 0:211360300ec1 452 level(61,18);
Zafranhernandez 0:211360300ec1 453 char buffer[14];
Zafranhernandez 1:58b4f9dda460 454 int length = sprintf(buffer,"%2d",g_score/20);
Zafranhernandez 0:211360300ec1 455 lcd.printString(buffer,62,1);
Zafranhernandez 0:211360300ec1 456 int length1 = sprintf(buffer,"%2d",g_level);
Zafranhernandez 0:211360300ec1 457 lcd.printString(buffer,62,3);
Zafranhernandez 0:211360300ec1 458 live(g_liveleft);
Zafranhernandez 0:211360300ec1 459 roadline(g_score);
Zafranhernandez 1:58b4f9dda460 460 lcd.drawRect(59,33,g_level*2,4,1);
Zafranhernandez 1:58b4f9dda460 461 lcd.drawRect(59,33,22,4,0);
Zafranhernandez 0:211360300ec1 462 }
Zafranhernandez 0:211360300ec1 463
Zafranhernandez 1:58b4f9dda460 464 void playermovement(int g_level) //function to control the player's car movement
Zafranhernandez 0:211360300ec1 465 {
Zafranhernandez 3:c2227b3e2f0c 466 if (g_level>=3) { //at higher level, speed is faster, so give small scale movement to give better handling
Zafranhernandez 0:211360300ec1 467 playerSpeed=1;
Zafranhernandez 1:58b4f9dda460 468 } else if(g_level<3) { //at lower level, speed is slower, so high scale movemement is allowed.
Zafranhernandez 1:58b4f9dda460 469 playerSpeed=2;
Zafranhernandez 0:211360300ec1 470 }
Zafranhernandez 0:211360300ec1 471
Zafranhernandez 1:58b4f9dda460 472 if(xPot>=0.7f) { //joystick movement control the screen is shown here
Zafranhernandez 0:211360300ec1 473 if(car_x>-3 && car_x<49) {
Zafranhernandez 0:211360300ec1 474 car_x=car_x+playerSpeed;
Zafranhernandez 0:211360300ec1 475 }
Zafranhernandez 0:211360300ec1 476 }
Zafranhernandez 0:211360300ec1 477 if(xPot<=0.3f) {
Zafranhernandez 0:211360300ec1 478 if(car_x>5 && car_x<57) {
Zafranhernandez 0:211360300ec1 479 car_x=car_x-playerSpeed;
Zafranhernandez 0:211360300ec1 480 }
Zafranhernandez 0:211360300ec1 481 }
Zafranhernandez 0:211360300ec1 482 if(yPot>0.7f) {
Zafranhernandez 0:211360300ec1 483 if(car_y>5 && car_y<48) {
Zafranhernandez 0:211360300ec1 484 car_y=car_y-playerSpeed;
Zafranhernandez 0:211360300ec1 485 }
Zafranhernandez 0:211360300ec1 486 }
Zafranhernandez 0:211360300ec1 487 if(yPot<0.3f) {
Zafranhernandez 0:211360300ec1 488
Zafranhernandez 0:211360300ec1 489 if(car_y>-3 && car_y<38) {
Zafranhernandez 0:211360300ec1 490 car_y=car_y+playerSpeed;
Zafranhernandez 0:211360300ec1 491 }
Zafranhernandez 0:211360300ec1 492 }
Zafranhernandez 0:211360300ec1 493 }
Zafranhernandez 0:211360300ec1 494
Zafranhernandez 1:58b4f9dda460 495 void checkLastCar(int g_level) //check for last car will be on the screen
Zafranhernandez 3:c2227b3e2f0c 496 {
Zafranhernandez 3:c2227b3e2f0c 497 //needed in order to stop the for loop and finish the level
Zafranhernandez 3:c2227b3e2f0c 498 if(g_level>=9) {
Zafranhernandez 0:211360300ec1 499 lastCar=g_level*33*4;
Zafranhernandez 0:211360300ec1 500 } else if(g_level>=5) {
Zafranhernandez 0:211360300ec1 501 lastCar=g_level*50*4;
Zafranhernandez 0:211360300ec1 502 } else {
Zafranhernandez 0:211360300ec1 503 lastCar=g_level*100*4;
Zafranhernandez 0:211360300ec1 504 }
Zafranhernandez 0:211360300ec1 505 }
Zafranhernandez 0:211360300ec1 506
Zafranhernandez 1:58b4f9dda460 507 void finishLevel(int g_level) //display the high score screen when the game is finish
Zafranhernandez 0:211360300ec1 508 {
Zafranhernandez 0:211360300ec1 509 char buffer[48];
Zafranhernandez 0:211360300ec1 510 int length = sprintf(buffer,"%2d",g_level);
Zafranhernandez 0:211360300ec1 511 lcd.printString(buffer,24,3);
Zafranhernandez 0:211360300ec1 512 lcd.printString("Finish",10,1);
Zafranhernandez 0:211360300ec1 513 lcd.printString("Level",14,2);
Zafranhernandez 0:211360300ec1 514 lcd.refresh();
Zafranhernandez 0:211360300ec1 515 wait(2);
Zafranhernandez 0:211360300ec1 516 lcd.clear();
Zafranhernandez 0:211360300ec1 517 delay=0;
Zafranhernandez 0:211360300ec1 518 car_x=22;
Zafranhernandez 0:211360300ec1 519 car_y=38;
Zafranhernandez 0:211360300ec1 520 }
Zafranhernandez 0:211360300ec1 521
Zafranhernandez 1:58b4f9dda460 522 void initialGameInterface() //provide initial countdown before the game start
Zafranhernandez 0:211360300ec1 523 {
Zafranhernandez 1:58b4f9dda460 524 for(int countdown=5; countdown>=1; countdown--) { //countdown from 5-1
Zafranhernandez 1:58b4f9dda460 525 score(61,2);
Zafranhernandez 1:58b4f9dda460 526 level(61,18);
Zafranhernandez 1:58b4f9dda460 527 lcd.printString("0",68,1);
Zafranhernandez 1:58b4f9dda460 528 lcd.printString("1",68,3);
Zafranhernandez 0:211360300ec1 529 lcd.drawHeart(59,40,3,1);
Zafranhernandez 0:211360300ec1 530
Zafranhernandez 0:211360300ec1 531 lcd.drawLine(0,47,0,0,1);
Zafranhernandez 0:211360300ec1 532 lcd.drawLine(83,47,83,0,1);
Zafranhernandez 0:211360300ec1 533 lcd.drawLine(83,0,0,0,1);
Zafranhernandez 0:211360300ec1 534 lcd.drawLine(83,47,0,47,1);
Zafranhernandez 0:211360300ec1 535
Zafranhernandez 0:211360300ec1 536 lcd.drawRect(59,33,22,4,1);
Zafranhernandez 0:211360300ec1 537 lcd.printString("Game",15,1);
Zafranhernandez 0:211360300ec1 538 lcd.printString("Start",14,2);
Zafranhernandez 0:211360300ec1 539 lcd.printString("In",12,3);
Zafranhernandez 0:211360300ec1 540 char buffer[14];
Zafranhernandez 0:211360300ec1 541 int length = sprintf(buffer,"%2d",countdown);
Zafranhernandez 0:211360300ec1 542 lcd.printString(buffer,30,3);
Zafranhernandez 0:211360300ec1 543
Zafranhernandez 0:211360300ec1 544 lcd.refresh();
Zafranhernandez 0:211360300ec1 545 wait(1);
Zafranhernandez 0:211360300ec1 546 lcd.clear();
Zafranhernandez 0:211360300ec1 547 }
Zafranhernandez 0:211360300ec1 548 }
Zafranhernandez 0:211360300ec1 549
Zafranhernandez 1:58b4f9dda460 550 void initGameVar() //initiate every variable use in the game before the game start
Zafranhernandez 0:211360300ec1 551 {
Zafranhernandez 1:58b4f9dda460 552 g_crash=0;
Zafranhernandez 1:58b4f9dda460 553 g_liveleft=3;
Zafranhernandez 1:58b4f9dda460 554 g_level=1;
Zafranhernandez 1:58b4f9dda460 555 g_score=0;
Zafranhernandez 1:58b4f9dda460 556 car_x=22;
Zafranhernandez 1:58b4f9dda460 557 car_y=38;
Zafranhernandez 1:58b4f9dda460 558 }
Zafranhernandez 1:58b4f9dda460 559
Zafranhernandez 1:58b4f9dda460 560 void firstViewPointer() //control the pointer on main menu
Zafranhernandez 1:58b4f9dda460 561 {
Zafranhernandez 1:58b4f9dda460 562 if(yPot>0.7f) {
Zafranhernandez 1:58b4f9dda460 563 pointer_y=31;
Zafranhernandez 1:58b4f9dda460 564 }
Zafranhernandez 1:58b4f9dda460 565 if(yPot<0.3f) {
Zafranhernandez 1:58b4f9dda460 566 pointer_y=39;
Zafranhernandez 0:211360300ec1 567 }
Zafranhernandez 0:211360300ec1 568 }
Zafranhernandez 0:211360300ec1 569
Zafranhernandez 1:58b4f9dda460 570 void optionPointer() //control the pointer on option menu
Zafranhernandez 0:211360300ec1 571 {
Zafranhernandez 0:211360300ec1 572 if(yPot>0.7f) {
Zafranhernandez 1:58b4f9dda460 573 if(pointer_y>11 && pointer_y<32) {
Zafranhernandez 0:211360300ec1 574 pointer_y=pointer_y-8;
Zafranhernandez 0:211360300ec1 575 }
Zafranhernandez 0:211360300ec1 576 }
Zafranhernandez 0:211360300ec1 577 if(yPot<0.3f) {
Zafranhernandez 1:58b4f9dda460 578 if(pointer_y>5 && pointer_y<28) {
Zafranhernandez 0:211360300ec1 579 pointer_y=pointer_y+8;
Zafranhernandez 0:211360300ec1 580 }
Zafranhernandez 0:211360300ec1 581 }
Zafranhernandez 0:211360300ec1 582 }
Zafranhernandez 0:211360300ec1 583
Zafranhernandez 1:58b4f9dda460 584 void brightnessController() //control the brightness by using joystick
Zafranhernandez 0:211360300ec1 585 {
Zafranhernandez 1:58b4f9dda460 586 if(xPot>0.7f) {
Zafranhernandez 0:211360300ec1 587 if(brightness_adjuster>=0 && brightness_adjuster<=9) {
Zafranhernandez 0:211360300ec1 588 brightness_adjuster=brightness_adjuster+1;
Zafranhernandez 0:211360300ec1 589 }
Zafranhernandez 0:211360300ec1 590 }
Zafranhernandez 1:58b4f9dda460 591 if(xPot<0.3f) {
Zafranhernandez 0:211360300ec1 592 if(brightness_adjuster>=1 && brightness_adjuster<=10) {
Zafranhernandez 0:211360300ec1 593 brightness_adjuster=brightness_adjuster-1;
Zafranhernandez 0:211360300ec1 594 }
Zafranhernandez 0:211360300ec1 595 }
Zafranhernandez 0:211360300ec1 596 }
Zafranhernandez 0:211360300ec1 597
Zafranhernandez 0:211360300ec1 598 void initArray()
Zafranhernandez 0:211360300ec1 599 {
Zafranhernandez 0:211360300ec1 600 // create LUT - loop through array and calculate sine wave samples
Zafranhernandez 0:211360300ec1 601 for (int i = 0; i < n ; i++) {
Zafranhernandez 0:211360300ec1 602 y[i] = 60 + 60*sin(i*2*PI/n);
Zafranhernandez 0:211360300ec1 603 }
Zafranhernandez 0:211360300ec1 604
Zafranhernandez 0:211360300ec1 605 }
Zafranhernandez 0:211360300ec1 606
Zafranhernandez 0:211360300ec1 607 void tone(float frequency,float duration)
Zafranhernandez 0:211360300ec1 608 {
Zafranhernandez 1:58b4f9dda460 609 green=1; //turn on LED
Zafranhernandez 0:211360300ec1 610
Zafranhernandez 0:211360300ec1 611 if (frequency > 0) { // a frequency of 0 indicates no note played so only play a note if frequency is not 0
Zafranhernandez 0:211360300ec1 612
Zafranhernandez 0:211360300ec1 613 float dt = 1.0f/(frequency*n) - (1.34e-6 + 1e-6); // calculate time step - take into account DAC time and wait() offset
Zafranhernandez 0:211360300ec1 614
Zafranhernandez 0:211360300ec1 615 noteTimer.start(); // start timer
Zafranhernandez 0:211360300ec1 616
Zafranhernandez 0:211360300ec1 617 while(noteTimer.read() < duration) { // keep looping while timer less than duration
Zafranhernandez 0:211360300ec1 618
Zafranhernandez 0:211360300ec1 619 for (int i = 0; i < n ; i++) { // loop through samples and output analog waveform
Zafranhernandez 0:211360300ec1 620 buzzer = y[i];
Zafranhernandez 0:211360300ec1 621 wait(dt); // leave appropriate delay for frequency
Zafranhernandez 0:211360300ec1 622 }
Zafranhernandez 0:211360300ec1 623 }
Zafranhernandez 0:211360300ec1 624
Zafranhernandez 0:211360300ec1 625 noteTimer.stop(); // stop the timer
Zafranhernandez 0:211360300ec1 626 noteTimer.reset(); // reset to 0
Zafranhernandez 0:211360300ec1 627
Zafranhernandez 0:211360300ec1 628 } else { // if no note played, have a simple delay
Zafranhernandez 0:211360300ec1 629 wait(duration);
Zafranhernandez 0:211360300ec1 630 }
Zafranhernandez 0:211360300ec1 631
Zafranhernandez 1:58b4f9dda460 632 green = 0; // turn off LEDs
Zafranhernandez 1:58b4f9dda460 633 }
Zafranhernandez 1:58b4f9dda460 634
Zafranhernandez 1:58b4f9dda460 635 void gameplaysound(float duration)
Zafranhernandez 1:58b4f9dda460 636 {
Zafranhernandez 1:58b4f9dda460 637 float noteArray[] = {
Zafranhernandez 1:58b4f9dda460 638 // provide sound during the time game is played
Zafranhernandez 1:58b4f9dda460 639 NOTE_G3,
Zafranhernandez 1:58b4f9dda460 640 };
Zafranhernandez 1:58b4f9dda460 641
Zafranhernandez 1:58b4f9dda460 642 int notes = sizeof(noteArray)/sizeof(float);
Zafranhernandez 1:58b4f9dda460 643 for(int i=0; i < notes; i++) {
Zafranhernandez 1:58b4f9dda460 644 tone(noteArray[i],duration);
Zafranhernandez 1:58b4f9dda460 645
Zafranhernandez 1:58b4f9dda460 646 }
Zafranhernandez 0:211360300ec1 647 }
Zafranhernandez 0:211360300ec1 648
Zafranhernandez 0:211360300ec1 649 void crashsound()
Zafranhernandez 0:211360300ec1 650 {
Zafranhernandez 0:211360300ec1 651 float noteArray[] = {
Zafranhernandez 0:211360300ec1 652 // provide sound during the time game is played
Zafranhernandez 0:211360300ec1 653 NOTE_G5, NOTE_F6,0,NOTE_F6,NOTE_F6,NOTE_E6,0,NOTE_D6,NOTE_C6,NOTE_G5,0,NOTE_E5,NOTE_C5
Zafranhernandez 0:211360300ec1 654 };
Zafranhernandez 0:211360300ec1 655 float noteDuration[] = {
Zafranhernandez 0:211360300ec1 656 4,4,4,4,4,4,4,4,4,4,4,4,4
Zafranhernandez 0:211360300ec1 657 };
Zafranhernandez 0:211360300ec1 658 int notes = sizeof(noteArray)/sizeof(float);
Zafranhernandez 0:211360300ec1 659 for(int i=0; i < notes; i++) {
Zafranhernandez 0:211360300ec1 660 tone(noteArray[i],60.0f/(BPM*noteDuration[i]));
Zafranhernandez 0:211360300ec1 661
Zafranhernandez 0:211360300ec1 662 }
Zafranhernandez 0:211360300ec1 663 }
Zafranhernandez 0:211360300ec1 664
Zafranhernandez 0:211360300ec1 665 void pausesound()
Zafranhernandez 0:211360300ec1 666 {
Zafranhernandez 0:211360300ec1 667 float noteArray[] = {
Zafranhernandez 0:211360300ec1 668 // provide sound during the time game is played
Zafranhernandez 0:211360300ec1 669 NOTE_E6,NOTE_C6,NOTE_E6,NOTE_C6,
Zafranhernandez 0:211360300ec1 670 };
Zafranhernandez 0:211360300ec1 671 float noteDuration[] = {
Zafranhernandez 0:211360300ec1 672 8,8,8,8
Zafranhernandez 0:211360300ec1 673 };
Zafranhernandez 0:211360300ec1 674 int notes = sizeof(noteArray)/sizeof(float);
Zafranhernandez 0:211360300ec1 675 for(int i=0; i < notes; i++) {
Zafranhernandez 0:211360300ec1 676 tone(noteArray[i],60.0f/(BPM*noteDuration[i]));
Zafranhernandez 0:211360300ec1 677
Zafranhernandez 0:211360300ec1 678 }
Zafranhernandez 0:211360300ec1 679 }
Zafranhernandez 0:211360300ec1 680
Zafranhernandez 1:58b4f9dda460 681 void finishsound()
Zafranhernandez 1:58b4f9dda460 682 {
Zafranhernandez 1:58b4f9dda460 683 float noteArray[] = {
Zafranhernandez 1:58b4f9dda460 684 // provide sound during the time game is played
Zafranhernandez 1:58b4f9dda460 685 NOTE_E6,NOTE_C6,NOTE_E6,NOTE_C6,
Zafranhernandez 1:58b4f9dda460 686 };
Zafranhernandez 1:58b4f9dda460 687 float noteDuration[] = {
Zafranhernandez 1:58b4f9dda460 688 8,8,8,8
Zafranhernandez 1:58b4f9dda460 689 };
Zafranhernandez 1:58b4f9dda460 690 int notes = sizeof(noteArray)/sizeof(float);
Zafranhernandez 1:58b4f9dda460 691 for(int i=0; i < notes; i++) {
Zafranhernandez 1:58b4f9dda460 692 tone(noteArray[i],60.0f/(BPM*noteDuration[i]));
Zafranhernandez 1:58b4f9dda460 693
Zafranhernandez 1:58b4f9dda460 694 }
Zafranhernandez 1:58b4f9dda460 695 }
Zafranhernandez 1:58b4f9dda460 696
Zafranhernandez 1:58b4f9dda460 697 void live(int liveleft) //draw how many life left on the screen
Zafranhernandez 1:58b4f9dda460 698 {
Zafranhernandez 1:58b4f9dda460 699 lcd.drawHeart(59,40,liveleft,1);
Zafranhernandez 1:58b4f9dda460 700 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 701 }
Zafranhernandez 1:58b4f9dda460 702
Zafranhernandez 1:58b4f9dda460 703 void roadline(int moving) //draw the road line +border line on the screen
Zafranhernandez 3:c2227b3e2f0c 704 {
Zafranhernandez 3:c2227b3e2f0c 705 //road line
Zafranhernandez 1:58b4f9dda460 706 lcd.drawLine(11,46,11,2,2);
Zafranhernandez 1:58b4f9dda460 707 lcd.drawLine(20,46,20,2,2);
Zafranhernandez 1:58b4f9dda460 708 lcd.drawLine(29,46,29,2,2);
Zafranhernandez 1:58b4f9dda460 709 lcd.drawLine(38,45,38,2,1);
Zafranhernandez 1:58b4f9dda460 710 lcd.drawLine(47,46,47,2,2);
Zafranhernandez 3:c2227b3e2f0c 711 //border line
Zafranhernandez 1:58b4f9dda460 712 lcd.drawLine(0,47,0,0,1);
Zafranhernandez 1:58b4f9dda460 713 lcd.drawLine(83,47,83,0,1);
Zafranhernandez 1:58b4f9dda460 714 lcd.drawLine(83,0,0,0,1);
Zafranhernandez 1:58b4f9dda460 715 lcd.drawLine(83,47,0,47,1);
Zafranhernandez 1:58b4f9dda460 716
Zafranhernandez 1:58b4f9dda460 717 if(moving%2!=0) {
Zafranhernandez 1:58b4f9dda460 718 lcd.drawLine(2,46,2,2,2);
Zafranhernandez 1:58b4f9dda460 719 lcd.drawLine(56,46,56,2,2);
Zafranhernandez 1:58b4f9dda460 720 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 721 } else {
Zafranhernandez 1:58b4f9dda460 722 lcd.drawLine(2,45,2,1,2);
Zafranhernandez 1:58b4f9dda460 723 lcd.drawLine(56,45,56,1,2);
Zafranhernandez 1:58b4f9dda460 724 lcd.refresh();
Zafranhernandez 1:58b4f9dda460 725 }
Zafranhernandez 1:58b4f9dda460 726 }
Zafranhernandez 3:c2227b3e2f0c 727
Zafranhernandez 1:58b4f9dda460 728 void score(int m,int my) //display the score text on the screen
Zafranhernandez 0:211360300ec1 729 {
Zafranhernandez 0:211360300ec1 730 //show score title
Zafranhernandez 0:211360300ec1 731 lcd.setPixel(m,my);
Zafranhernandez 0:211360300ec1 732 lcd.setPixel(m,my+1);
Zafranhernandez 0:211360300ec1 733 lcd.setPixel(m,my+2);
Zafranhernandez 0:211360300ec1 734 lcd.setPixel(m,my+4);
Zafranhernandez 0:211360300ec1 735 lcd.setPixel(m+1,my);
Zafranhernandez 0:211360300ec1 736 lcd.setPixel(m+1,my+2);
Zafranhernandez 0:211360300ec1 737 lcd.setPixel(m+1,my+4);
Zafranhernandez 0:211360300ec1 738 lcd.setPixel(m+2,my);
Zafranhernandez 0:211360300ec1 739 lcd.setPixel(m+2,my+2);
Zafranhernandez 0:211360300ec1 740 lcd.setPixel(m+2,my+3);
Zafranhernandez 0:211360300ec1 741 lcd.setPixel(m+2,my+4);
Zafranhernandez 0:211360300ec1 742 lcd.setPixel(m+4,my);
Zafranhernandez 0:211360300ec1 743 lcd.setPixel(m+4,my+1);
Zafranhernandez 0:211360300ec1 744 lcd.setPixel(m+4,my+2);
Zafranhernandez 0:211360300ec1 745 lcd.setPixel(m+4,my+3);
Zafranhernandez 0:211360300ec1 746 lcd.setPixel(m+4,my+4);
Zafranhernandez 0:211360300ec1 747 lcd.setPixel(m+5,my);
Zafranhernandez 0:211360300ec1 748 lcd.setPixel(m+5,my+4);
Zafranhernandez 0:211360300ec1 749 lcd.setPixel(m+6,my);
Zafranhernandez 0:211360300ec1 750 lcd.setPixel(m+6,my+4);
Zafranhernandez 0:211360300ec1 751 lcd.setPixel(m+8,my);
Zafranhernandez 0:211360300ec1 752 lcd.setPixel(m+8,my+1);
Zafranhernandez 0:211360300ec1 753 lcd.setPixel(m+8,my+2);
Zafranhernandez 0:211360300ec1 754 lcd.setPixel(m+8,my+3);
Zafranhernandez 0:211360300ec1 755 lcd.setPixel(m+8,my+4);
Zafranhernandez 0:211360300ec1 756 lcd.setPixel(m+9,my);
Zafranhernandez 0:211360300ec1 757 lcd.setPixel(m+9,my+4);
Zafranhernandez 0:211360300ec1 758 lcd.setPixel(m+10,my);
Zafranhernandez 0:211360300ec1 759 lcd.setPixel(m+10,my+1);
Zafranhernandez 0:211360300ec1 760 lcd.setPixel(m+10,my+2);
Zafranhernandez 0:211360300ec1 761 lcd.setPixel(m+10,my+3);
Zafranhernandez 0:211360300ec1 762 lcd.setPixel(m+10,my+4);
Zafranhernandez 0:211360300ec1 763 lcd.setPixel(m+12,my);
Zafranhernandez 0:211360300ec1 764 lcd.setPixel(m+12,my+1);
Zafranhernandez 0:211360300ec1 765 lcd.setPixel(m+12,my+2);
Zafranhernandez 0:211360300ec1 766 lcd.setPixel(m+12,my+3);
Zafranhernandez 0:211360300ec1 767 lcd.setPixel(m+12,my+4);
Zafranhernandez 0:211360300ec1 768 lcd.setPixel(m+13,my);
Zafranhernandez 0:211360300ec1 769 lcd.setPixel(m+13,my+2);
Zafranhernandez 0:211360300ec1 770 lcd.setPixel(m+14,my);
Zafranhernandez 0:211360300ec1 771 lcd.setPixel(m+14,my+1);
Zafranhernandez 0:211360300ec1 772 lcd.setPixel(m+14,my+3);
Zafranhernandez 0:211360300ec1 773 lcd.setPixel(m+14,my+4);
Zafranhernandez 0:211360300ec1 774 lcd.setPixel(m+16,my);
Zafranhernandez 0:211360300ec1 775 lcd.setPixel(m+16,my+1);
Zafranhernandez 0:211360300ec1 776 lcd.setPixel(m+16,my+2);
Zafranhernandez 0:211360300ec1 777 lcd.setPixel(m+16,my+3);
Zafranhernandez 0:211360300ec1 778 lcd.setPixel(m+16,my+4);
Zafranhernandez 0:211360300ec1 779 lcd.setPixel(m+17,my);
Zafranhernandez 0:211360300ec1 780 lcd.setPixel(m+17,my+2);
Zafranhernandez 0:211360300ec1 781 lcd.setPixel(m+17,my+4);
Zafranhernandez 0:211360300ec1 782 lcd.setPixel(m+18,my);
Zafranhernandez 0:211360300ec1 783 lcd.setPixel(m+18,my+4);
Zafranhernandez 0:211360300ec1 784 }
Zafranhernandez 0:211360300ec1 785
Zafranhernandez 1:58b4f9dda460 786 void level(int x1,int y1) //display the level text on the screen
Zafranhernandez 0:211360300ec1 787 {
Zafranhernandez 0:211360300ec1 788 int x0=x1;
Zafranhernandez 0:211360300ec1 789 int y0=y1;
Zafranhernandez 0:211360300ec1 790 lcd.drawLine(x1,y1+4,x0,y0,1);
Zafranhernandez 0:211360300ec1 791 lcd.drawLine(x1+2,y1+4,x0,y0+4,1);
Zafranhernandez 0:211360300ec1 792 lcd.drawLine(x1+4,y1+4,x0+4,y0,1);
Zafranhernandez 0:211360300ec1 793 lcd.drawLine(x1+6,y1,x0+4,y0,1);
Zafranhernandez 0:211360300ec1 794 lcd.drawLine(x1+6,y1+4,x0+4,y0+4,1);
Zafranhernandez 0:211360300ec1 795 lcd.setPixel(x1+5,y1+2);
Zafranhernandez 0:211360300ec1 796 lcd.drawLine(x1+8,y1+3,x0+8,y0,1);
Zafranhernandez 0:211360300ec1 797 lcd.drawLine(x1+10,y1+3,x0+10,y0,1);
Zafranhernandez 0:211360300ec1 798 lcd.setPixel(x1+9,y1+4);
Zafranhernandez 0:211360300ec1 799 lcd.drawLine(x1+12,y1+4,x0+12,y0,1);
Zafranhernandez 0:211360300ec1 800 lcd.drawLine(x1+14,y1,x0+12,y0,1);
Zafranhernandez 0:211360300ec1 801 lcd.drawLine(x1+14,y1+4,x0+12,y0+4,1);
Zafranhernandez 0:211360300ec1 802 lcd.setPixel(x1+13,y1+2);
Zafranhernandez 0:211360300ec1 803 lcd.drawLine(x1+16,y1+4,x0+16,y0,1);
Zafranhernandez 0:211360300ec1 804 lcd.drawLine(x1+18,y1+4,x0+16,y0+4,1);
Zafranhernandez 1:58b4f9dda460 805 }
Zafranhernandez 1:58b4f9dda460 806
Zafranhernandez 1:58b4f9dda460 807 void button_isr() //use for interrupt
Zafranhernandez 1:58b4f9dda460 808 {
Zafranhernandez 1:58b4f9dda460 809 g_button_flag=1;
Zafranhernandez 0:211360300ec1 810 }