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@12:4d7f1349d796, 2018-05-04 (annotated)
- Committer:
- RehamFaqehi
- Date:
- Fri May 04 21:19:34 2018 +0000
- Revision:
- 12:4d7f1349d796
- Parent:
- 11:cb48d596aa3e
- Child:
- 14:cf4a32245152
Time added and some comments and functions names fixed
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 | 12:4d7f1349d796 | 21 | |
| 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 | 6:7b733b2a6cf6 | 84 | } |
| RehamFaqehi | 7:06c86ec1f19d | 85 | } |
| RehamFaqehi | 12:4d7f1349d796 | 86 | } |
| RehamFaqehi | 12:4d7f1349d796 | 87 | |
| RehamFaqehi | 12:4d7f1349d796 | 88 | |
| RehamFaqehi | 12:4d7f1349d796 | 89 | void GameEngine::check_collision2(Gamepad &pad) |
| RehamFaqehi | 12:4d7f1349d796 | 90 | { |
| RehamFaqehi | 12:4d7f1349d796 | 91 | |
| RehamFaqehi | 12:4d7f1349d796 | 92 | Vector2D _asteroid2_pos = _asteroid2.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 93 | Vector2D _rocket_pos = _rocket.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 94 | |
| RehamFaqehi | 12:4d7f1349d796 | 95 | // check if the collision occers with Asteroid 2 |
| RehamFaqehi | 12:4d7f1349d796 | 96 | if ((_rocket_pos.x+10 >=_asteroid2_pos.x) && (_rocket_pos.x+8 <_asteroid2_pos.x )) { |
| RehamFaqehi | 12:4d7f1349d796 | 97 | |
| RehamFaqehi | 12:4d7f1349d796 | 98 | if( (_asteroid2_pos.y >= _rocket_pos.y) && ( _asteroid2_pos.y <= _rocket_pos.y+7) || |
| RehamFaqehi | 12:4d7f1349d796 | 99 | (_asteroid2_pos.y+6 >= _rocket_pos.y) &&( _asteroid2_pos.y+6 <= _rocket_pos.y+7 )) { |
| RehamFaqehi | 12:4d7f1349d796 | 100 | |
| RehamFaqehi | 12:4d7f1349d796 | 101 | _rocket.add_collisions(); |
| RehamFaqehi | 12:4d7f1349d796 | 102 | pad.tone(1500.0,0.5); //tone |
| RehamFaqehi | 12:4d7f1349d796 | 103 | pad.leds_on(); //LEDs flashing |
| RehamFaqehi | 8:13cef7cb872e | 104 | wait(0.5); |
| RehamFaqehi | 8:13cef7cb872e | 105 | pad.leds_off(); |
| RehamFaqehi | 8:13cef7cb872e | 106 | } |
| RehamFaqehi | 8:13cef7cb872e | 107 | } |
| RehamFaqehi | 12:4d7f1349d796 | 108 | } |
| RehamFaqehi | 12:4d7f1349d796 | 109 | |
| RehamFaqehi | 12:4d7f1349d796 | 110 | |
| RehamFaqehi | 12:4d7f1349d796 | 111 | void GameEngine::check_collision3(Gamepad &pad) |
| RehamFaqehi | 12:4d7f1349d796 | 112 | { |
| RehamFaqehi | 12:4d7f1349d796 | 113 | |
| RehamFaqehi | 12:4d7f1349d796 | 114 | Vector2D _asteroid3_pos = _asteroid3.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 115 | Vector2D _rocket_pos = _rocket.get_pos(); |
| RehamFaqehi | 12:4d7f1349d796 | 116 | |
| RehamFaqehi | 12:4d7f1349d796 | 117 | // check if the collision occers with Asteroid 3 |
| RehamFaqehi | 12:4d7f1349d796 | 118 | if ((_rocket_pos.x+10 >= _asteroid3_pos.x) &&( _rocket_pos.x+6 < _asteroid3_pos.x )) { |
| RehamFaqehi | 12:4d7f1349d796 | 119 | |
| RehamFaqehi | 12:4d7f1349d796 | 120 | if( (_asteroid3_pos.y >= _rocket_pos.y) &&( _asteroid3_pos.y <= _rocket_pos.y+7) || |
| RehamFaqehi | 12:4d7f1349d796 | 121 | ( _asteroid3_pos.y+6 >= _rocket_pos.y) &&(_asteroid3_pos.y+6 <= _rocket_pos.y+7 )) { |
| RehamFaqehi | 12:4d7f1349d796 | 122 | |
| RehamFaqehi | 12:4d7f1349d796 | 123 | _rocket.add_collisions(); |
| RehamFaqehi | 12:4d7f1349d796 | 124 | pad.tone(1500.0,0.5); //tone |
| RehamFaqehi | 12:4d7f1349d796 | 125 | pad.leds_on(); //LEDs flashing |
| RehamFaqehi | 12:4d7f1349d796 | 126 | wait(0.5); |
| RehamFaqehi | 12:4d7f1349d796 | 127 | pad.leds_off(); |
| RehamFaqehi | 8:13cef7cb872e | 128 | } |
| RehamFaqehi | 8:13cef7cb872e | 129 | } |
| RehamFaqehi | 6:7b733b2a6cf6 | 130 | } |
| RehamFaqehi | 8:13cef7cb872e | 131 | |
| RehamFaqehi | 8:13cef7cb872e | 132 | |
| RehamFaqehi | 12:4d7f1349d796 | 133 | void GameEngine::draw_hearts(N5110 &lcd) |
| RehamFaqehi | 6:7b733b2a6cf6 | 134 | { |
| RehamFaqehi | 12:4d7f1349d796 | 135 | // get collision from Rocket class |
| RehamFaqehi | 12:4d7f1349d796 | 136 | int _rocket_collisions= _rocket.get_collisions(); |
| RehamFaqehi | 12:4d7f1349d796 | 137 | |
| RehamFaqehi | 12:4d7f1349d796 | 138 | // reduce the hearts with each collision till the third collision the game ends |
| RehamFaqehi | 12:4d7f1349d796 | 139 | if (_rocket_collisions==0) { |
| RehamFaqehi | 12:4d7f1349d796 | 140 | _rocket.drawFullHearts(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 141 | |
| RehamFaqehi | 12:4d7f1349d796 | 142 | } else if (_rocket_collisions ==1) { |
| RehamFaqehi | 7:06c86ec1f19d | 143 | _rocket.drawTwoHearts(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 144 | |
| RehamFaqehi | 12:4d7f1349d796 | 145 | } else if (_rocket_collisions == 2) { |
| RehamFaqehi | 7:06c86ec1f19d | 146 | _rocket.drawOneHeart(lcd); |
| RehamFaqehi | 12:4d7f1349d796 | 147 | |
| RehamFaqehi | 7:06c86ec1f19d | 148 | } else { |
| RehamFaqehi | 9:e70179ff61c5 | 149 | gameOver=1; |
| RehamFaqehi | 12:4d7f1349d796 | 150 | |
| RehamFaqehi | 7:06c86ec1f19d | 151 | } |
| RehamFaqehi | 9:e70179ff61c5 | 152 | } |
| RehamFaqehi | 9:e70179ff61c5 | 153 | |
| RehamFaqehi | 12:4d7f1349d796 | 154 | |
| RehamFaqehi | 12:4d7f1349d796 | 155 | int GameEngine::check_gameOver() |
| RehamFaqehi | 9:e70179ff61c5 | 156 | { |
| RehamFaqehi | 12:4d7f1349d796 | 157 | //stop the time and return if game over |
| RehamFaqehi | 12:4d7f1349d796 | 158 | time.stop (); |
| RehamFaqehi | 9:e70179ff61c5 | 159 | return gameOver; |
| RehamFaqehi | 11:cb48d596aa3e | 160 | } |
| RehamFaqehi | 12:4d7f1349d796 | 161 | |
| RehamFaqehi | 12:4d7f1349d796 | 162 | |
| RehamFaqehi | 12:4d7f1349d796 | 163 | void GameEngine::time_increment() |
| RehamFaqehi | 11:cb48d596aa3e | 164 | { |
| RehamFaqehi | 12:4d7f1349d796 | 165 | //start and incrementing the time and read it |
| RehamFaqehi | 12:4d7f1349d796 | 166 | time.start(); |
| RehamFaqehi | 12:4d7f1349d796 | 167 | _time = time.read(); |
| RehamFaqehi | 12:4d7f1349d796 | 168 | } |
| RehamFaqehi | 11:cb48d596aa3e | 169 | |
| RehamFaqehi | 12:4d7f1349d796 | 170 | |
| RehamFaqehi | 12:4d7f1349d796 | 171 | void GameEngine::time_stop() |
| RehamFaqehi | 12:4d7f1349d796 | 172 | { |
| RehamFaqehi | 12:4d7f1349d796 | 173 | //stop the time |
| RehamFaqehi | 12:4d7f1349d796 | 174 | time.stop(); |
| RehamFaqehi | 11:cb48d596aa3e | 175 | } |
| RehamFaqehi | 11:cb48d596aa3e | 176 | |
| RehamFaqehi | 11:cb48d596aa3e | 177 | |
| RehamFaqehi | 12:4d7f1349d796 | 178 | void GameEngine::print_time(N5110 &lcd) |
| RehamFaqehi | 12:4d7f1349d796 | 179 | { |
| RehamFaqehi | 12:4d7f1349d796 | 180 | // print the time |
| RehamFaqehi | 12:4d7f1349d796 | 181 | char buffer1[11]; |
| RehamFaqehi | 12:4d7f1349d796 | 182 | sprintf(buffer1,"%4d",_time); //maximum time 9999 |
| RehamFaqehi | 12:4d7f1349d796 | 183 | lcd.printString(buffer1,60, 0); |
| RehamFaqehi | 11:cb48d596aa3e | 184 | } |
| RehamFaqehi | 11:cb48d596aa3e | 185 | |
| RehamFaqehi | 12:4d7f1349d796 | 186 | |
| RehamFaqehi | 12:4d7f1349d796 | 187 | void GameEngine::print_travel_time(N5110 &lcd) |
| RehamFaqehi | 12:4d7f1349d796 | 188 | { |
| RehamFaqehi | 12:4d7f1349d796 | 189 | // print the time at the end of the game |
| RehamFaqehi | 12:4d7f1349d796 | 190 | char buffer1[11]; |
| RehamFaqehi | 12:4d7f1349d796 | 191 | sprintf(buffer1," %4d sec",_time); //maximum time 9999 |
| RehamFaqehi | 12:4d7f1349d796 | 192 | lcd.printString(buffer1,0, 3); |
| RehamFaqehi | 12:4d7f1349d796 | 193 | } |
| RehamFaqehi | 12:4d7f1349d796 | 194 |