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
Diff: GameEngine/GameEngine.cpp
- Revision:
- 12:4d7f1349d796
- Parent:
- 11:cb48d596aa3e
- Child:
- 14:cf4a32245152
diff -r cb48d596aa3e -r 4d7f1349d796 GameEngine/GameEngine.cpp
--- 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);
+}
+