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/GameEngine.cpp@14:cf4a32245152, 2018-05-06 (annotated)
- Committer:
- RehamFaqehi
- Date:
- Sun May 06 16:17:41 2018 +0000
- Revision:
- 14:cf4a32245152
- Parent:
- 12:4d7f1349d796
- Child:
- 15:658f1216ee84
Debugging strings and play again with start button have been added
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| RehamFaqehi | 2:3fd0d3d69556 | 1 | #include "GameEngine.h" |
| RehamFaqehi | 2:3fd0d3d69556 | 2 | |
| RehamFaqehi | 2:3fd0d3d69556 | 3 | GameEngine::GameEngine() |
| RehamFaqehi | 2:3fd0d3d69556 | 4 | { |
| RehamFaqehi | 2:3fd0d3d69556 | 5 | |
| RehamFaqehi | 2:3fd0d3d69556 | 6 | } |
| RehamFaqehi | 2:3fd0d3d69556 | 7 | |
| RehamFaqehi | 2:3fd0d3d69556 | 8 | GameEngine::~GameEngine() |
| RehamFaqehi | 2:3fd0d3d69556 | 9 | { |
| RehamFaqehi | 2:3fd0d3d69556 | 10 | |
| RehamFaqehi | 2:3fd0d3d69556 | 11 | } |
| RehamFaqehi | 2:3fd0d3d69556 | 12 | |
| RehamFaqehi | 12:4d7f1349d796 | 13 | |
| RehamFaqehi | 2:3fd0d3d69556 | 14 | void GameEngine::init() |
| RehamFaqehi | 2:3fd0d3d69556 | 15 | { |
| RehamFaqehi | 12:4d7f1349d796 | 16 | //initialise game objects rocket and 3 asteroids with diffrent speeds |
| RehamFaqehi | 2:3fd0d3d69556 | 17 | _rocket.init(); |
| RehamFaqehi | 8:13cef7cb872e | 18 | _asteroid1.init(2); |
| RehamFaqehi | 8:13cef7cb872e | 19 | _asteroid2.init(3); |
| RehamFaqehi | 8:13cef7cb872e | 20 | _asteroid3.init(4); |
| RehamFaqehi | 14:cf4a32245152 | 21 | time.reset(); |
| RehamFaqehi | 11:cb48d596aa3e | 22 | gameOver=0; |
| RehamFaqehi | 2:3fd0d3d69556 | 23 | } |
| RehamFaqehi | 2:3fd0d3d69556 | 24 | |
| RehamFaqehi | 12:4d7f1349d796 | 25 | |
| RehamFaqehi | 2:3fd0d3d69556 | 26 | void GameEngine::read_input(Gamepad &pad) |
| RehamFaqehi | 2:3fd0d3d69556 | 27 | { |
| RehamFaqehi | 2:3fd0d3d69556 | 28 | _d = pad.get_direction(); |
| RehamFaqehi | 2:3fd0d3d69556 | 29 | _mag = pad.get_mag(); |
| RehamFaqehi | 2:3fd0d3d69556 | 30 | } |
| RehamFaqehi | 2:3fd0d3d69556 | 31 | |
| RehamFaqehi | 12:4d7f1349d796 | 32 | |
| RehamFaqehi | 2:3fd0d3d69556 | 33 | void GameEngine::draw(N5110 &lcd) |
| RehamFaqehi | 2:3fd0d3d69556 | 34 | { |
| RehamFaqehi | 2:3fd0d3d69556 | 35 | // draw the game elements in the LCD |
| RehamFaqehi | 2:3fd0d3d69556 | 36 | _rocket.draw(lcd); |
| RehamFaqehi | 8:13cef7cb872e | 37 | _asteroid1.draw(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 38 | _asteroid2.draw(lcd); |
| RehamFaqehi | 8:13cef7cb872e | 39 | _asteroid3.draw(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 40 | |
| RehamFaqehi | 12:4d7f1349d796 | 41 | //print the 3 hearts life |
| RehamFaqehi | 12:4d7f1349d796 | 42 | draw_hearts(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 43 | |
| RehamFaqehi | 12:4d7f1349d796 | 44 | //print the recorded time in sec |
| RehamFaqehi | 12:4d7f1349d796 | 45 | print_time(lcd); |
| RehamFaqehi | 2:3fd0d3d69556 | 46 | } |
| RehamFaqehi | 2:3fd0d3d69556 | 47 | |
| RehamFaqehi | 12:4d7f1349d796 | 48 | |
| RehamFaqehi | 12:4d7f1349d796 | 49 | void GameEngine::update(Gamepad &pad) |
| RehamFaqehi | 3:489437d4ebd7 | 50 | { |
| RehamFaqehi | 12:4d7f1349d796 | 51 | |
| RehamFaqehi | 12:4d7f1349d796 | 52 | //checking collisions with Asteroid 1, 2 and 3 |
| RehamFaqehi | 12:4d7f1349d796 | 53 | check_collision1(pad); |
| RehamFaqehi | 12:4d7f1349d796 | 54 | check_collision2(pad); |
| RehamFaqehi | 12:4d7f1349d796 | 55 | check_collision3(pad); |
| RehamFaqehi | 12:4d7f1349d796 | 56 | |
| RehamFaqehi | 12:4d7f1349d796 | 57 | //updating the display |
| RehamFaqehi | 12:4d7f1349d796 | 58 | _rocket.update(_d,_mag); |
| RehamFaqehi | 8:13cef7cb872e | 59 | _asteroid1.update(); |
| RehamFaqehi | 8:13cef7cb872e | 60 | _asteroid2.update(); |
| RehamFaqehi | 8:13cef7cb872e | 61 | _asteroid3.update(); |
| RehamFaqehi | 12:4d7f1349d796 | 62 | |
| RehamFaqehi | 12:4d7f1349d796 | 63 | //updating the time |
| RehamFaqehi | 12:4d7f1349d796 | 64 | time_increment(); |
| RehamFaqehi | 3:489437d4ebd7 | 65 | } |
| RehamFaqehi | 6:7b733b2a6cf6 | 66 | |
| RehamFaqehi | 6:7b733b2a6cf6 | 67 | |
| RehamFaqehi | 12:4d7f1349d796 | 68 | void GameEngine::check_collision1(Gamepad &pad) |
| RehamFaqehi | 6:7b733b2a6cf6 | 69 | { |
| RehamFaqehi | 8:13cef7cb872e | 70 | Vector2D _asteroid1_pos = _asteroid1.get_pos() ; |
| RehamFaqehi | 6:7b733b2a6cf6 | 71 | Vector2D _rocket_pos = _rocket.get_pos(); |
| RehamFaqehi | 7:06c86ec1f19d | 72 | |
| RehamFaqehi | 12:4d7f1349d796 | 73 | // check if the collision occers with Asteroid 1 |
| RehamFaqehi | 12:4d7f1349d796 | 74 | if ((_rocket_pos.x+10 >=_asteroid1_pos.x) &&( _rocket_pos.x+8 <_asteroid1_pos.x )) { |
| RehamFaqehi | 12:4d7f1349d796 | 75 | |
| RehamFaqehi | 12:4d7f1349d796 | 76 | if( ( _asteroid1_pos.y >= _rocket_pos.y) && ( _asteroid1_pos.y <= _rocket_pos.y+7) || |
| RehamFaqehi | 12:4d7f1349d796 | 77 | (_asteroid1_pos.y+6 >= _rocket_pos.y) &&(_asteroid1_pos.y+6 <= _rocket_pos.y+7 )) { |
| RehamFaqehi | 12:4d7f1349d796 | 78 | |
| RehamFaqehi | 12:4d7f1349d796 | 79 | _rocket.add_collisions(); |
| RehamFaqehi | 12:4d7f1349d796 | 80 | pad.tone(1500.0,0.5); //tone |
| RehamFaqehi | 12:4d7f1349d796 | 81 | pad.leds_on(); //LEDs flashing |
| RehamFaqehi | 7:06c86ec1f19d | 82 | wait(0.5); |
| RehamFaqehi | 7:06c86ec1f19d | 83 | pad.leds_off(); |
| RehamFaqehi | 14:cf4a32245152 | 84 | //debugging |
| RehamFaqehi | 14:cf4a32245152 | 85 | printf("((collision occurs))\n" ); |
| RehamFaqehi | 6:7b733b2a6cf6 | 86 | } |
| RehamFaqehi | 7:06c86ec1f19d | 87 | } |
| RehamFaqehi | 12:4d7f1349d796 | 88 | } |
| RehamFaqehi | 12:4d7f1349d796 | 89 | |
| RehamFaqehi | 12:4d7f1349d796 | 90 | |
| RehamFaqehi | 12:4d7f1349d796 | 91 | void GameEngine::check_collision2(Gamepad &pad) |
| RehamFaqehi | 12:4d7f1349d796 | 92 | { |
| RehamFaqehi | 12:4d7f1349d796 | 93 | |
| RehamFaqehi | 12:4d7f1349d796 | 94 | Vector2D _asteroid2_pos = _asteroid2.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 95 | Vector2D _rocket_pos = _rocket.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 96 | |
| RehamFaqehi | 12:4d7f1349d796 | 97 | // check if the collision occers with Asteroid 2 |
| RehamFaqehi | 12:4d7f1349d796 | 98 | if ((_rocket_pos.x+10 >=_asteroid2_pos.x) && (_rocket_pos.x+8 <_asteroid2_pos.x )) { |
| RehamFaqehi | 12:4d7f1349d796 | 99 | |
| RehamFaqehi | 12:4d7f1349d796 | 100 | if( (_asteroid2_pos.y >= _rocket_pos.y) && ( _asteroid2_pos.y <= _rocket_pos.y+7) || |
| RehamFaqehi | 12:4d7f1349d796 | 101 | (_asteroid2_pos.y+6 >= _rocket_pos.y) &&( _asteroid2_pos.y+6 <= _rocket_pos.y+7 )) { |
| RehamFaqehi | 12:4d7f1349d796 | 102 | |
| RehamFaqehi | 12:4d7f1349d796 | 103 | _rocket.add_collisions(); |
| RehamFaqehi | 12:4d7f1349d796 | 104 | pad.tone(1500.0,0.5); //tone |
| RehamFaqehi | 12:4d7f1349d796 | 105 | pad.leds_on(); //LEDs flashing |
| RehamFaqehi | 8:13cef7cb872e | 106 | wait(0.5); |
| RehamFaqehi | 8:13cef7cb872e | 107 | pad.leds_off(); |
| RehamFaqehi | 14:cf4a32245152 | 108 | //debugging |
| RehamFaqehi | 14:cf4a32245152 | 109 | printf("((collision occurs))\n"); |
| RehamFaqehi | 8:13cef7cb872e | 110 | } |
| RehamFaqehi | 8:13cef7cb872e | 111 | } |
| RehamFaqehi | 12:4d7f1349d796 | 112 | } |
| RehamFaqehi | 12:4d7f1349d796 | 113 | |
| RehamFaqehi | 12:4d7f1349d796 | 114 | |
| RehamFaqehi | 12:4d7f1349d796 | 115 | void GameEngine::check_collision3(Gamepad &pad) |
| RehamFaqehi | 12:4d7f1349d796 | 116 | { |
| RehamFaqehi | 12:4d7f1349d796 | 117 | |
| RehamFaqehi | 12:4d7f1349d796 | 118 | Vector2D _asteroid3_pos = _asteroid3.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 119 | Vector2D _rocket_pos = _rocket.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 120 | |
| RehamFaqehi | 12:4d7f1349d796 | 121 | // check if the collision occers with Asteroid 3 |
| RehamFaqehi | 12:4d7f1349d796 | 122 | if ((_rocket_pos.x+10 >= _asteroid3_pos.x) &&( _rocket_pos.x+6 < _asteroid3_pos.x )) { |
| RehamFaqehi | 12:4d7f1349d796 | 123 | |
| RehamFaqehi | 12:4d7f1349d796 | 124 | if( (_asteroid3_pos.y >= _rocket_pos.y) &&( _asteroid3_pos.y <= _rocket_pos.y+7) || |
| RehamFaqehi | 12:4d7f1349d796 | 125 | ( _asteroid3_pos.y+6 >= _rocket_pos.y) &&(_asteroid3_pos.y+6 <= _rocket_pos.y+7 )) { |
| RehamFaqehi | 12:4d7f1349d796 | 126 | |
| RehamFaqehi | 12:4d7f1349d796 | 127 | _rocket.add_collisions(); |
| RehamFaqehi | 12:4d7f1349d796 | 128 | pad.tone(1500.0,0.5); //tone |
| RehamFaqehi | 12:4d7f1349d796 | 129 | pad.leds_on(); //LEDs flashing |
| RehamFaqehi | 12:4d7f1349d796 | 130 | wait(0.5); |
| RehamFaqehi | 12:4d7f1349d796 | 131 | pad.leds_off(); |
| RehamFaqehi | 14:cf4a32245152 | 132 | //debugging |
| RehamFaqehi | 14:cf4a32245152 | 133 | printf("((collision occurs))\n"); |
| RehamFaqehi | 8:13cef7cb872e | 134 | } |
| RehamFaqehi | 8:13cef7cb872e | 135 | } |
| RehamFaqehi | 6:7b733b2a6cf6 | 136 | } |
| RehamFaqehi | 8:13cef7cb872e | 137 | |
| RehamFaqehi | 8:13cef7cb872e | 138 | |
| RehamFaqehi | 12:4d7f1349d796 | 139 | void GameEngine::draw_hearts(N5110 &lcd) |
| RehamFaqehi | 6:7b733b2a6cf6 | 140 | { |
| RehamFaqehi | 12:4d7f1349d796 | 141 | // get collision from Rocket class |
| RehamFaqehi | 12:4d7f1349d796 | 142 | int _rocket_collisions= _rocket.get_collisions(); |
| RehamFaqehi | 12:4d7f1349d796 | 143 | |
| RehamFaqehi | 12:4d7f1349d796 | 144 | // reduce the hearts with each collision till the third collision the game ends |
| RehamFaqehi | 12:4d7f1349d796 | 145 | if (_rocket_collisions==0) { |
| RehamFaqehi | 12:4d7f1349d796 | 146 | _rocket.drawFullHearts(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 147 | |
| RehamFaqehi | 12:4d7f1349d796 | 148 | } else if (_rocket_collisions ==1) { |
| RehamFaqehi | 7:06c86ec1f19d | 149 | _rocket.drawTwoHearts(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 150 | |
| RehamFaqehi | 12:4d7f1349d796 | 151 | } else if (_rocket_collisions == 2) { |
| RehamFaqehi | 7:06c86ec1f19d | 152 | _rocket.drawOneHeart(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 153 | |
| RehamFaqehi | 7:06c86ec1f19d | 154 | } else { |
| RehamFaqehi | 9:e70179ff61c5 | 155 | gameOver=1; |
| RehamFaqehi | 12:4d7f1349d796 | 156 | |
| RehamFaqehi | 7:06c86ec1f19d | 157 | } |
| RehamFaqehi | 9:e70179ff61c5 | 158 | } |
| RehamFaqehi | 9:e70179ff61c5 | 159 | |
| RehamFaqehi | 12:4d7f1349d796 | 160 | |
| RehamFaqehi | 12:4d7f1349d796 | 161 | int GameEngine::check_gameOver() |
| RehamFaqehi | 9:e70179ff61c5 | 162 | { |
| RehamFaqehi | 12:4d7f1349d796 | 163 | //stop the time and return if game over |
| RehamFaqehi | 12:4d7f1349d796 | 164 | time.stop (); |
| RehamFaqehi | 9:e70179ff61c5 | 165 | return gameOver; |
| RehamFaqehi | 11:cb48d596aa3e | 166 | } |
| RehamFaqehi | 14:cf4a32245152 | 167 | void GameEngine::reset_gameOver(){ |
| RehamFaqehi | 14:cf4a32245152 | 168 | |
| RehamFaqehi | 14:cf4a32245152 | 169 | //rest time and game over value to play again |
| RehamFaqehi | 14:cf4a32245152 | 170 | time.reset(); |
| RehamFaqehi | 14:cf4a32245152 | 171 | gameOver=0; |
| RehamFaqehi | 14:cf4a32245152 | 172 | } |
| RehamFaqehi | 12:4d7f1349d796 | 173 | |
| RehamFaqehi | 12:4d7f1349d796 | 174 | void GameEngine::time_increment() |
| RehamFaqehi | 11:cb48d596aa3e | 175 | { |
| RehamFaqehi | 12:4d7f1349d796 | 176 | //start and incrementing the time and read it |
| RehamFaqehi | 12:4d7f1349d796 | 177 | time.start(); |
| RehamFaqehi | 12:4d7f1349d796 | 178 | _time = time.read(); |
| RehamFaqehi | 12:4d7f1349d796 | 179 | } |
| RehamFaqehi | 11:cb48d596aa3e | 180 | |
| RehamFaqehi | 12:4d7f1349d796 | 181 | |
| RehamFaqehi | 12:4d7f1349d796 | 182 | void GameEngine::time_stop() |
| RehamFaqehi | 12:4d7f1349d796 | 183 | { |
| RehamFaqehi | 12:4d7f1349d796 | 184 | //stop the time |
| RehamFaqehi | 12:4d7f1349d796 | 185 | time.stop(); |
| RehamFaqehi | 11:cb48d596aa3e | 186 | } |
| RehamFaqehi | 11:cb48d596aa3e | 187 | |
| RehamFaqehi | 11:cb48d596aa3e | 188 | |
| RehamFaqehi | 12:4d7f1349d796 | 189 | void GameEngine::print_time(N5110 &lcd) |
| RehamFaqehi | 12:4d7f1349d796 | 190 | { |
| RehamFaqehi | 12:4d7f1349d796 | 191 | // print the time |
| RehamFaqehi | 12:4d7f1349d796 | 192 | char buffer1[11]; |
| RehamFaqehi | 12:4d7f1349d796 | 193 | sprintf(buffer1,"%4d",_time); //maximum time 9999 |
| RehamFaqehi | 12:4d7f1349d796 | 194 | lcd.printString(buffer1,60, 0); |
| RehamFaqehi | 11:cb48d596aa3e | 195 | } |
| RehamFaqehi | 11:cb48d596aa3e | 196 | |
| RehamFaqehi | 12:4d7f1349d796 | 197 | |
| RehamFaqehi | 12:4d7f1349d796 | 198 | void GameEngine::print_travel_time(N5110 &lcd) |
| RehamFaqehi | 12:4d7f1349d796 | 199 | { |
| RehamFaqehi | 12:4d7f1349d796 | 200 | // print the time at the end of the game |
| RehamFaqehi | 12:4d7f1349d796 | 201 | char buffer1[11]; |
| RehamFaqehi | 12:4d7f1349d796 | 202 | sprintf(buffer1," %4d sec",_time); //maximum time 9999 |
| RehamFaqehi | 12:4d7f1349d796 | 203 | lcd.printString(buffer1,0, 3); |
| RehamFaqehi | 12:4d7f1349d796 | 204 | } |
| RehamFaqehi | 12:4d7f1349d796 | 205 |