Dependencies:   el14hzbm_Final_Project mbed

Fork of el14hzbm_FinalProject by ELEC2645 (2015/16)

Committer:
Zafranhernandez
Date:
Thu May 05 11:34:33 2016 +0000
Revision:
1:58b4f9dda460
Parent:
0:211360300ec1
Child:
3:c2227b3e2f0c
Improved version.

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