Dependencies:   mbed

Revision:
4:aada5ebb075d
Parent:
3:e53e289cd4ba
Child:
5:b5c95c7a5302
diff -r e53e289cd4ba -r aada5ebb075d DodgeEngine/DodgeEngine.cpp
--- a/DodgeEngine/DodgeEngine.cpp	Fri May 15 13:30:09 2020 +0000
+++ b/DodgeEngine/DodgeEngine.cpp	Sat May 16 16:06:06 2020 +0000
@@ -4,9 +4,10 @@
 DodgeEngine::DodgeEngine(){}
 DodgeEngine::~DodgeEngine(){}
 
-void DodgeEngine::init(int x1up, int y1up, int x1down, int y1down, int x2up, int y2up, int x2down, int y2down){
+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){
@@ -24,10 +25,138 @@
        
 }
 
-void DodgeEngine::dodgeupdate(){
-    block.blockupgrate();
+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();
+    }
+  
+     
+    
 }
 
-
+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();
+    }
+}
     
\ No newline at end of file