201377806 ZiWei Liu

Dependencies:   mbed

DodgeEngine/DodgeEngine.cpp

Committer:
alexliu0812
Date:
2020-05-17
Revision:
5:b5c95c7a5302
Parent:
4:aada5ebb075d
Child:
9:50470a40d213

File content as of revision 5:b5c95c7a5302:

#include "DodgeEngine.h"


DodgeEngine::DodgeEngine(){}
DodgeEngine::~DodgeEngine(){}

void DodgeEngine::init(int x1up, int y1up, int x1down, int y1down, int x2up, int y2up, int x2down, int y2down, int manx, int many){
    
    block.blockinit(x1up, y1up, x1down, y1down, x2up, y2up,x2down,y2down);
    character.charinit(manx, many);
}

void DodgeEngine::charactermove(N5110 &lcd,Gamepad &pad){
    
    character.move_up(pad);
    character.move_down();
    character.boundry();
    character.draw(lcd);
    
}

void DodgeEngine::blockmove(N5110 &lcd){
    
    block.draw_block(lcd);
       
}

void DodgeEngine::dodgeupdate(N5110 &lcd, Gamepad &pad,int x1up, int y1up, int x1down, int y1down, int x2up, int y2up, int x2down, int y2down, int manx, int many){
    
    
    check_crash(lcd,pad,x1up, y1up, x1down, y1down, x2up, y2up,x2down,y2down,manx, many);
    show_score(lcd);
    
    int updatescore;
    updatescore = block.get_score();
    
    if(updatescore > 39){
        pass_game(lcd,pad);
    }
        
    
    if(updatescore > 9 && updatescore < 20){
        block.blockupgrate2();
    }
    else if(updatescore > 19 &&updatescore <30){
        block.blockupgrate3();
    }
    else if(updatescore > 29 &&updatescore <40){
        block.blockupgrate4();
    }
    else{
        block.blockupgrate();
    }
    
    
    block.y_update();
  
     
    
}

void DodgeEngine::check_crash(N5110 &lcd, Gamepad &pad,int x1up, int y1up, int x1down, int y1down, int x2up, int y2up, int x2down, int y2down, int manx, int many){
    Vector2D characterposition = character.get_char_position();
    Vector2D upperlimit = block.getposition2();
    Vector2D lowerlimit = block.getposition3();
    
    //check if character has fall on the ground
    if(characterposition.y > 35){
      
        //audio and led feedback
        pad.tone(500.0,0.5);
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        print_score(lcd,pad,x1up, y1up, x1down, y1down, x2up, y2up,x2down,y2down,manx, many);
        
    }
    //check if character has crash on the wall
    if(upperlimit.x > 15 && upperlimit.x < 26){
        
        if(characterposition.y < upperlimit.y || characterposition.y + 11 > lowerlimit.y ){
            
            pad.leds_on();
            pad.tone(500.0,0.5);
            print_score(lcd,pad,x1up, y1up, x1down, y1down, x2up, y2up,x2down,y2down,manx, many);
        }
    }
    
    int check_crash_score;
    check_crash_score = block.get_score();
    
    if(check_crash_score < 10){
        if(upperlimit.x > 13 && upperlimit.x < 15){
            block.add_score();
        }
    }
    else if(check_crash_score >9 && check_crash_score < 20){
        if(upperlimit.x > 12 && upperlimit.x < 15){
            block.add_score();
        }
    }
    else if(check_crash_score >19 && check_crash_score < 30){
        if(upperlimit.x > 11 && upperlimit.x < 15){
            block.add_score();
        }
    }
    else{ 
        if(upperlimit.x > 10 && upperlimit.x < 15){
            block.add_score();
        }
    
    }

 }   
 
 void DodgeEngine::print_score(N5110 &lcd, Gamepad &pad,int x1up, int y1up, int x1down, int y1down, int x2up, int y2up, int x2down, int y2down, int manx, int many){
    
    
    int finalscore = block.get_score();
    lcd.clear();
    char score[14];
    while(pad.B_pressed() == false){
        sprintf(score, "%2d score!", finalscore);
        lcd.printString("Finally...",1,0);
        lcd.printString("You achieved",1,1);
        lcd.printString(score,1,2);
        lcd.printString("Try again?",1,3);
        lcd.printString("press B",1,4);
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
        lcd.refresh();
    }
    lcd.clear();
    init(x1up, y1up, x1down, y1down, x2up, y2up,x2down,y2down,manx, many);
    
}
    
void DodgeEngine::show_score(N5110 &lcd){
    
    int showscore = block.get_score();
    char score2[10];
    sprintf(score2, "%2d", showscore);
    lcd.printString(score2,0,0);
    lcd.refresh();
    
}

void DodgeEngine::pass_game(N5110 &lcd, Gamepad &pad){
    
    lcd.clear();
    while(pad.B_pressed() == false){
        lcd.printString("Congratulation",1,1);
        lcd.printString("All level pass",1,2);
        lcd.printString("  Try Again?  ",1,4);
        lcd.printString("    Press B   ",1,5);
        pad.leds_on();
        wait(0.1);
        pad.leds_off();
        wait(0.1);
        lcd.refresh();
    }
}