Mochu Yao explorer game

Dependencies:   mbed

Revision:
9:e11bb7cef050
Child:
17:1b4ecc01b79f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Gameengine/Gameengine.cpp	Mon Apr 27 14:01:00 2020 +0000
@@ -0,0 +1,145 @@
+#include "Gameengine.h"
+char buffer[15];
+// Constructor and destructor.
+  Gameengine::Gameengine() {}
+ 
+  Gameengine::~Gameengine() {}
+
+void Gameengine::init() {
+    reset_game_engine();
+    _start_flag = true;
+    srand(time(NULL)); 
+    }
+    
+void Gameengine::reset_game_engine() {
+    _item.init();
+    _player.init();
+    _surface.init(20,40);
+    _collision_flag = false;
+    _player_score = 0;
+    X_flag = false;
+    _coordinate.coord.x = 0;
+    _coordinate.coord.y = 0;
+    }
+    
+void Gameengine::read_input(Gamepad &gamepad) {
+    _coordinate.coord = gamepad.get_mapped_coord();
+    X_flag = gamepad.check_event(Gamepad::X_PRESSED); }
+    
+void Gameengine::check_reset(N5110 &lcd, Gamepad &gamepad) {
+    if(_player.get_reset_flag()) {
+          gamepad.leds_on();
+          lcd.clear();
+    for (int j = 0; j < 80; j++) { 
+      lcd.printString("Try Again",30,2);
+      lcd.printString("Score:",10,4);  
+      lcd.refresh();
+      // dependent on counters.
+      wait(0.001);  // Control speed of the sequence.
+      sprintf(buffer,"%2d",_player_score); 
+      lcd.printString(buffer,30,4); }
+       }
+      }
+
+void Gameengine::check_start(N5110 &lcd, Gamepad &gamepad) {
+    if(_start_flag == true) { 
+     check_reset(lcd, gamepad);} 
+    _start_flag = get_start_flag(); 
+    }
+
+void Gameengine::set_fall_flag() {
+    if (((set_line_1.right < _player_x) && (_player_x < (set_line_1.left - 5))) && _player_y == 20) {
+          _f_flag = true; }
+    else if (((set_line_2.right < _player_x) && (_player_x < (set_line_2.left - 5))) && _player_y == 20) {
+          _f_flag = true; }
+    else if (((set_line_3.right < _player_x) && (_player_x < (set_line_3.left - 5))) && _player_y == 20) {
+          _f_flag = true; }
+          }
+          
+void Gameengine::check_collision(Gamepad &gamepad) {
+    if (((_player_x - _item.get_item_x())< 7) && ((_player_y - _item.get_item_y()) < 7)) {  
+    _collision_flag = true;
+    _player_score++;
+    _item.set_item(((rand()%80)+ 5) , ((rand()%80)+ 5));  // use the rand()%m function to generate a number from 80 to 1
+    // on a constrained random position.
+    gamepad.tone(1000, 0.1);//cause a noise to makesure the coin has collected
+    }
+    }
+    
+void Gameengine::generate_lines() {
+    _surface.line_1();
+    line_1_value = _surface.getline_1();
+    _surface.line_2();
+    line_2_value = _surface.getline_2();
+    _surface.line_3();
+    line_3_value = _surface.getline_3();
+    _surface.line_4();
+    line_4_value = _surface.getline_4();
+    _surface.line_5();
+    line_5_value = _surface.getline_5();
+    _surface.line_6();
+    line_6_value = _surface.getline_6(); }
+//the start_flag is the flag to make the surface move
+//and when the player is playing the start_flag should be false to avoid reset
+bool Gameengine::get_start_flag() {
+          if(X_flag == true) {
+              _start_flag = false; }
+              else {_start_flag = true;}
+              return _start_flag; }
+              
+int Gameengine::get_score() {
+    return _player_score; 
+    }
+    
+void Gameengine::get_explorer_direction() {_player_direction = _player.get_direction(); }
+
+void Gameengine::get_sprite() {_explorer_sprite = _player.get_explorer_sprite(); }
+ 
+void Gameengine::get_explorer_y(Gamepad &gamepad) {
+        if (_f_flag == true) 
+    {
+      _player.fall(_f_flag, gamepad);
+    } else {
+    _player.set_y_coordinate(false, _jump_height); }  
+    _f_flag = _player.get_fall_flag(); 
+    _player_y = _player.get_y();
+    _jump_height = _player.get_jump_height(); }
+    
+void Gameengine::get_explorer_x() {
+    _player_x = _player.get_x();
+    _speed = _player.get_speed(); 
+    _player.set_x_coordinate(1, _speed, _player_direction); }   
+
+void Gameengine::update_lcd(N5110 &lcd) {
+     lcd.drawSprite(_player_x,_player_y,10,10,(int *)_player.get_form(_explorer_sprite));
+     lcd.drawSprite(_item.get_item_x(),_item.get_item_y(),5,6,(int*)_item.get_item_form());
+     lcd.drawLine(line_1_value.left,line_1_value.y,line_1_value.right,line_1_value.y,FILL_BLACK);
+     lcd.drawLine(line_2_value.left,line_2_value.y,line_2_value.right,line_2_value.y,FILL_BLACK);
+     lcd.drawLine(line_3_value.left,line_3_value.y,line_3_value.right,line_3_value.y,FILL_BLACK);
+     lcd.drawLine(line_4_value.left,line_4_value.y,line_4_value.right,line_4_value.y,FILL_BLACK);
+     lcd.drawLine(line_5_value.left,line_5_value.y,line_5_value.right,line_5_value.y,FILL_BLACK);
+     lcd.drawLine(line_6_value.left,line_6_value.y,line_6_value.right,line_6_value.y,FILL_BLACK);
+     sprintf(buffer,"%2d",_player_score);
+     lcd.printString("score:",0,0);
+     lcd.printString(buffer,30,0); }
+
+void Gameengine::run_engine(N5110 &lcd, Gamepad &gamepad) {
+     check_start(lcd, gamepad);
+     check_reset(lcd, gamepad);
+     read_input(gamepad);
+     get_sprite();
+     get_explorer_direction();
+     get_explorer_y(gamepad);
+     get_explorer_x();
+     generate_lines();
+     check_collision(gamepad);
+     update_lcd(lcd);
+     _player_score = get_score(); }
+
+     
+
+
+          
+    
+    
+