Stick_Runner
Dependencies: FXOS8700CQ Gamepad N5110 SDFileSystem mbed
Fork of Stick_Runner by
Diff: main.cpp
- Revision:
- 6:bf601a65cb27
- Parent:
- 5:1bf7c83f86cc
- Child:
- 7:887651afda26
--- a/main.cpp Thu May 04 09:50:18 2017 +0000 +++ b/main.cpp Thu May 04 13:04:14 2017 +0000 @@ -8,6 +8,7 @@ #include "Obstacles.h" #include "Gems.h" #include "SDFileSystem.h" +#include "FXOS8700CQ.h" #define No_OBS 8 @@ -38,6 +39,8 @@ SDFileSystem sd(PTE3,PTE1,PTE2,PTE4,"sd"); FILE *file; +FXOS8700CQ device(I2C_SDA,I2C_SCL); +Data values; /* Function Prototypes */ @@ -57,9 +60,11 @@ /* Intialization */ + //fprintf("Entering init() from main"); init(); -/* Drawing the initial frame */ +/* Drawing the initial frame */ + //fprintf("Entering the Welcome() function from main"); welcome(); } @@ -67,6 +72,8 @@ void init() { + +//fprintf("in init()"); //Need to initialize the lcd and gamepad lcd.init(); pad.init(); @@ -77,12 +84,14 @@ //Intialzing the obstacles for(i=0;i<No_OBS;i++) { + //fprintf("Obstacle intialised"); obstacle[i].init(); } //Intialzing the gems for(j=0;j<No_GEMS;j++) { + //fprintf("Gems initalised"); gems[j].init(); } @@ -97,7 +106,7 @@ { - + //fprintf("In welcome()"); lcd.printString("Stick Runner! ",0,1); lcd.printString(" Press Start ",0,4); lcd.refresh(); @@ -114,7 +123,7 @@ wait(0.1); } - + //fprintf("Entering menu() from wlelcome"); menu(); } @@ -125,7 +134,7 @@ { - + //fprintf("In menu"); lcd.clear(); lcd.printString(" Menu ",0,0); lcd.printString("A)New Game ",0,2); @@ -147,8 +156,10 @@ //Clear, refresh and intialize the game again so we can start a new game lcd.clear(); + //fprintf("Entering init from menu()"); lcd.refresh(); init(); + //fprintf("Entering the game when A is pressed"); stickRunner(); @@ -164,6 +175,12 @@ //Simply refreshes the page and continues from where the user left the game // as the intialize function init() is not called again lcd.refresh(); + + pad.led(2,0); + pad.led(5,0); + + + //fprintf("Entering the game when B is pressed from menu"); stickRunner(); @@ -173,21 +190,28 @@ else if( pad.check_event(Gamepad::X_PRESSED) ) { // pad.tone(1000.0,0.5); + //fprintf("entering instructions when X is pressed from menu"); Instructions(); } + //To see the game high score else if( pad.check_event(Gamepad::Y_PRESSED) ) { //pad.tone(1000.0,0.5); + //fprintf("Displayibng highscore when Y is pressed from menu"); displayHighScore(); } + + + + sleep(); @@ -200,7 +224,8 @@ //This function is responsible for running the game void stickRunner() { - int fps = 8; + //fprintf("IN the game(stickrunner())"); + int fps = 10; render(); wait(1.0f/fps); @@ -209,35 +234,56 @@ while (1) { + lcd.setBrightness(pad.read_pot()); + //fprintf("printing out the value of counter before updating in each iteration %d",counter); //As long as the character survives update the score counter++; + //fprintf("printing out the value of counter after updating in each iteration %d",counter); //Using the gamepad library to move the character using the joystick + //fprintf("Calling UpdateCharacter from the game func to make it move"); c.updateCharacter(pad.get_direction(),pad.get_mag()); + //values = device.get_values(); + // c.accMove(values); + //Condition to ckeck if the user wants to pause the game if(pad.check_event(Gamepad::BACK_PRESSED)) { lcd.clear(); - lcd.refresh(); + lcd.refresh(); + + + pad.led(2,1); + pad.led(5,1); + + + + //fprintf("Game paused and sent to menu from the game when BACK is pressed"); menu(); } - //Loop to make the generation of obstacles a continious loop and also to check if the user has been killed + //Loop to make the generation of obstacles a continious loop by checking the status and also to check if the user has been killed for(i=0;i<No_OBS;i++) - { + { //fprintf("in to loop to check when to initialise the obstacles and "); + //To retrieve the status of the obstacle on the screen + //fprintf("Obstacle Status called from stickrunner()"); obstacle[i].obstacleStatus(obstacle[i].getObstaclePos()); + //fprintf("Value returned from obstacle status %d", obstacle[i].obstacleStatus(obstacle[i].getObstaclePos()); if(obstacle[i].getObstacleStatus() == false) { + //fprintf("Init clalled from stickrunner() in obstaccle"); obstacle[i].init(); } //To check whether the character has been hit by an obstacle by comparing the position of each obstacle // relative to the character + //fprintf("Character status called from stickrunner() in obstacle loop"); c.characterStatus(obstacle[i].getObstaclePos()); + //fprintf("the value returned by character status %d", c.characterStatus(obstacle[i].getObstaclePos())); } @@ -245,16 +291,21 @@ //Loop to make the generation of gems a continious loop and also to check if the user has collected them for(j=0;j<No_GEMS;j++) { + //fprintf("in to loop to check when to initialise the gems and "); + //To check whether the character has collected a gem by comparing the position of each gem // relative to the character + //fprintf("Gems Status called from stickrunner()"); gems[j].gemStatus(c.getCharacterPos()); - - + //fprintf("Value returned from gem status %d", gem[i].gemStatus(obstacle[i].getGemPos()); if(gems[j].getGemStatus() == false) { + + //fprintf("Init clalled from stickrunner() in gem"); gems[j].init(); + } @@ -267,6 +318,8 @@ for(i=0;i<No_OBS;i++) { + + //fprintf("update obstacle clalled from stickrunner()"); obstacle[i].updateObstacle(); } @@ -275,10 +328,12 @@ for(j=0;j<No_GEMS;j++) { + //fprintf("update gem clalled from stickrunner()"); gems[j].updateGems(); } - + + //fprintf("render called from stickrunner()"); render(); wait(1.0f/fps); @@ -290,18 +345,20 @@ //Function to draw out the pixels on the screen void render() { - + //fprintf("In render"); lcd.clear(); //Only draws the character as long as it survives if(c.getCharacterStatus()) { + //fprintf("Character drawn"); c.draw(lcd); } if(c.getCharacterStatus() == false) { + //fprintf("over called from render()"); over(); } @@ -312,6 +369,7 @@ { if(obstacle[i].getObstacleStatus()) { + //fprintf("obstacle drawn"); obstacle[i].draw(lcd); } } @@ -321,6 +379,7 @@ { if(gems[j].getGemStatus()) { + //fprintf("gem drawn"); gems[j].draw(lcd); } @@ -338,56 +397,27 @@ //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 void over() { + //fprintf("In over()"); + + + //pad.tone(1000.0,0.5); pad.init(); - // lcd.init(); - // lcd.clear(); + - //Mounting on the SD card to read/write in it - //sd.mount(); - + //Converting the counter into a string 'score' to display on the lcd sprintf (score, " Score : %d",counter); + //fprintf("Counter converted to string %s",score); lcd.printString(score,0,2); lcd.printString("GAME OVER!! ",0,0); - //lcd.printString(" ",0,1); - - //Opening file on the SD card - /*file = fopen("/sd/scoreFile.txt", "r"); - - //If file is empty and score to it and display it as the High Score - if(file ==NULL) - { - file = fopen("/sd/scoreFile.txt", "w"); - fprintf(file,"%d",counter); - fclose(file); - lcd.printString("HIGH SCORE",0,3); - - } - //if not empty compare against the exsisting high score and display whether the user has made a new high score - else - { - fscanf(file,"%d", &highScore); - fclose(file); - - if(counter>highScore) - { - - file = fopen("/sd/scoreFile.txt", "w"); - fprintf(file,"%d",counter); - fclose(file); - lcd.printString("HIGH SCORE",0,3); - } - - }*/ - - + lcd.printString(" PRESS START ",0,5); lcd.refresh(); - //sd.unmount(); + //Takes the user back to the main for a new game while ( pad.check_event(Gamepad::START_PRESSED) == false) @@ -400,6 +430,7 @@ wait(0.1); if( pad.check_event(Gamepad::START_PRESSED)) { + //fprintf("main called from over() to start a new game"); main(); wait(1); } @@ -411,55 +442,41 @@ //Function to display the current High score fo the game and also reset it to 0 void displayHighScore() { - sd.mount(); + //fprintf("In highscore()"); + + lcd.clear(); //Open file - file = fopen("/sd/scoreFile.txt", "r"); - if(file ==NULL) - { - highScore = 0; + if(highScore <= counter) + { + highScore = counter; + //fprintf("value of highscore from if %d", highScore); + lcd.printString(" BACK - menu ",0,5); + } - } - else - { - //Read the high score from the file - fscanf(file,"%d", &highScore); - fclose(file); - - } + else + { + highScore = highScore; + + } //Convert highscore(int) to score(String) to print on the lcd - sprintf (score, "High Score : %d",highScore); - - lcd.printString(score,0,2); - lcd.printString(" START - reset ",0,4); + sprintf (score, " %d",highScore); + //fprintf("value of score when updated with highscore %s", score); + lcd.printString("High Score :",0,2); + lcd.printString(score,0,3); + lcd.printString(" BACK - menu ",0,5); lcd.refresh(); sd.unmount(); while(1) { - //To reset the highscore - if( pad.check_event(Gamepad::START_PRESSED)) - { - sd.mount(); - file = fopen("/sd/scoreFile.txt", "r"); - if(!file ==NULL) - { - //Delete the file if it is empty - fclose(file); - remove("/sd/scoreFile.txt"); - - } - sd.unmount(); - displayHighScore(); - - } - //Back to menu if( pad.check_event(Gamepad::BACK_PRESSED)) { + //fprintf("menu called from highscore when back is pressed"); menu(); } @@ -475,6 +492,7 @@ //Function to display the Instructions for the game void Instructions() { + //fprintf("in instructions()"); bool i = true; lcd.clear(); lcd.printString("INSTURCTIONS: ",0,0); @@ -491,6 +509,8 @@ { //pad.tone(1000.0,0.5); i = false; + + //fprintf("menu called from instructions when back pressed"); menu(); } }