contains my game for the embedded systems project 2645

Dependencies:   mbed FXOS8700CQQQ

GameEngine/RocketRacer.cpp

Committer:
OmarAlebiary
Date:
2019-03-28
Revision:
11:d4aaa959bb20
Parent:
10:7323785c071c
Child:
12:1d3b0218d8d0

File content as of revision 11:d4aaa959bb20:

#include "RocketRacer.h"

Gamepad Mypad;
const int enemy[11][9] =   {
    { 0,0,0,0,1,0,0,0,0 },
    { 0,0,0,1,1,1,0,0,0 },
    { 0,0,1,1,1,1,1,0,0 },
    { 0,1,1,1,1,1,1,1,0 },
    { 0,1,1,1,1,1,1,1,0 },
    { 0,1,1,1,1,1,1,1,0 },
    { 1,1,1,1,1,1,1,1,1 },
    { 1,1,1,1,1,1,1,1,1 },
    { 1,1,1,1,1,1,1,1,1 },
    { 1,1,1,1,1,1,1,1,1 },
    { 1,1,1,1,1,1,1,1,1 },
};

const int rocket[11][9] =   {
    { 0,0,0,0,1,0,0,0,0 },
    { 0,0,0,1,1,1,0,0,0 },
    { 0,0,1,1,1,1,1,0,0 },
    { 0,1,1,1,1,1,1,1,0 },
    { 0,1,1,1,1,1,1,1,0 },
    { 0,1,1,1,1,1,1,1,0 },
    { 0,0,1,1,1,1,1,0,0 },
    { 0,0,0,1,1,1,0,0,0 },
    { 0,0,0,0,1,0,0,0,0 },
    { 0,0,1,1,1,1,1,0,0 },
    { 0,0,1,1,1,1,1,0,0 },
};

int enemy_0_pos, enemy_1_pos, enemy_phase;
int Joy_X;
int game_speed = 0;
int score = 0;
char POS=2;
bool enemy_dead = true;
bool control = true;

 

void RocketRacer::MainGameDisplay(N5110 &lcd){
    
    lcd.clear();
    lcd.drawRect(0,0,50,47,FILL_TRANSPARENT);
    char buffer[14];
    char buffer1[14];
    char buffer2[14];
    char buffer3[14];

    //dispaly score
    sprintf(buffer,"score");
    lcd.printString(buffer,55,0);
    sprintf(buffer1,"%d",score);
    lcd.printString(buffer1,58,1);
    //dispaly level
    sprintf(buffer2,"Level");
    lcd.printString(buffer2,55,3);
    sprintf(buffer3,"%d",game_speed);
    lcd.printString(buffer3,58,4);
    lcd.refresh();
    
    }


void RocketRacer::Joystick_position(Gamepad &pad){
    Direction d=pad.get_direction();

    if(d==E && POS!=3 && control==true){
        POS++; 
        control = false;
        printf("its Right\n");
    }
    else if(d==W && POS!=1 && control==true){
        POS--;
        control = false;  
        printf("its left\n");
    }
    else if(d==CENTRE){
        control = true;
        printf("its middle\n");
        }
}
void RocketRacer::Generate_New_Enemy(){
  srand(time(NULL));
  
        if (enemy_dead){ 
            enemy_0_pos = POS; 
            enemy_1_pos = (rand() % 3)+1; 
            enemy_phase = 0; 
            enemy_dead = false;
            }
    }
    
void RocketRacer::Check_Enemy_Dead(N5110 &lcd,Gamepad &pad){
             
             if (enemy_phase>22 && ((enemy_0_pos == POS) || (enemy_1_pos == POS)) ){
                 EndGame(pad,lcd);
             }
             if (enemy_phase>40){
                 enemy_dead = true;
                 score++;
                 } 
    }
    
void RocketRacer::GameLoop(N5110 &lcd,Gamepad &pad){
    
        lcd.clear(); 
    
        Joystick_position(pad);
        player_position(lcd,POS);
            
        Generate_New_Enemy();
        
        
         enemy_position(lcd,enemy_0_pos, enemy_phase);
         enemy_phase++;
         enemy_position(lcd,enemy_1_pos, enemy_phase);
         enemy_phase++;
         
         Check_Enemy_Dead(lcd,pad);
         
         Game_difficulty();
         
         lcd.refresh();
    }


//adds difficulty to the game after proceeding each level
void RocketRacer::Game_difficulty(){
     
     if (score>=0 && score<=5){
         game_speed = 1;
         wait(0.09);
         }
    if (score>5 && score<=10){
        game_speed = 2;
         wait(0.07);
        }
    if (score>10 && score<=20){
        game_speed = 3; 
        wait(0.06); 
        }
    if (score>20 && score<=30){
        game_speed = 4; 
        wait(0.05); 
        }
   if (score>30){
       game_speed = 5;
        wait(0.03);
        }
    }


void RocketRacer::enemy_position(N5110 &lcd,int place, int phase){
  if (place==1){
      lcd.drawSprite(2,phase,11,9,(int *)enemy);
      }
  
  if (place==2){
      lcd.drawSprite(18,phase,11,9,(int *)enemy);
      }
  
  if (place==3){
      lcd.drawSprite(34,phase,11,9,(int *)enemy);
      }
      lcd.refresh();
  
}

void RocketRacer::player_position(N5110 &lcd,char RocketPosition){
  
  MainGameDisplay(lcd);
  
  
  if (RocketPosition==1){   
      lcd.drawSprite(2,34,11,9,(int *)rocket);
      }
  if (RocketPosition==2){
      lcd.drawSprite(18,34,11,9,(int *)rocket);
      }
  if (RocketPosition==3){
      lcd.drawSprite(34,34,11,9,(int *)rocket);
      }
      lcd.refresh();
}


void RocketRacer::EndGame(Gamepad &pad,N5110 &lcd){
    lcd.clear();
    char buffer1[14];
    lcd.printString("Game over!!!",5,0);
    lcd.printString("Better Luck ",2,1);
    lcd.printString("next time",2,2);
    lcd.printString("High score:",2,3);
    
    sprintf(buffer1,"%d",score);
    lcd.printString(buffer1,20,4); 
    pad.leds_on();
       
    lcd.refresh();
    wait(500);
    
    }