Stick_Runner

Dependencies:   FXOS8700CQ Gamepad N5110 SDFileSystem mbed

Fork of Stick_Runner by Samrudh Sharma

main.cpp

Committer:
el15ss
Date:
2017-04-28
Revision:
1:db9ff66f67c8
Parent:
0:12cfe63faa6a
Child:
2:98a41609c827

File content as of revision 1:db9ff66f67c8:

/*****************************************************
        Libraries and modules used                   *
******************************************************/
#include "mbed.h"
#include "Gamepad.h"
#include "N5110.h"
#include "Character.h"
#include "Obstacles.h"
#include "Gems.h"
#include <iostream>

#define No_OBS 8
#define No_GEMS 4

int i,j,counter;

//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;


/*            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) {
         
        
        
        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();
            }
            
          
        }
        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()
{
    // need to initialise LCD and Gamepad 
    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()
{
    // clear screen, re-draw and refresh
    lcd.clear();  
    
     if(c.getCharacterStatus())
     {  
        c.draw(lcd);
     }
    //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++;
      }
               
    }
            
   if(c.getCharacterStatus() == false)
   {
      over();
   }
   
   
    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);
      
     
    // wait flashing LEDs until start button is pressed 
    while ( pad.check_event(Gamepad::START_PRESSED) == false) 
    {
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
       
    }
 menu();
}

void over() {
    lcd.clear();
    
    char buffer[50];
    
    sprintf (buffer, "%d",counter);

    lcd.printString(buffer,0,3);
    lcd.printString("    GAME      ",0,1);  
    lcd.printString("  OVER!!!!!   ",0,2);
   
    lcd.printString(" PRESS START  ",0,4);  
    
    lcd.refresh();
     
    // wait flashing LEDs until start button is pressed 
    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 menu() {
    int fps =8;
     bool i = true;
    while(i == true)
    {
    lcd.printString("     Menu       ",0,1);  
    lcd.printString("A)New Game     ",0,2);
    lcd.printString("B)Continue     ",0,3);
    lcd.printString("X)Instructions ",0,4);
    
    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(100.0f/fps);
       i = false;
    }
    
    
 }
}

void Instructions()
{
     bool i = true;
     lcd.clear();
       lcd.printString("INSTURCTIONS:     ",0,1);  
       lcd.printString("Collect the       ",0,2);
       lcd.printString("gems to get       ",0,3);
       lcd.printString("points            ",0,4);
       lcd.refresh();
       
       while(i == true){
        
        if( pad.check_event(Gamepad::BACK_PRESSED) ) {
             //pad.tone(1000.0,0.5);
            i = false;
      menu();
    }
      }
    
    }