ELEC2645 (2017/18) / Mbed 2 deprecated fy15raf

Dependencies:   mbed

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?

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