Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
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
Generated on Thu Jul 14 2022 07:54:31 by
