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
GameEngine/GameEngine.cpp@16:106c27d03402, 2018-05-07 (annotated)
- Committer:
- RehamFaqehi
- Date:
- Mon May 07 18:27:42 2018 +0000
- Revision:
- 16:106c27d03402
- Parent:
- 15:658f1216ee84
Rocket element has been changed to Spaceship
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 | 16:106c27d03402 | 16 | //initialise game objects Spaceship and 3 asteroids with diffrent speeds |
| RehamFaqehi | 16:106c27d03402 | 17 | _Spaceship.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 | 16:106c27d03402 | 36 | _Spaceship.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 | 16:106c27d03402 | 58 | _Spaceship.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 | 16:106c27d03402 | 71 | Vector2D _Spaceship_pos = _Spaceship.get_pos(); |
| RehamFaqehi | 7:06c86ec1f19d | 72 | |
| RehamFaqehi | 12:4d7f1349d796 | 73 | // check if the collision occers with Asteroid 1 |
| RehamFaqehi | 16:106c27d03402 | 74 | if ((_Spaceship_pos.x+10 >=_asteroid1_pos.x) &&( _Spaceship_pos.x+8 <_asteroid1_pos.x )) { |
| RehamFaqehi | 12:4d7f1349d796 | 75 | |
| RehamFaqehi | 16:106c27d03402 | 76 | if( ( _asteroid1_pos.y >= _Spaceship_pos.y) && ( _asteroid1_pos.y <= _Spaceship_pos.y+7) || |
| RehamFaqehi | 16:106c27d03402 | 77 | (_asteroid1_pos.y+6 >= _Spaceship_pos.y) &&(_asteroid1_pos.y+6 <= _Spaceship_pos.y+7 )) { |
| RehamFaqehi | 12:4d7f1349d796 | 78 | |
| RehamFaqehi | 16:106c27d03402 | 79 | _Spaceship.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 | 16:106c27d03402 | 95 | Vector2D _Spaceship_pos = _Spaceship.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 96 | |
| RehamFaqehi | 12:4d7f1349d796 | 97 | // check if the collision occers with Asteroid 2 |
| RehamFaqehi | 16:106c27d03402 | 98 | if ((_Spaceship_pos.x+10 >=_asteroid2_pos.x) && (_Spaceship_pos.x+8 <_asteroid2_pos.x )) { |
| RehamFaqehi | 12:4d7f1349d796 | 99 | |
| RehamFaqehi | 16:106c27d03402 | 100 | if( (_asteroid2_pos.y >= _Spaceship_pos.y) && ( _asteroid2_pos.y <= _Spaceship_pos.y+7) || |
| RehamFaqehi | 16:106c27d03402 | 101 | (_asteroid2_pos.y+6 >= _Spaceship_pos.y) &&( _asteroid2_pos.y+6 <= _Spaceship_pos.y+7 )) { |
| RehamFaqehi | 12:4d7f1349d796 | 102 | |
| RehamFaqehi | 16:106c27d03402 | 103 | _Spaceship.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 | 16:106c27d03402 | 119 | Vector2D _Spaceship_pos = _Spaceship.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 120 | |
| RehamFaqehi | 12:4d7f1349d796 | 121 | // check if the collision occers with Asteroid 3 |
| RehamFaqehi | 16:106c27d03402 | 122 | if ((_Spaceship_pos.x+10 >= _asteroid3_pos.x) &&( _Spaceship_pos.x+6 < _asteroid3_pos.x )) { |
| RehamFaqehi | 12:4d7f1349d796 | 123 | |
| RehamFaqehi | 16:106c27d03402 | 124 | if( (_asteroid3_pos.y >= _Spaceship_pos.y) &&( _asteroid3_pos.y <= _Spaceship_pos.y+7) || |
| RehamFaqehi | 16:106c27d03402 | 125 | ( _asteroid3_pos.y+6 >= _Spaceship_pos.y) &&(_asteroid3_pos.y+6 <= _Spaceship_pos.y+7 )) { |
| RehamFaqehi | 12:4d7f1349d796 | 126 | |
| RehamFaqehi | 16:106c27d03402 | 127 | _Spaceship.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 | 16:106c27d03402 | 141 | // get collision from Spaceship class |
| RehamFaqehi | 16:106c27d03402 | 142 | int _Spaceship_collisions= _Spaceship.get_collisions(); |
| RehamFaqehi | 12:4d7f1349d796 | 143 | |
| RehamFaqehi | 12:4d7f1349d796 | 144 | // reduce the hearts with each collision till the third collision the game ends |
| RehamFaqehi | 16:106c27d03402 | 145 | if (_Spaceship_collisions==0) { |
| RehamFaqehi | 16:106c27d03402 | 146 | _Spaceship.drawFullHearts(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 147 | |
| RehamFaqehi | 16:106c27d03402 | 148 | } else if (_Spaceship_collisions ==1) { |
| RehamFaqehi | 16:106c27d03402 | 149 | _Spaceship.drawTwoHearts(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 150 | |
| RehamFaqehi | 16:106c27d03402 | 151 | } else if (_Spaceship_collisions == 2) { |
| RehamFaqehi | 16:106c27d03402 | 152 | _Spaceship.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 | 15:658f1216ee84 | 167 | |
| RehamFaqehi | 15:658f1216ee84 | 168 | |
| RehamFaqehi | 14:cf4a32245152 | 169 | void GameEngine::reset_gameOver(){ |
| RehamFaqehi | 14:cf4a32245152 | 170 | |
| RehamFaqehi | 14:cf4a32245152 | 171 | //rest time and game over value to play again |
| RehamFaqehi | 14:cf4a32245152 | 172 | time.reset(); |
| RehamFaqehi | 14:cf4a32245152 | 173 | gameOver=0; |
| RehamFaqehi | 14:cf4a32245152 | 174 | } |
| RehamFaqehi | 12:4d7f1349d796 | 175 | |
| RehamFaqehi | 15:658f1216ee84 | 176 | |
| RehamFaqehi | 12:4d7f1349d796 | 177 | void GameEngine::time_increment() |
| RehamFaqehi | 11:cb48d596aa3e | 178 | { |
| RehamFaqehi | 12:4d7f1349d796 | 179 | //start and incrementing the time and read it |
| RehamFaqehi | 12:4d7f1349d796 | 180 | time.start(); |
| RehamFaqehi | 12:4d7f1349d796 | 181 | _time = time.read(); |
| RehamFaqehi | 12:4d7f1349d796 | 182 | } |
| RehamFaqehi | 11:cb48d596aa3e | 183 | |
| RehamFaqehi | 12:4d7f1349d796 | 184 | |
| RehamFaqehi | 12:4d7f1349d796 | 185 | void GameEngine::time_stop() |
| RehamFaqehi | 12:4d7f1349d796 | 186 | { |
| RehamFaqehi | 12:4d7f1349d796 | 187 | //stop the time |
| RehamFaqehi | 12:4d7f1349d796 | 188 | time.stop(); |
| RehamFaqehi | 11:cb48d596aa3e | 189 | } |
| RehamFaqehi | 11:cb48d596aa3e | 190 | |
| RehamFaqehi | 11:cb48d596aa3e | 191 | |
| RehamFaqehi | 12:4d7f1349d796 | 192 | void GameEngine::print_time(N5110 &lcd) |
| RehamFaqehi | 12:4d7f1349d796 | 193 | { |
| RehamFaqehi | 12:4d7f1349d796 | 194 | // print the time |
| RehamFaqehi | 12:4d7f1349d796 | 195 | char buffer1[11]; |
| RehamFaqehi | 12:4d7f1349d796 | 196 | sprintf(buffer1,"%4d",_time); //maximum time 9999 |
| RehamFaqehi | 12:4d7f1349d796 | 197 | lcd.printString(buffer1,60, 0); |
| RehamFaqehi | 11:cb48d596aa3e | 198 | } |
| RehamFaqehi | 11:cb48d596aa3e | 199 | |
| RehamFaqehi | 12:4d7f1349d796 | 200 | |
| RehamFaqehi | 12:4d7f1349d796 | 201 | void GameEngine::print_travel_time(N5110 &lcd) |
| RehamFaqehi | 12:4d7f1349d796 | 202 | { |
| RehamFaqehi | 12:4d7f1349d796 | 203 | // print the time at the end of the game |
| RehamFaqehi | 12:4d7f1349d796 | 204 | char buffer1[11]; |
| RehamFaqehi | 12:4d7f1349d796 | 205 | sprintf(buffer1," %4d sec",_time); //maximum time 9999 |
| RehamFaqehi | 12:4d7f1349d796 | 206 | lcd.printString(buffer1,0, 3); |
| RehamFaqehi | 12:4d7f1349d796 | 207 | } |
| RehamFaqehi | 12:4d7f1349d796 | 208 |
