Stick_Runner

Dependencies:   FXOS8700CQ Gamepad N5110 SDFileSystem mbed

Fork of Stick_Runner by Samrudh Sharma

Committer:
el15ss
Date:
Thu May 04 13:04:14 2017 +0000
Revision:
6:bf601a65cb27
Parent:
5:1bf7c83f86cc
Child:
7:887651afda26
StickRunner v1.0;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el15ss 1:db9ff66f67c8 1 /*****************************************************
el15ss 1:db9ff66f67c8 2 Libraries and modules used *
el15ss 1:db9ff66f67c8 3 ******************************************************/
el15ss 0:12cfe63faa6a 4 #include "mbed.h"
el15ss 0:12cfe63faa6a 5 #include "Gamepad.h"
el15ss 0:12cfe63faa6a 6 #include "N5110.h"
el15ss 0:12cfe63faa6a 7 #include "Character.h"
el15ss 0:12cfe63faa6a 8 #include "Obstacles.h"
el15ss 0:12cfe63faa6a 9 #include "Gems.h"
el15ss 2:98a41609c827 10 #include "SDFileSystem.h"
el15ss 6:bf601a65cb27 11 #include "FXOS8700CQ.h"
el15ss 2:98a41609c827 12
el15ss 0:12cfe63faa6a 13
el15ss 1:db9ff66f67c8 14 #define No_OBS 8
el15ss 1:db9ff66f67c8 15 #define No_GEMS 4
el15ss 0:12cfe63faa6a 16
el15ss 3:0c690f1c04d8 17 //Variables
el15ss 3:0c690f1c04d8 18 // i - to loop through the obstacles
el15ss 3:0c690f1c04d8 19 // j - to loop through the gems
el15ss 3:0c690f1c04d8 20 // counter - to keep track of score
el15ss 3:0c690f1c04d8 21 // highScore - to store high score
el15ss 2:98a41609c827 22 int i,j,counter,highScore;
el15ss 3:0c690f1c04d8 23
el15ss 3:0c690f1c04d8 24 //To helo convert counter(int) to string to display on the screen
el15ss 2:98a41609c827 25 char score[50];
el15ss 0:12cfe63faa6a 26
el15ss 1:db9ff66f67c8 27 //Structs
el15ss 5:1bf7c83f86cc 28 struct UserInput
el15ss 5:1bf7c83f86cc 29 {
el15ss 0:12cfe63faa6a 30 Direction d;
el15ss 0:12cfe63faa6a 31 float mag;
el15ss 0:12cfe63faa6a 32 };
el15ss 1:db9ff66f67c8 33 /* Class Objects */
el15ss 0:12cfe63faa6a 34 N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
el15ss 0:12cfe63faa6a 35 Gamepad pad;
el15ss 0:12cfe63faa6a 36 Character c;
el15ss 1:db9ff66f67c8 37 Obstacles obstacle[No_OBS];
el15ss 3:0c690f1c04d8 38 Gems gems[No_GEMS];
el15ss 0:12cfe63faa6a 39
el15ss 2:98a41609c827 40 SDFileSystem sd(PTE3,PTE1,PTE2,PTE4,"sd");
el15ss 2:98a41609c827 41 FILE *file;
el15ss 6:bf601a65cb27 42 FXOS8700CQ device(I2C_SDA,I2C_SCL);
el15ss 6:bf601a65cb27 43 Data values;
el15ss 2:98a41609c827 44
el15ss 0:12cfe63faa6a 45
el15ss 1:db9ff66f67c8 46 /* Function Prototypes */
el15ss 0:12cfe63faa6a 47 void init();
el15ss 0:12cfe63faa6a 48 void update_game(UserInput input);
el15ss 0:12cfe63faa6a 49 void render();
el15ss 0:12cfe63faa6a 50 void welcome();
el15ss 0:12cfe63faa6a 51 void menu();
el15ss 0:12cfe63faa6a 52 void over();
el15ss 0:12cfe63faa6a 53 void Instructions();
el15ss 3:0c690f1c04d8 54 void stickRunner();
el15ss 3:0c690f1c04d8 55 void displayHighScore();
el15ss 1:db9ff66f67c8 56 /* Functions */
el15ss 1:db9ff66f67c8 57
el15ss 0:12cfe63faa6a 58 int main()
el15ss 0:12cfe63faa6a 59 {
el15ss 3:0c690f1c04d8 60
el15ss 0:12cfe63faa6a 61
el15ss 1:db9ff66f67c8 62 /* Intialization */
el15ss 6:bf601a65cb27 63 //fprintf("Entering init() from main");
el15ss 0:12cfe63faa6a 64 init();
el15ss 1:db9ff66f67c8 65
el15ss 6:bf601a65cb27 66 /* Drawing the initial frame */
el15ss 6:bf601a65cb27 67 //fprintf("Entering the Welcome() function from main");
el15ss 0:12cfe63faa6a 68 welcome();
el15ss 3:0c690f1c04d8 69
el15ss 3:0c690f1c04d8 70 }
el15ss 3:0c690f1c04d8 71
el15ss 3:0c690f1c04d8 72
el15ss 3:0c690f1c04d8 73 void init()
el15ss 3:0c690f1c04d8 74 {
el15ss 6:bf601a65cb27 75
el15ss 6:bf601a65cb27 76 //fprintf("in init()");
el15ss 3:0c690f1c04d8 77 //Need to initialize the lcd and gamepad
el15ss 3:0c690f1c04d8 78 lcd.init();
el15ss 3:0c690f1c04d8 79 pad.init();
el15ss 3:0c690f1c04d8 80
el15ss 3:0c690f1c04d8 81 //Intialzing the charachter
el15ss 3:0c690f1c04d8 82 c.init();
el15ss 3:0c690f1c04d8 83
el15ss 3:0c690f1c04d8 84 //Intialzing the obstacles
el15ss 3:0c690f1c04d8 85 for(i=0;i<No_OBS;i++)
el15ss 3:0c690f1c04d8 86 {
el15ss 6:bf601a65cb27 87 //fprintf("Obstacle intialised");
el15ss 3:0c690f1c04d8 88 obstacle[i].init();
el15ss 3:0c690f1c04d8 89 }
el15ss 3:0c690f1c04d8 90
el15ss 3:0c690f1c04d8 91 //Intialzing the gems
el15ss 3:0c690f1c04d8 92 for(j=0;j<No_GEMS;j++)
el15ss 3:0c690f1c04d8 93 {
el15ss 6:bf601a65cb27 94 //fprintf("Gems initalised");
el15ss 3:0c690f1c04d8 95 gems[j].init();
el15ss 3:0c690f1c04d8 96 }
el15ss 3:0c690f1c04d8 97
el15ss 3:0c690f1c04d8 98
el15ss 3:0c690f1c04d8 99
el15ss 3:0c690f1c04d8 100 }
el15ss 3:0c690f1c04d8 101
el15ss 3:0c690f1c04d8 102
el15ss 3:0c690f1c04d8 103
el15ss 3:0c690f1c04d8 104 //Funstion to display the Welcome page
el15ss 5:1bf7c83f86cc 105 void welcome()
el15ss 5:1bf7c83f86cc 106 {
el15ss 3:0c690f1c04d8 107
el15ss 3:0c690f1c04d8 108
el15ss 6:bf601a65cb27 109 //fprintf("In welcome()");
el15ss 3:0c690f1c04d8 110 lcd.printString("Stick Runner! ",0,1);
el15ss 3:0c690f1c04d8 111 lcd.printString(" Press Start ",0,4);
el15ss 3:0c690f1c04d8 112 lcd.refresh();
el15ss 3:0c690f1c04d8 113 // pad.tone(1500.0,0.5);
el15ss 3:0c690f1c04d8 114 // pad.tone(1500.0,0.5);
el15ss 3:0c690f1c04d8 115
el15ss 3:0c690f1c04d8 116
el15ss 3:0c690f1c04d8 117 //Flashes LEDS aslong as START is not pressed
el15ss 3:0c690f1c04d8 118 while ( pad.check_event(Gamepad::START_PRESSED) == false)
el15ss 3:0c690f1c04d8 119 {
el15ss 3:0c690f1c04d8 120 pad.leds_on();
el15ss 3:0c690f1c04d8 121 wait(0.1);
el15ss 3:0c690f1c04d8 122 pad.leds_off();
el15ss 3:0c690f1c04d8 123 wait(0.1);
el15ss 3:0c690f1c04d8 124
el15ss 3:0c690f1c04d8 125 }
el15ss 6:bf601a65cb27 126 //fprintf("Entering menu() from wlelcome");
el15ss 3:0c690f1c04d8 127 menu();
el15ss 3:0c690f1c04d8 128 }
el15ss 3:0c690f1c04d8 129
el15ss 3:0c690f1c04d8 130
el15ss 0:12cfe63faa6a 131
el15ss 3:0c690f1c04d8 132 //Function to display the Menu page
el15ss 5:1bf7c83f86cc 133 void menu()
el15ss 5:1bf7c83f86cc 134 {
el15ss 5:1bf7c83f86cc 135
el15ss 0:12cfe63faa6a 136
el15ss 6:bf601a65cb27 137 //fprintf("In menu");
el15ss 5:1bf7c83f86cc 138 lcd.clear();
el15ss 3:0c690f1c04d8 139 lcd.printString(" Menu ",0,0);
el15ss 3:0c690f1c04d8 140 lcd.printString("A)New Game ",0,2);
el15ss 3:0c690f1c04d8 141 lcd.printString("B)Continue ",0,3);
el15ss 3:0c690f1c04d8 142 lcd.printString("X)Instructions ",0,4);
el15ss 3:0c690f1c04d8 143 lcd.printString("Y)High Score ",0,5);
el15ss 3:0c690f1c04d8 144
el15ss 3:0c690f1c04d8 145 lcd.refresh();
el15ss 3:0c690f1c04d8 146
el15ss 3:0c690f1c04d8 147
el15ss 5:1bf7c83f86cc 148 while(1)
el15ss 5:1bf7c83f86cc 149 {
el15ss 5:1bf7c83f86cc 150 // wait flashing LEDs until start button is pressed
el15ss 5:1bf7c83f86cc 151 //Condition to start a new game
el15ss 5:1bf7c83f86cc 152 if( pad.check_event(Gamepad::A_PRESSED) )
el15ss 5:1bf7c83f86cc 153 {
el15ss 5:1bf7c83f86cc 154 //pad.tone(1000.0,0.5);
el15ss 5:1bf7c83f86cc 155
el15ss 3:0c690f1c04d8 156
el15ss 5:1bf7c83f86cc 157 //Clear, refresh and intialize the game again so we can start a new game
el15ss 5:1bf7c83f86cc 158 lcd.clear();
el15ss 6:bf601a65cb27 159 //fprintf("Entering init from menu()");
el15ss 5:1bf7c83f86cc 160 lcd.refresh();
el15ss 5:1bf7c83f86cc 161 init();
el15ss 6:bf601a65cb27 162 //fprintf("Entering the game when A is pressed");
el15ss 5:1bf7c83f86cc 163 stickRunner();
el15ss 3:0c690f1c04d8 164
el15ss 5:1bf7c83f86cc 165
el15ss 5:1bf7c83f86cc 166 }
el15ss 3:0c690f1c04d8 167
el15ss 5:1bf7c83f86cc 168 //To continue the same game
el15ss 5:1bf7c83f86cc 169 else if( pad.check_event(Gamepad::B_PRESSED) )
el15ss 5:1bf7c83f86cc 170 {
el15ss 5:1bf7c83f86cc 171
el15ss 5:1bf7c83f86cc 172 // pad.tone(1000.0,0.5);
el15ss 5:1bf7c83f86cc 173
el15ss 3:0c690f1c04d8 174
el15ss 5:1bf7c83f86cc 175 //Simply refreshes the page and continues from where the user left the game
el15ss 5:1bf7c83f86cc 176 // as the intialize function init() is not called again
el15ss 5:1bf7c83f86cc 177 lcd.refresh();
el15ss 6:bf601a65cb27 178
el15ss 6:bf601a65cb27 179 pad.led(2,0);
el15ss 6:bf601a65cb27 180 pad.led(5,0);
el15ss 6:bf601a65cb27 181
el15ss 6:bf601a65cb27 182
el15ss 6:bf601a65cb27 183 //fprintf("Entering the game when B is pressed from menu");
el15ss 5:1bf7c83f86cc 184 stickRunner();
el15ss 3:0c690f1c04d8 185
el15ss 3:0c690f1c04d8 186
el15ss 5:1bf7c83f86cc 187 }
el15ss 3:0c690f1c04d8 188
el15ss 5:1bf7c83f86cc 189 //To read the game instructions
el15ss 5:1bf7c83f86cc 190 else if( pad.check_event(Gamepad::X_PRESSED) )
el15ss 5:1bf7c83f86cc 191 {
el15ss 5:1bf7c83f86cc 192 // pad.tone(1000.0,0.5);
el15ss 6:bf601a65cb27 193 //fprintf("entering instructions when X is pressed from menu");
el15ss 5:1bf7c83f86cc 194 Instructions();
el15ss 3:0c690f1c04d8 195
el15ss 5:1bf7c83f86cc 196
el15ss 5:1bf7c83f86cc 197 }
el15ss 3:0c690f1c04d8 198
el15ss 6:bf601a65cb27 199
el15ss 5:1bf7c83f86cc 200 //To see the game high score
el15ss 5:1bf7c83f86cc 201 else if( pad.check_event(Gamepad::Y_PRESSED) )
el15ss 5:1bf7c83f86cc 202 {
el15ss 5:1bf7c83f86cc 203 //pad.tone(1000.0,0.5);
el15ss 6:bf601a65cb27 204 //fprintf("Displayibng highscore when Y is pressed from menu");
el15ss 5:1bf7c83f86cc 205 displayHighScore();
el15ss 3:0c690f1c04d8 206
el15ss 5:1bf7c83f86cc 207
el15ss 5:1bf7c83f86cc 208
el15ss 5:1bf7c83f86cc 209 }
el15ss 5:1bf7c83f86cc 210
el15ss 6:bf601a65cb27 211
el15ss 6:bf601a65cb27 212
el15ss 6:bf601a65cb27 213
el15ss 6:bf601a65cb27 214
el15ss 5:1bf7c83f86cc 215 sleep();
el15ss 3:0c690f1c04d8 216
el15ss 3:0c690f1c04d8 217
el15ss 5:1bf7c83f86cc 218 }
el15ss 3:0c690f1c04d8 219 }
el15ss 3:0c690f1c04d8 220
el15ss 3:0c690f1c04d8 221
el15ss 3:0c690f1c04d8 222
el15ss 3:0c690f1c04d8 223
el15ss 3:0c690f1c04d8 224 //This function is responsible for running the game
el15ss 3:0c690f1c04d8 225 void stickRunner()
el15ss 3:0c690f1c04d8 226 {
el15ss 6:bf601a65cb27 227 //fprintf("IN the game(stickrunner())");
el15ss 6:bf601a65cb27 228 int fps = 10;
el15ss 3:0c690f1c04d8 229
el15ss 5:1bf7c83f86cc 230 render();
el15ss 5:1bf7c83f86cc 231 wait(1.0f/fps);
el15ss 0:12cfe63faa6a 232
el15ss 1:db9ff66f67c8 233 /* Main game loop to read input, render the display and update the game state */
el15ss 3:0c690f1c04d8 234
el15ss 5:1bf7c83f86cc 235 while (1)
el15ss 5:1bf7c83f86cc 236 {
el15ss 6:bf601a65cb27 237 lcd.setBrightness(pad.read_pot());
el15ss 0:12cfe63faa6a 238
el15ss 6:bf601a65cb27 239 //fprintf("printing out the value of counter before updating in each iteration %d",counter);
el15ss 3:0c690f1c04d8 240 //As long as the character survives update the score
el15ss 2:98a41609c827 241 counter++;
el15ss 6:bf601a65cb27 242 //fprintf("printing out the value of counter after updating in each iteration %d",counter);
el15ss 0:12cfe63faa6a 243
el15ss 3:0c690f1c04d8 244 //Using the gamepad library to move the character using the joystick
el15ss 6:bf601a65cb27 245 //fprintf("Calling UpdateCharacter from the game func to make it move");
el15ss 1:db9ff66f67c8 246 c.updateCharacter(pad.get_direction(),pad.get_mag());
el15ss 3:0c690f1c04d8 247
el15ss 6:bf601a65cb27 248 //values = device.get_values();
el15ss 6:bf601a65cb27 249 // c.accMove(values);
el15ss 6:bf601a65cb27 250
el15ss 3:0c690f1c04d8 251 //Condition to ckeck if the user wants to pause the game
el15ss 0:12cfe63faa6a 252 if(pad.check_event(Gamepad::BACK_PRESSED))
el15ss 0:12cfe63faa6a 253 {
el15ss 0:12cfe63faa6a 254 lcd.clear();
el15ss 6:bf601a65cb27 255 lcd.refresh();
el15ss 6:bf601a65cb27 256
el15ss 6:bf601a65cb27 257
el15ss 6:bf601a65cb27 258 pad.led(2,1);
el15ss 6:bf601a65cb27 259 pad.led(5,1);
el15ss 6:bf601a65cb27 260
el15ss 6:bf601a65cb27 261
el15ss 6:bf601a65cb27 262
el15ss 6:bf601a65cb27 263 //fprintf("Game paused and sent to menu from the game when BACK is pressed");
el15ss 1:db9ff66f67c8 264 menu();
el15ss 0:12cfe63faa6a 265 }
el15ss 0:12cfe63faa6a 266
el15ss 6:bf601a65cb27 267 //Loop to make the generation of obstacles a continious loop by checking the status and also to check if the user has been killed
el15ss 1:db9ff66f67c8 268 for(i=0;i<No_OBS;i++)
el15ss 6:bf601a65cb27 269 { //fprintf("in to loop to check when to initialise the obstacles and ");
el15ss 6:bf601a65cb27 270
el15ss 3:0c690f1c04d8 271 //To retrieve the status of the obstacle on the screen
el15ss 6:bf601a65cb27 272 //fprintf("Obstacle Status called from stickrunner()");
el15ss 1:db9ff66f67c8 273 obstacle[i].obstacleStatus(obstacle[i].getObstaclePos());
el15ss 6:bf601a65cb27 274 //fprintf("Value returned from obstacle status %d", obstacle[i].obstacleStatus(obstacle[i].getObstaclePos());
el15ss 0:12cfe63faa6a 275
el15ss 1:db9ff66f67c8 276 if(obstacle[i].getObstacleStatus() == false)
el15ss 0:12cfe63faa6a 277 {
el15ss 6:bf601a65cb27 278 //fprintf("Init clalled from stickrunner() in obstaccle");
el15ss 0:12cfe63faa6a 279 obstacle[i].init();
el15ss 0:12cfe63faa6a 280 }
el15ss 3:0c690f1c04d8 281
el15ss 3:0c690f1c04d8 282 //To check whether the character has been hit by an obstacle by comparing the position of each obstacle
el15ss 3:0c690f1c04d8 283 // relative to the character
el15ss 6:bf601a65cb27 284 //fprintf("Character status called from stickrunner() in obstacle loop");
el15ss 5:1bf7c83f86cc 285 c.characterStatus(obstacle[i].getObstaclePos());
el15ss 6:bf601a65cb27 286 //fprintf("the value returned by character status %d", c.characterStatus(obstacle[i].getObstaclePos()));
el15ss 3:0c690f1c04d8 287
el15ss 1:db9ff66f67c8 288
el15ss 0:12cfe63faa6a 289 }
el15ss 0:12cfe63faa6a 290
el15ss 3:0c690f1c04d8 291 //Loop to make the generation of gems a continious loop and also to check if the user has collected them
el15ss 1:db9ff66f67c8 292 for(j=0;j<No_GEMS;j++)
el15ss 0:12cfe63faa6a 293 {
el15ss 6:bf601a65cb27 294 //fprintf("in to loop to check when to initialise the gems and ");
el15ss 6:bf601a65cb27 295
el15ss 3:0c690f1c04d8 296 //To check whether the character has collected a gem by comparing the position of each gem
el15ss 3:0c690f1c04d8 297 // relative to the character
el15ss 6:bf601a65cb27 298 //fprintf("Gems Status called from stickrunner()");
el15ss 1:db9ff66f67c8 299 gems[j].gemStatus(c.getCharacterPos());
el15ss 6:bf601a65cb27 300 //fprintf("Value returned from gem status %d", gem[i].gemStatus(obstacle[i].getGemPos());
el15ss 0:12cfe63faa6a 301
el15ss 1:db9ff66f67c8 302 if(gems[j].getGemStatus() == false)
el15ss 0:12cfe63faa6a 303 {
el15ss 6:bf601a65cb27 304
el15ss 6:bf601a65cb27 305 //fprintf("Init clalled from stickrunner() in gem");
el15ss 0:12cfe63faa6a 306 gems[j].init();
el15ss 2:98a41609c827 307
el15ss 6:bf601a65cb27 308
el15ss 0:12cfe63faa6a 309 }
el15ss 1:db9ff66f67c8 310
el15ss 1:db9ff66f67c8 311
el15ss 0:12cfe63faa6a 312 }
el15ss 2:98a41609c827 313
el15ss 2:98a41609c827 314 //To make the obstacles and gems move along the screen
el15ss 3:0c690f1c04d8 315
el15ss 3:0c690f1c04d8 316
el15ss 0:12cfe63faa6a 317 i =0;
el15ss 0:12cfe63faa6a 318
el15ss 1:db9ff66f67c8 319 for(i=0;i<No_OBS;i++)
el15ss 1:db9ff66f67c8 320 {
el15ss 6:bf601a65cb27 321
el15ss 6:bf601a65cb27 322 //fprintf("update obstacle clalled from stickrunner()");
el15ss 1:db9ff66f67c8 323 obstacle[i].updateObstacle();
el15ss 1:db9ff66f67c8 324 }
el15ss 0:12cfe63faa6a 325
el15ss 0:12cfe63faa6a 326
el15ss 0:12cfe63faa6a 327 j =0;
el15ss 0:12cfe63faa6a 328
el15ss 1:db9ff66f67c8 329 for(j=0;j<No_GEMS;j++)
el15ss 1:db9ff66f67c8 330 {
el15ss 6:bf601a65cb27 331 //fprintf("update gem clalled from stickrunner()");
el15ss 1:db9ff66f67c8 332 gems[j].updateGems();
el15ss 2:98a41609c827 333
el15ss 1:db9ff66f67c8 334 }
el15ss 6:bf601a65cb27 335
el15ss 6:bf601a65cb27 336 //fprintf("render called from stickrunner()");
el15ss 0:12cfe63faa6a 337 render();
el15ss 0:12cfe63faa6a 338
el15ss 0:12cfe63faa6a 339 wait(1.0f/fps);
el15ss 0:12cfe63faa6a 340 }
el15ss 3:0c690f1c04d8 341
el15ss 0:12cfe63faa6a 342 }
el15ss 0:12cfe63faa6a 343
el15ss 1:db9ff66f67c8 344
el15ss 3:0c690f1c04d8 345 //Function to draw out the pixels on the screen
el15ss 0:12cfe63faa6a 346 void render()
el15ss 0:12cfe63faa6a 347 {
el15ss 6:bf601a65cb27 348 //fprintf("In render");
el15ss 0:12cfe63faa6a 349 lcd.clear();
el15ss 1:db9ff66f67c8 350
el15ss 3:0c690f1c04d8 351
el15ss 3:0c690f1c04d8 352 //Only draws the character as long as it survives
el15ss 1:db9ff66f67c8 353 if(c.getCharacterStatus())
el15ss 1:db9ff66f67c8 354 {
el15ss 6:bf601a65cb27 355 //fprintf("Character drawn");
el15ss 1:db9ff66f67c8 356 c.draw(lcd);
el15ss 1:db9ff66f67c8 357 }
el15ss 2:98a41609c827 358
el15ss 5:1bf7c83f86cc 359 if(c.getCharacterStatus() == false)
el15ss 5:1bf7c83f86cc 360 {
el15ss 6:bf601a65cb27 361 //fprintf("over called from render()");
el15ss 5:1bf7c83f86cc 362 over();
el15ss 5:1bf7c83f86cc 363 }
el15ss 2:98a41609c827 364
el15ss 2:98a41609c827 365
el15ss 3:0c690f1c04d8 366 //Draws the obstacles if the status returned is true
el15ss 0:12cfe63faa6a 367
el15ss 1:db9ff66f67c8 368 for(i=0;i<No_OBS;i++)
el15ss 1:db9ff66f67c8 369 {
el15ss 1:db9ff66f67c8 370 if(obstacle[i].getObstacleStatus())
el15ss 1:db9ff66f67c8 371 {
el15ss 6:bf601a65cb27 372 //fprintf("obstacle drawn");
el15ss 1:db9ff66f67c8 373 obstacle[i].draw(lcd);
el15ss 1:db9ff66f67c8 374 }
el15ss 1:db9ff66f67c8 375 }
el15ss 0:12cfe63faa6a 376
el15ss 3:0c690f1c04d8 377 //Draws the gems if the status returned is true
el15ss 5:1bf7c83f86cc 378 for(j=0;j<No_GEMS;j++)
el15ss 1:db9ff66f67c8 379 {
el15ss 1:db9ff66f67c8 380 if(gems[j].getGemStatus())
el15ss 1:db9ff66f67c8 381 {
el15ss 6:bf601a65cb27 382 //fprintf("gem drawn");
el15ss 1:db9ff66f67c8 383 gems[j].draw(lcd);
el15ss 1:db9ff66f67c8 384
el15ss 1:db9ff66f67c8 385 }
el15ss 1:db9ff66f67c8 386
el15ss 3:0c690f1c04d8 387
el15ss 1:db9ff66f67c8 388 }
el15ss 2:98a41609c827 389
el15ss 1:db9ff66f67c8 390
el15ss 0:12cfe63faa6a 391 lcd.refresh();
el15ss 1:db9ff66f67c8 392
el15ss 0:12cfe63faa6a 393 }
el15ss 0:12cfe63faa6a 394
el15ss 1:db9ff66f67c8 395
el15ss 0:12cfe63faa6a 396
el15ss 3:0c690f1c04d8 397 //Function to display end of game and also check whether the user got a new highscore and if not write it on the SD card
el15ss 5:1bf7c83f86cc 398 void over()
el15ss 5:1bf7c83f86cc 399 {
el15ss 6:bf601a65cb27 400 //fprintf("In over()");
el15ss 6:bf601a65cb27 401
el15ss 6:bf601a65cb27 402
el15ss 6:bf601a65cb27 403
el15ss 3:0c690f1c04d8 404 //pad.tone(1000.0,0.5);
el15ss 2:98a41609c827 405 pad.init();
el15ss 6:bf601a65cb27 406
el15ss 3:0c690f1c04d8 407
el15ss 6:bf601a65cb27 408
el15ss 3:0c690f1c04d8 409 //Converting the counter into a string 'score' to display on the lcd
el15ss 2:98a41609c827 410 sprintf (score, " Score : %d",counter);
el15ss 6:bf601a65cb27 411 //fprintf("Counter converted to string %s",score);
el15ss 2:98a41609c827 412
el15ss 2:98a41609c827 413 lcd.printString(score,0,2);
el15ss 2:98a41609c827 414 lcd.printString("GAME OVER!! ",0,0);
el15ss 3:0c690f1c04d8 415
el15ss 6:bf601a65cb27 416
el15ss 4:2fdafb53eac2 417 lcd.printString(" PRESS START ",0,5);
el15ss 0:12cfe63faa6a 418
el15ss 0:12cfe63faa6a 419 lcd.refresh();
el15ss 6:bf601a65cb27 420
el15ss 0:12cfe63faa6a 421
el15ss 3:0c690f1c04d8 422 //Takes the user back to the main for a new game
el15ss 5:1bf7c83f86cc 423 while ( pad.check_event(Gamepad::START_PRESSED) == false)
el15ss 5:1bf7c83f86cc 424 {
el15ss 0:12cfe63faa6a 425 pad.leds_on();
el15ss 1:db9ff66f67c8 426 //pad.tone(1000.0,0.5);
el15ss 0:12cfe63faa6a 427 wait(0.1);
el15ss 0:12cfe63faa6a 428 pad.leds_off();
el15ss 5:1bf7c83f86cc 429 // pad.tone(1000.0,0.5);
el15ss 0:12cfe63faa6a 430 wait(0.1);
el15ss 5:1bf7c83f86cc 431 if( pad.check_event(Gamepad::START_PRESSED))
el15ss 5:1bf7c83f86cc 432 {
el15ss 6:bf601a65cb27 433 //fprintf("main called from over() to start a new game");
el15ss 0:12cfe63faa6a 434 main();
el15ss 0:12cfe63faa6a 435 wait(1);
el15ss 5:1bf7c83f86cc 436 }
el15ss 0:12cfe63faa6a 437 }
el15ss 0:12cfe63faa6a 438
el15ss 0:12cfe63faa6a 439 }
el15ss 0:12cfe63faa6a 440
el15ss 3:0c690f1c04d8 441
el15ss 3:0c690f1c04d8 442 //Function to display the current High score fo the game and also reset it to 0
el15ss 2:98a41609c827 443 void displayHighScore()
el15ss 2:98a41609c827 444 {
el15ss 6:bf601a65cb27 445 //fprintf("In highscore()");
el15ss 6:bf601a65cb27 446
el15ss 6:bf601a65cb27 447
el15ss 2:98a41609c827 448 lcd.clear();
el15ss 2:98a41609c827 449
el15ss 5:1bf7c83f86cc 450 //Open file
el15ss 3:0c690f1c04d8 451
el15ss 6:bf601a65cb27 452 if(highScore <= counter)
el15ss 6:bf601a65cb27 453 {
el15ss 6:bf601a65cb27 454 highScore = counter;
el15ss 6:bf601a65cb27 455 //fprintf("value of highscore from if %d", highScore);
el15ss 6:bf601a65cb27 456 lcd.printString(" BACK - menu ",0,5);
el15ss 6:bf601a65cb27 457 }
el15ss 2:98a41609c827 458
el15ss 6:bf601a65cb27 459 else
el15ss 6:bf601a65cb27 460 {
el15ss 6:bf601a65cb27 461 highScore = highScore;
el15ss 6:bf601a65cb27 462
el15ss 6:bf601a65cb27 463 }
el15ss 3:0c690f1c04d8 464 //Convert highscore(int) to score(String) to print on the lcd
el15ss 6:bf601a65cb27 465 sprintf (score, " %d",highScore);
el15ss 6:bf601a65cb27 466 //fprintf("value of score when updated with highscore %s", score);
el15ss 6:bf601a65cb27 467 lcd.printString("High Score :",0,2);
el15ss 6:bf601a65cb27 468 lcd.printString(score,0,3);
el15ss 6:bf601a65cb27 469
el15ss 2:98a41609c827 470 lcd.printString(" BACK - menu ",0,5);
el15ss 5:1bf7c83f86cc 471 lcd.refresh();
el15ss 5:1bf7c83f86cc 472 sd.unmount();
el15ss 2:98a41609c827 473
el15ss 5:1bf7c83f86cc 474 while(1)
el15ss 5:1bf7c83f86cc 475 {
el15ss 3:0c690f1c04d8 476 //Back to menu
el15ss 5:1bf7c83f86cc 477 if( pad.check_event(Gamepad::BACK_PRESSED))
el15ss 5:1bf7c83f86cc 478 {
el15ss 6:bf601a65cb27 479 //fprintf("menu called from highscore when back is pressed");
el15ss 5:1bf7c83f86cc 480 menu();
el15ss 2:98a41609c827 481 }
el15ss 2:98a41609c827 482
el15ss 2:98a41609c827 483 sleep();
el15ss 2:98a41609c827 484
el15ss 2:98a41609c827 485 }
el15ss 2:98a41609c827 486
el15ss 2:98a41609c827 487
el15ss 2:98a41609c827 488 }
el15ss 2:98a41609c827 489
el15ss 3:0c690f1c04d8 490
el15ss 0:12cfe63faa6a 491
el15ss 3:0c690f1c04d8 492 //Function to display the Instructions for the game
el15ss 0:12cfe63faa6a 493 void Instructions()
el15ss 0:12cfe63faa6a 494 {
el15ss 6:bf601a65cb27 495 //fprintf("in instructions()");
el15ss 5:1bf7c83f86cc 496 bool i = true;
el15ss 5:1bf7c83f86cc 497 lcd.clear();
el15ss 2:98a41609c827 498 lcd.printString("INSTURCTIONS: ",0,0);
el15ss 0:12cfe63faa6a 499 lcd.printString("Collect the ",0,2);
el15ss 2:98a41609c827 500 lcd.printString("gems and dodge ",0,3);
el15ss 2:98a41609c827 501 lcd.printString("the obstacles ",0,4);
el15ss 2:98a41609c827 502 lcd.printString("to get points ",0,5);
el15ss 0:12cfe63faa6a 503 lcd.refresh();
el15ss 0:12cfe63faa6a 504
el15ss 5:1bf7c83f86cc 505 while(i == true)
el15ss 5:1bf7c83f86cc 506 {
el15ss 0:12cfe63faa6a 507
el15ss 5:1bf7c83f86cc 508 if( pad.check_event(Gamepad::BACK_PRESSED) )
el15ss 5:1bf7c83f86cc 509 {
el15ss 1:db9ff66f67c8 510 //pad.tone(1000.0,0.5);
el15ss 5:1bf7c83f86cc 511 i = false;
el15ss 6:bf601a65cb27 512
el15ss 6:bf601a65cb27 513 //fprintf("menu called from instructions when back pressed");
el15ss 5:1bf7c83f86cc 514 menu();
el15ss 5:1bf7c83f86cc 515 }
el15ss 0:12cfe63faa6a 516 }
el15ss 0:12cfe63faa6a 517
el15ss 5:1bf7c83f86cc 518 }