Stick_Runner
Dependencies: FXOS8700CQ Gamepad N5110 SDFileSystem mbed
main.cpp
- Committer:
- el15ss
- Date:
- 2017-05-02
- Revision:
- 2:98a41609c827
- Parent:
- 1:db9ff66f67c8
- Child:
- 3:0c690f1c04d8
File content as of revision 2:98a41609c827:
/***************************************************** Libraries and modules used * ******************************************************/ #include "mbed.h" #include "Gamepad.h" #include "N5110.h" #include "Character.h" #include "Obstacles.h" #include "Gems.h" #include "SDFileSystem.h" #define No_OBS 8 #define No_GEMS 4 int i,j,counter,highScore; char score[50]; //Structs struct UserInput { Direction d; float mag; }; /* Class Objects */ N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11); Gamepad pad; Character c; Obstacles obstacle[No_OBS]; Gems gems[No_GEMS],g; SDFileSystem sd(PTE3,PTE1,PTE2,PTE4,"sd"); FILE *file; /* Function Prototypes */ void init(); void update_game(UserInput input); void render(); void welcome(); void menu(); void over(); void Instructions(); /* Functions */ int main() { int fps = 8; /* Intialization */ init(); /* Drawing the intial frame */ welcome(); wait(1.0f/fps); render(); wait(1.0f/fps); /* Main game loop to read input, render the display and update the game state */ // game loop - read input, update the game state and render the display while (1) { counter++; c.updateCharacter(pad.get_direction(),pad.get_mag()); if(pad.check_event(Gamepad::BACK_PRESSED)) { lcd.clear(); lcd.refresh(); menu(); } for(i=0;i<No_OBS;i++) { obstacle[i].obstacleStatus(obstacle[i].getObstaclePos()); if(obstacle[i].getObstacleStatus() == false) { obstacle[i].init(); } c.characterStatus(obstacle[i].getObstaclePos()); // obstacle[i].obstacleStatus(c.getCharacterPos()); } for(j=0;j<No_GEMS;j++) { gems[j].gemStatus(c.getCharacterPos()); if(gems[j].getGemStatus() == false) { gems[j].init(); } } //To make the obstacles and gems move along the screen i =0; for(i=0;i<No_OBS;i++) { obstacle[i].updateObstacle(); } j =0; for(j=0;j<No_GEMS;j++) { gems[j].updateGems(); } render(); wait(1.0f/fps); } } void init() { lcd.init(); pad.init(); c.init(); for(i=0;i<No_OBS;i++) { obstacle[i].init(); } for(j=0;j<No_GEMS;j++) { gems[j].init(); } } void render() { lcd.clear(); if(c.getCharacterStatus()) { c.draw(lcd); } if(c.getCharacterStatus() == false) { over(); } //obstacle[i].draw(lcd); for(i=0;i<No_OBS;i++) { if(obstacle[i].getObstacleStatus()) { obstacle[i].draw(lcd); } } for(j=0;j<No_GEMS;j++) { if(gems[j].getGemStatus()) { gems[j].draw(lcd); } /*else{ counter++; }*/ } lcd.refresh(); } void welcome() { lcd.printString("Stick Runner! ",0,1); lcd.printString(" Press Start ",0,4); lcd.refresh(); // pad.tone(1500.0,0.5); //pad.tone(1500.0,0.5); while ( pad.check_event(Gamepad::START_PRESSED) == false) { pad.leds_on(); wait(0.1); pad.leds_off(); wait(0.1); } menu(); } void over() { pad.init(); // lcd.clear(); sd.mount(); sprintf (score, " Score : %d",counter); lcd.printString(score,0,2); lcd.printString("GAME OVER!! ",0,0); //lcd.printString(" ",0,1); file = fopen("/sd/scoreFile.txt", "r"); if(file ==NULL) { file = fopen("/sd/scoreFile.txt", "w"); fprintf(file,"%d",counter); fclose(file); lcd.printString("HIGH SCORE",0,3); } 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,4); lcd.refresh(); sd.unmount(); while ( pad.check_event(Gamepad::START_PRESSED) == false) { pad.leds_on(); //pad.tone(1000.0,0.5); wait(0.1); pad.leds_off(); // pad.tone(1000.0,0.5); wait(0.1); if( pad.check_event(Gamepad::START_PRESSED)) { main(); wait(1); } } } void displayHighScore() { sd.mount(); lcd.clear(); file = fopen("/sd/scoreFile.txt", "r"); if(file ==NULL) { highScore = 0; } else{ fscanf(file,"%d", &highScore); fclose(file); } sprintf (score, "High Score : %d",highScore); lcd.printString(score,0,2); lcd.printString(" START - reset ",0,4); lcd.printString(" BACK - menu ",0,5); lcd.refresh(); sd.unmount(); while(1) { if( pad.check_event(Gamepad::START_PRESSED)) { sd.mount(); file = fopen("/sd/scoreFile.txt", "r"); if(!file ==NULL) { fclose(file); remove("/sd/scoreFile.txt"); } sd.unmount(); displayHighScore(); } if( pad.check_event(Gamepad::BACK_PRESSED)) { menu(); } sleep(); } } void menu() { int fps =8; bool i = true; while(i == true) { lcd.clear(); lcd.printString(" Menu ",0,0); lcd.printString("A)New Game ",0,2); lcd.printString("B)Continue ",0,3); lcd.printString("X)Instructions ",0,4); lcd.printString("Y)High Score ",0,5); lcd.refresh(); // wait flashing LEDs until start button is pressed if( pad.check_event(Gamepad::A_PRESSED) ) { //pad.tone(1000.0,0.5); i = false; lcd.clear(); lcd.refresh(); init(); //break; } else if( pad.check_event(Gamepad::B_PRESSED) ) { //lcd.clear(); // pad.tone(1000.0,0.5); i = false; lcd.refresh(); } else if( pad.check_event(Gamepad::X_PRESSED) ) { // pad.tone(1000.0,0.5); Instructions(); wait(1.0f/fps); i = false; } else if( pad.check_event(Gamepad::Y_PRESSED) ) { // pad.tone(1000.0,0.5); displayHighScore(); wait(10.0f/fps); i = false; } } } void Instructions() { bool i = true; lcd.clear(); lcd.printString("INSTURCTIONS: ",0,0); lcd.printString("Collect the ",0,2); lcd.printString("gems and dodge ",0,3); lcd.printString("the obstacles ",0,4); lcd.printString("to get points ",0,5); lcd.refresh(); while(i == true){ if( pad.check_event(Gamepad::BACK_PRESSED) ) { //pad.tone(1000.0,0.5); i = false; menu(); } } }