ELEC2645 (2017/18) / Mbed 2 deprecated fy15raf

Dependencies:   mbed

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?

UserRevisionLine numberNew 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