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.
Fork of fy15raf by
Diff: GameEngine/GameEngine.cpp
- Revision:
- 12:4d7f1349d796
- Parent:
- 11:cb48d596aa3e
- Child:
- 14:cf4a32245152
--- a/GameEngine/GameEngine.cpp Thu May 03 22:34:03 2018 +0000
+++ b/GameEngine/GameEngine.cpp Fri May 04 21:19:34 2018 +0000
@@ -10,166 +10,185 @@
}
+
void GameEngine::init()
{
+ //initialise game objects rocket and 3 asteroids with diffrent speeds
_rocket.init();
_asteroid1.init(2);
_asteroid2.init(3);
_asteroid3.init(4);
- // Sec=0;
+
gameOver=0;
}
+
void GameEngine::read_input(Gamepad &pad)
{
_d = pad.get_direction();
_mag = pad.get_mag();
}
+
void GameEngine::draw(N5110 &lcd)
{
// draw the game elements in the LCD
_rocket.draw(lcd);
_asteroid1.draw(lcd);
- _asteroid2.draw(lcd);
+ _asteroid2.draw(lcd);
_asteroid3.draw(lcd);
- //print_scores(lcd);
- print_scores1(lcd);
- // print_sec(lcd);
-
+
+ //print the 3 hearts life
+ draw_hearts(lcd);
+
+ //print the recorded time in sec
+ print_time(lcd);
}
-void GameEngine::update(Gamepad &pad, N5110 &lcd)
+
+void GameEngine::update(Gamepad &pad)
{
-
- check_goal(pad);
- _rocket.update(_d,_mag, lcd);
+
+ //checking collisions with Asteroid 1, 2 and 3
+ check_collision1(pad);
+ check_collision2(pad);
+ check_collision3(pad);
+
+ //updating the display
+ _rocket.update(_d,_mag);
_asteroid1.update();
_asteroid2.update();
_asteroid3.update();
- //sec();
+
+ //updating the time
+ time_increment();
}
-void GameEngine::check_goal(Gamepad &pad)
+void GameEngine::check_collision1(Gamepad &pad)
{
Vector2D _asteroid1_pos = _asteroid1.get_pos() ;
- Vector2D _asteroid2_pos = _asteroid2.get_pos() ;
- Vector2D _asteroid3_pos = _asteroid3.get_pos() ;
-
Vector2D _rocket_pos = _rocket.get_pos();
- if ((_rocket_pos.x+10 >=_asteroid1_pos.x) &&
- ( _rocket_pos.x+8 <_asteroid1_pos.x )) {//size //sprint width //float/////////////speed
- if( ( _asteroid1_pos.y >= _rocket_pos.y) &&
- ( _asteroid1_pos.y <= _rocket_pos.y+7) ||
- (_asteroid1_pos.y+6 >= _rocket_pos.y) &&
- (_asteroid1_pos.y+6 <= _rocket_pos.y+7 )) {
- _rocket.add_score();
- pad.tone(1500.0,0.5);
- pad.leds_on();
+ // check if the collision occers with Asteroid 1
+ if ((_rocket_pos.x+10 >=_asteroid1_pos.x) &&( _rocket_pos.x+8 <_asteroid1_pos.x )) {
+
+ if( ( _asteroid1_pos.y >= _rocket_pos.y) && ( _asteroid1_pos.y <= _rocket_pos.y+7) ||
+ (_asteroid1_pos.y+6 >= _rocket_pos.y) &&(_asteroid1_pos.y+6 <= _rocket_pos.y+7 )) {
+
+ _rocket.add_collisions();
+ pad.tone(1500.0,0.5); //tone
+ pad.leds_on(); //LEDs flashing
wait(0.5);
pad.leds_off();
}
}
-
- if ((_rocket_pos.x+10 >=_asteroid2_pos.x) &&
- (_rocket_pos.x+8 <_asteroid2_pos.x )) {
- //size //sprint width //float/////////////speed
- if( (_asteroid2_pos.y >= _rocket_pos.y) &&
- ( _asteroid2_pos.y <= _rocket_pos.y+7) ||
- (_asteroid2_pos.y+6 >= _rocket_pos.y) &&
- ( _asteroid2_pos.y+6 <= _rocket_pos.y+7 )) {
- _rocket.add_score();
- pad.tone(1500.0,0.5);
- pad.leds_on();
+}
+
+
+void GameEngine::check_collision2(Gamepad &pad)
+{
+
+ Vector2D _asteroid2_pos = _asteroid2.get_pos();
+ Vector2D _rocket_pos = _rocket.get_pos();
+
+ // check if the collision occers with Asteroid 2
+ if ((_rocket_pos.x+10 >=_asteroid2_pos.x) && (_rocket_pos.x+8 <_asteroid2_pos.x )) {
+
+ if( (_asteroid2_pos.y >= _rocket_pos.y) && ( _asteroid2_pos.y <= _rocket_pos.y+7) ||
+ (_asteroid2_pos.y+6 >= _rocket_pos.y) &&( _asteroid2_pos.y+6 <= _rocket_pos.y+7 )) {
+
+ _rocket.add_collisions();
+ pad.tone(1500.0,0.5); //tone
+ pad.leds_on(); //LEDs flashing
wait(0.5);
pad.leds_off();
}
}
-///////////////////////////////////////
- if ((_rocket_pos.x+10 >= _asteroid3_pos.x) &&
- ( _rocket_pos.x+6 < _asteroid3_pos.x ))
- {//size //sprint width //float/////////////speed
- if( (_asteroid3_pos.y >= _rocket_pos.y) &&
- ( _asteroid3_pos.y <= _rocket_pos.y+7) ||
- ( _asteroid3_pos.y+6 >= _rocket_pos.y) &&
- (_asteroid3_pos.y+6 <= _rocket_pos.y+7 )) {
- _rocket.add_score();
- pad.tone(1500.0,0.5);
- pad.leds_on();
- wait(0.5);
- pad.leds_off();
+}
+
+
+void GameEngine::check_collision3(Gamepad &pad)
+{
+
+ Vector2D _asteroid3_pos = _asteroid3.get_pos();
+ Vector2D _rocket_pos = _rocket.get_pos();
+
+ // check if the collision occers with Asteroid 3
+ if ((_rocket_pos.x+10 >= _asteroid3_pos.x) &&( _rocket_pos.x+6 < _asteroid3_pos.x )) {
+
+ if( (_asteroid3_pos.y >= _rocket_pos.y) &&( _asteroid3_pos.y <= _rocket_pos.y+7) ||
+ ( _asteroid3_pos.y+6 >= _rocket_pos.y) &&(_asteroid3_pos.y+6 <= _rocket_pos.y+7 )) {
+
+ _rocket.add_collisions();
+ pad.tone(1500.0,0.5); //tone
+ pad.leds_on(); //LEDs flashing
+ wait(0.5);
+ pad.leds_off();
}
}
-
}
- //////////////////////////////////////////////////////////////////
-void GameEngine::print_scores(N5110 &lcd) //this function is not used now
+void GameEngine::draw_hearts(N5110 &lcd)
{
- // get the number of hits
- int _rocket_score = _rocket.get_score();
-
- // print to LCD i
- char buffer1[11];
- sprintf(buffer1,"hits:%2d",_rocket_score);
- lcd.printString(buffer1,WIDTH/2 - 20, 1);
-}
-
-void GameEngine::print_scores1(N5110 &lcd)
-{
- // get scores from Rocket
- int _rocket_score = _rocket.get_score();
- // get_score();
- if (_rocket_score ==1) {
+ // get collision from Rocket class
+ int _rocket_collisions= _rocket.get_collisions();
+
+ // reduce the hearts with each collision till the third collision the game ends
+ if (_rocket_collisions==0) {
+ _rocket.drawFullHearts(lcd);
+
+ } else if (_rocket_collisions ==1) {
_rocket.drawTwoHearts(lcd);
- } else if (_rocket_score==0) {
- _rocket.drawFullHearts(lcd);
- } else if (_rocket_score == 2) {
+
+ } else if (_rocket_collisions == 2) {
_rocket.drawOneHeart(lcd);
+
} else {
gameOver=1;
+
}
}
-int GameEngine::get_gameOver1()
+
+int GameEngine::check_gameOver()
{
+ //stop the time and return if game over
+ time.stop ();
return gameOver;
}
-/*void GameEngine::sec(){
- //Sec=timer_isr();
-
- Sec++;
- }
-//int GameEngine::get_time()
-//{
- //return sec;
- // }
-
-void GameEngine::print_sec(N5110 &lcd)
+
+
+void GameEngine::time_increment()
{
- // get scores from paddles
- //int R1_sec = _R1.get_score();
+ //start and incrementing the time and read it
+ time.start();
+ _time = time.read();
+}
- // print to LCD i
- char buffer1[11];
- sprintf(buffer1,"%3d",Sec);
- lcd.printString(buffer1, 40, 0); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
+
+void GameEngine::time_stop()
+{
+ //stop the time
+ time.stop();
}
-void GameEngine::print_sec_over(N5110 &lcd)
-{
- // get scores from paddles
- //int R1_sec = _R1.get_score();
- // print to LCD i
- char buffer2[11];
- sprintf(buffer2," time: %3d s",Sec);
- lcd.printString(buffer2, 0, 5); // font is 8 wide, so leave 4 pixel gape from middle assuming two digits
+void GameEngine::print_time(N5110 &lcd)
+{
+ // print the time
+ char buffer1[11];
+ sprintf(buffer1,"%4d",_time); //maximum time 9999
+ lcd.printString(buffer1,60, 0);
}
-void timer_isr(){
- g_timer_flag=1;
- }*/
\ No newline at end of file
+
+void GameEngine::print_travel_time(N5110 &lcd)
+{
+ // print the time at the end of the game
+ char buffer1[11];
+ sprintf(buffer1," %4d sec",_time); //maximum time 9999
+ lcd.printString(buffer1,0, 3);
+}
+
