XJEL2645 (19/20) / Mbed 2 deprecated Explorer

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Gameengine.cpp Source File

Gameengine.cpp

00001 #include "Gameengine.h"
00002 char buffer[15];
00003 // Constructor and destructor.
00004   Gameengine::Gameengine() {}
00005  
00006   Gameengine::~Gameengine() {}
00007 
00008 void Gameengine::init() {
00009     reset_game_engine();
00010     _start_flag = true;
00011     srand(time(NULL)); 
00012     }
00013     
00014 void Gameengine::reset_game_engine() {
00015     _item.init();
00016     _player.init();
00017     _surface.init(20,40);
00018     _collision_flag = false;
00019     _player_score = 0;
00020     X_flag = false;
00021     _coordinate.coord.x = 0;
00022     _coordinate.coord.y = 0;
00023     }
00024     
00025 void Gameengine::read_input(Gamepad &gamepad) {
00026     _coordinate.coord = gamepad.get_mapped_coord();
00027     X_flag = gamepad.check_event(Gamepad::X_PRESSED); }
00028     
00029 void Gameengine::check_reset(N5110 &lcd, Gamepad &gamepad) {
00030     if(_player.get_reset_flag()) {
00031           gamepad.leds_on();
00032           lcd.clear();
00033       for (int i = 0; i < 80; i++) {
00034       lcd.printString("Try Again",0,2);
00035       lcd.printString("Score:",0,4);  
00036       lcd.refresh();
00037       // dependent on counters.
00038       wait(0.001);  // Control speed of the sequence.
00039       sprintf(buffer,"%2d",_player_score); 
00040       lcd.printString(buffer,15,4); }
00041       reset_game_engine();
00042        }
00043       }
00044 
00045 void Gameengine::check_start(N5110 &lcd, Gamepad &gamepad) {
00046     if(_start_flag == true) { 
00047      check_reset(lcd, gamepad);} 
00048     _start_flag = get_start_flag(); 
00049     }
00050     
00051 void Gameengine::get_explorer_y(Gamepad &gamepad) {
00052     set_fall_flag();
00053     if (_f_flag == true) 
00054     {
00055       _player.fall(_f_flag, gamepad);
00056     } else {
00057     _player.set_y_coordinate(X_flag, _jump_height, _y_flag); }  
00058     _f_flag = _player.get_fall_flag(); 
00059     _player_y = _player.get_y();
00060     _jump_height = _player.get_jump_height();}
00061     
00062 void Gameengine::set_fall_flag() {
00063     if (((set_line_1.right < _player_x) && (_player_x < (set_line_1.left - 5))) && (_y_flag == 0)) {
00064           _f_flag = true; }
00065     else if (((set_line_2.right < _player_x) && (_player_x < (set_line_2.left - 5))) && (_y_flag == 0)) {
00066           _f_flag = true; }
00067     else if (((set_line_3.right < _player_x) && (_player_x < (set_line_3.left - 5))) && (_y_flag == 0)) {
00068           _f_flag = true; }
00069     else if ((_player_x <= 0) && (_player_x >= 80)) {
00070           _f_flag = true; }
00071           }
00072           
00073 void Gameengine::check_collision(Gamepad &gamepad) {
00074     if ((_player_x == _item.get_item_x() - 5) && (_player_y == _item.get_item_y() - 5)) {  
00075     _collision_flag = true;
00076     _player_score++;
00077     _item.set_item(((rand()%80)+ 5) , ((rand()%80)+ 5));  // use the rand()%m function to generate a number from 80 to 1
00078     // on a constrained random position.
00079     gamepad.tone(1000, 0.1);//cause a noise to makesure the coin has collected
00080     }
00081     }
00082     
00083 void Gameengine::generate_lines() {
00084     _surface.line_1();
00085     line_1_value = _surface.getline_1();
00086     _surface.line_2();
00087     line_2_value = _surface.getline_2();
00088     _surface.line_3();
00089     line_3_value = _surface.getline_3();
00090     _surface.line_4();
00091     line_4_value = _surface.getline_4();
00092     _surface.line_5();
00093     line_5_value = _surface.getline_5();
00094     _surface.line_6();
00095     line_6_value = _surface.getline_6(); }
00096 //the start_flag is the flag to make the surface move
00097 //and when the player is playing the start_flag should be false to avoid reset
00098 bool Gameengine::get_start_flag() {
00099           if(X_flag == true) {
00100               _start_flag = false; }
00101               else {_start_flag = true;}
00102               return _start_flag; }
00103               
00104 int Gameengine::get_score() {
00105     return _player_score; 
00106     }
00107     
00108 void Gameengine::get_explorer_direction() {_player_direction = _player.get_direction(); }
00109 
00110 void Gameengine::get_sprite() {_explorer_sprite = _player.get_explorer_sprite(); }
00111 
00112     
00113 void Gameengine::get_explorer_x() {
00114     _player_x = _player.get_x();
00115     _speed = _player.get_speed(); 
00116     _player.set_x_coordinate(_coordinate.coord.x, _speed, _player_direction); }   
00117 
00118 void Gameengine::update_lcd(N5110 &lcd) {
00119      lcd.drawSprite(_player_x,_player_y,10,10,(int *)_player.get_form(_explorer_sprite));
00120      lcd.drawSprite(_item.get_item_x(),_item.get_item_y(),5,6,(int*)_item.get_item_form());
00121      lcd.drawLine(line_1_value.left,line_1_value.y,line_1_value.right,line_1_value.y,FILL_BLACK);
00122      lcd.drawLine(line_2_value.left,line_2_value.y,line_2_value.right,line_2_value.y,FILL_BLACK);
00123      lcd.drawLine(line_3_value.left,line_3_value.y,line_3_value.right,line_3_value.y,FILL_BLACK);
00124      lcd.drawLine(line_4_value.left,line_4_value.y,line_4_value.right,line_4_value.y,FILL_BLACK);
00125      lcd.drawLine(line_5_value.left,line_5_value.y,line_5_value.right,line_5_value.y,FILL_BLACK);
00126      lcd.drawLine(line_6_value.left,line_6_value.y,line_6_value.right,line_6_value.y,FILL_BLACK);
00127      sprintf(buffer,"%2d",_player_score);
00128      lcd.printString("score",0,0);
00129      lcd.printString(buffer,30,0); }
00130 
00131 void Gameengine::run_engine(N5110 &lcd, Gamepad &gamepad) {
00132      check_start(lcd, gamepad);
00133      check_reset(lcd, gamepad);
00134      read_input(gamepad);
00135      get_sprite();
00136      get_explorer_direction();
00137      get_explorer_y(gamepad);
00138      get_explorer_x();
00139      generate_lines();
00140      check_collision(gamepad);
00141      update_lcd(lcd);
00142      _player_score = get_score(); }
00143 
00144      
00145 
00146 
00147           
00148     
00149     
00150