The library for the game engine
GameEngine.cpp@9:bd53c6e90213, 2017-05-04 (annotated)
- Committer:
- JasonGuo
- Date:
- Thu May 04 11:48:40 2017 +0000
- Revision:
- 9:bd53c6e90213
- Parent:
- 8:661097776006
sound added
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JasonGuo | 8:661097776006 | 1 | #include "GameEngine.h" |
JasonGuo | 8:661097776006 | 2 | //funtion to construct |
JasonGuo | 8:661097776006 | 3 | GameEngine::GameEngine() |
JasonGuo | 8:661097776006 | 4 | { |
JasonGuo | 9:bd53c6e90213 | 5 | |
JasonGuo | 8:661097776006 | 6 | } |
JasonGuo | 8:661097776006 | 7 | |
JasonGuo | 8:661097776006 | 8 | //function to destruct |
JasonGuo | 8:661097776006 | 9 | GameEngine::~GameEngine() |
JasonGuo | 8:661097776006 | 10 | { |
JasonGuo | 8:661097776006 | 11 | |
JasonGuo | 8:661097776006 | 12 | } |
JasonGuo | 8:661097776006 | 13 | |
JasonGuo | 8:661097776006 | 14 | //function to initialise the game parameters |
JasonGuo | 8:661097776006 | 15 | void GameEngine::init() |
JasonGuo | 8:661097776006 | 16 | { |
JasonGuo | 8:661097776006 | 17 | monster_number = 50; // monster number is set to 50 |
JasonGuo | 9:bd53c6e90213 | 18 | life = 5; // 3 chances to miss the monster |
JasonGuo | 8:661097776006 | 19 | _A = 0; // A button check |
JasonGuo | 8:661097776006 | 20 | |
JasonGuo | 8:661097776006 | 21 | _Jet.init(); // initialise the jet |
JasonGuo | 8:661097776006 | 22 | _Monster.init(); // initialise the monster |
JasonGuo | 8:661097776006 | 23 | } |
JasonGuo | 8:661097776006 | 24 | |
JasonGuo | 8:661097776006 | 25 | //function to read inputs |
JasonGuo | 8:661097776006 | 26 | void GameEngine::read_input(Gamepad &pad) |
JasonGuo | 8:661097776006 | 27 | { |
JasonGuo | 8:661097776006 | 28 | _d = pad.get_direction(); // get the move direction of the joystick |
JasonGuo | 8:661097776006 | 29 | _mag = pad.get_mag(); // get the move magnitude of the joystick |
JasonGuo | 8:661097776006 | 30 | check_fire(pad); // check if the fire button is pressed |
JasonGuo | 8:661097776006 | 31 | } |
JasonGuo | 8:661097776006 | 32 | |
JasonGuo | 8:661097776006 | 33 | //function to draw all elements |
JasonGuo | 8:661097776006 | 34 | void GameEngine::draw(N5110 &lcd) |
JasonGuo | 8:661097776006 | 35 | { |
JasonGuo | 8:661097776006 | 36 | // the bitmap of the cloud |
JasonGuo | 8:661097776006 | 37 | static int cloud[] = |
JasonGuo | 8:661097776006 | 38 | { |
JasonGuo | 8:661097776006 | 39 | 0,0,0,0,0,1,1,0,0,0,0,0,0,0,0, |
JasonGuo | 8:661097776006 | 40 | 0,0,0,0,1,0,0,1,0,0,0,0,0,0,0, |
JasonGuo | 8:661097776006 | 41 | 0,0,1,1,0,0,0,0,1,0,0,0,0,0,0, |
JasonGuo | 8:661097776006 | 42 | 0,1,0,0,0,0,0,0,0,1,0,1,1,0,0, |
JasonGuo | 8:661097776006 | 43 | 1,0,0,0,0,0,0,0,0,0,1,0,0,1,0, |
JasonGuo | 8:661097776006 | 44 | 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, |
JasonGuo | 8:661097776006 | 45 | 0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, |
JasonGuo | 8:661097776006 | 46 | 0,0,1,0,0,0,0,0,1,0,0,0,0,1,0, |
JasonGuo | 8:661097776006 | 47 | 0,0,0,1,1,0,0,1,0,1,0,0,1,0,0, |
JasonGuo | 8:661097776006 | 48 | 0,0,0,0,0,1,1,0,0,0,1,1,0,0,0, |
JasonGuo | 8:661097776006 | 49 | }; |
JasonGuo | 8:661097776006 | 50 | lcd.clear(); |
JasonGuo | 8:661097776006 | 51 | Bitmap sprite(cloud, 10, 15); // rows & columns of the cloud |
JasonGuo | 8:661097776006 | 52 | sprite.render(lcd, 60, 5); // draw clouds |
JasonGuo | 8:661097776006 | 53 | sprite.render(lcd, 10, 32); |
JasonGuo | 8:661097776006 | 54 | _Jet.draw(lcd); // draw jet |
JasonGuo | 8:661097776006 | 55 | _Monster.draw(lcd); // draw monster |
JasonGuo | 8:661097776006 | 56 | if(_A == 1) // if fire button is pressed |
JasonGuo | 8:661097776006 | 57 | { |
JasonGuo | 8:661097776006 | 58 | _Ammo.draw(lcd); // draw bullet |
JasonGuo | 8:661097776006 | 59 | } |
JasonGuo | 8:661097776006 | 60 | sprite.render(lcd, 35, 19); |
JasonGuo | 8:661097776006 | 61 | |
JasonGuo | 8:661097776006 | 62 | sprintf(life_buffer,"x%d",life); |
JasonGuo | 8:661097776006 | 63 | lcd.printString(life_buffer,1,0); // draw life value |
JasonGuo | 8:661097776006 | 64 | sprintf(number_buffer,"%d",monster_number); |
JasonGuo | 8:661097776006 | 65 | lcd.printString(number_buffer,25,0); // draw monster number |
JasonGuo | 8:661097776006 | 66 | lcd.refresh(); |
JasonGuo | 8:661097776006 | 67 | } |
JasonGuo | 8:661097776006 | 68 | |
JasonGuo | 8:661097776006 | 69 | //function to update game parameters |
JasonGuo | 8:661097776006 | 70 | void GameEngine::update(Gamepad &pad) |
JasonGuo | 8:661097776006 | 71 | { |
JasonGuo | 8:661097776006 | 72 | _Jet.update(_d,_mag); // update jet position |
JasonGuo | 8:661097776006 | 73 | _Ammo.update(); // update ammo position |
JasonGuo | 8:661097776006 | 74 | _Monster.update(); // update monster position |
JasonGuo | 8:661097776006 | 75 | check_hit_monster(pad); // check if the monster is killed |
JasonGuo | 8:661097776006 | 76 | check_Jet_collision(pad); // check if the jet crashed |
JasonGuo | 8:661097776006 | 77 | check_hit_wall(pad); // check if the monster hits the wall |
JasonGuo | 8:661097776006 | 78 | } |
JasonGuo | 8:661097776006 | 79 | |
JasonGuo | 8:661097776006 | 80 | //function to check the fire button |
JasonGuo | 8:661097776006 | 81 | void GameEngine::check_fire(Gamepad &pad) |
JasonGuo | 8:661097776006 | 82 | { |
JasonGuo | 8:661097776006 | 83 | // intialise the bullet if the fire button if pressed |
JasonGuo | 8:661097776006 | 84 | // the coordinates of the bullet is according to the coordinates of the jet |
JasonGuo | 8:661097776006 | 85 | if (pad.check_event(Gamepad::A_PRESSED) == true) |
JasonGuo | 8:661097776006 | 86 | { |
JasonGuo | 8:661097776006 | 87 | pad.tone(1000.0,0.1); |
JasonGuo | 8:661097776006 | 88 | Vector2D Jet_pos = _Jet.get_pos(); |
JasonGuo | 8:661097776006 | 89 | //printf("x=%f,y=%f\n", Jet_pos.x, Jet_pos.y); |
JasonGuo | 8:661097776006 | 90 | _Ammo.init(Jet_pos.x+7, Jet_pos.y+5); |
JasonGuo | 8:661097776006 | 91 | _A = 1; |
JasonGuo | 8:661097776006 | 92 | } |
JasonGuo | 8:661097776006 | 93 | } |
JasonGuo | 8:661097776006 | 94 | |
JasonGuo | 8:661097776006 | 95 | //function to check if the jet crashs |
JasonGuo | 8:661097776006 | 96 | void GameEngine::check_Jet_collision(Gamepad &pad) |
JasonGuo | 8:661097776006 | 97 | { |
JasonGuo | 8:661097776006 | 98 | Vector2D Jet_pos = _Jet.get_pos(); |
JasonGuo | 8:661097776006 | 99 | Vector2D Monster_pos = _Monster.get_pos(); |
JasonGuo | 8:661097776006 | 100 | //printf("Jet_x=%f,Jet_y=%f\n",Jet_pos.x,Jet_pos.y); |
JasonGuo | 8:661097776006 | 101 | //printf("M_x=%f,M_y=%f\n",Monster_pos.x, Monster_pos.y); |
JasonGuo | 8:661097776006 | 102 | |
JasonGuo | 9:bd53c6e90213 | 103 | // reset jet when the monster hits the jet |
JasonGuo | 8:661097776006 | 104 | if( |
JasonGuo | 8:661097776006 | 105 | (Jet_pos.x+13 > Monster_pos.x)&& // right |
JasonGuo | 8:661097776006 | 106 | (Jet_pos.x < Monster_pos.x+10)&& // left |
JasonGuo | 8:661097776006 | 107 | (Jet_pos.y+12 > Monster_pos.y)&& // top |
JasonGuo | 8:661097776006 | 108 | (Jet_pos.y < Monster_pos.y+10)) // bottom |
JasonGuo | 8:661097776006 | 109 | { |
JasonGuo | 8:661097776006 | 110 | life -= 1; |
JasonGuo | 9:bd53c6e90213 | 111 | pad.tone(1500.0,0.2); |
JasonGuo | 9:bd53c6e90213 | 112 | _Jet.init(); |
JasonGuo | 8:661097776006 | 113 | _Monster.init(); |
JasonGuo | 8:661097776006 | 114 | } |
JasonGuo | 8:661097776006 | 115 | } |
JasonGuo | 8:661097776006 | 116 | |
JasonGuo | 8:661097776006 | 117 | //function to check if the monster is killed |
JasonGuo | 8:661097776006 | 118 | void GameEngine::check_hit_monster(Gamepad &pad) |
JasonGuo | 8:661097776006 | 119 | { |
JasonGuo | 8:661097776006 | 120 | Vector2D Ammo_pos = _Ammo.get_pos(); |
JasonGuo | 8:661097776006 | 121 | Vector2D Monster_pos = _Monster.get_pos(); |
JasonGuo | 8:661097776006 | 122 | |
JasonGuo | 8:661097776006 | 123 | // monster diappears if the bullet hits the monster |
JasonGuo | 8:661097776006 | 124 | // set new monster |
JasonGuo | 8:661097776006 | 125 | if( |
JasonGuo | 8:661097776006 | 126 | (Ammo_pos.x+1 > Monster_pos.x)&& |
JasonGuo | 8:661097776006 | 127 | (Ammo_pos.y+1 >= Monster_pos.y)&& |
JasonGuo | 8:661097776006 | 128 | (Ammo_pos.y+1< Monster_pos.y+10)&& |
JasonGuo | 8:661097776006 | 129 | (_A ==1)) |
JasonGuo | 8:661097776006 | 130 | { |
JasonGuo | 8:661097776006 | 131 | pad.tone(100.0,0.2); |
JasonGuo | 8:661097776006 | 132 | _A = 0; //Ammo disappears after hit the monster |
JasonGuo | 8:661097776006 | 133 | monster_number -= 1; |
JasonGuo | 8:661097776006 | 134 | _Monster.init(); |
JasonGuo | 8:661097776006 | 135 | _Jet.~Jet(); |
JasonGuo | 8:661097776006 | 136 | } |
JasonGuo | 8:661097776006 | 137 | // monster reaches the left edge of the screen |
JasonGuo | 8:661097776006 | 138 | // can miss 3 monsters maximum |
JasonGuo | 8:661097776006 | 139 | else if (Monster_pos.x+9 <= 1) |
JasonGuo | 8:661097776006 | 140 | { |
JasonGuo | 8:661097776006 | 141 | life -= 1; |
JasonGuo | 8:661097776006 | 142 | pad.tone(300.0,0.2); |
JasonGuo | 8:661097776006 | 143 | _Monster.init(); |
JasonGuo | 8:661097776006 | 144 | } |
JasonGuo | 8:661097776006 | 145 | } |
JasonGuo | 8:661097776006 | 146 | |
JasonGuo | 8:661097776006 | 147 | //function to check if the monster hits the wall |
JasonGuo | 8:661097776006 | 148 | void GameEngine::check_hit_wall(Gamepad &pad) |
JasonGuo | 8:661097776006 | 149 | { |
JasonGuo | 8:661097776006 | 150 | Vector2D Monster_pos = _Monster.get_pos(); |
JasonGuo | 8:661097776006 | 151 | Vector2D Monster_velocity = _Monster.get_velocity(); |
JasonGuo | 8:661097776006 | 152 | |
JasonGuo | 8:661097776006 | 153 | // the monster bounces back when it hits the wall |
JasonGuo | 8:661097776006 | 154 | if(Monster_pos.y <= 0) |
JasonGuo | 8:661097776006 | 155 | { |
JasonGuo | 8:661097776006 | 156 | Monster_pos.y = 0; // top |
JasonGuo | 8:661097776006 | 157 | Monster_velocity.y = -Monster_velocity.y; |
JasonGuo | 9:bd53c6e90213 | 158 | pad.tone(500.0,0.2); |
JasonGuo | 8:661097776006 | 159 | } |
JasonGuo | 8:661097776006 | 160 | else if(Monster_pos.y >= HEIGHT - 8) |
JasonGuo | 8:661097776006 | 161 | { |
JasonGuo | 8:661097776006 | 162 | Monster_pos.y = HEIGHT - 8; // bottom |
JasonGuo | 8:661097776006 | 163 | Monster_velocity.y = -Monster_velocity.y; |
JasonGuo | 8:661097776006 | 164 | pad.tone(500.0,0.2); |
JasonGuo | 8:661097776006 | 165 | } |
JasonGuo | 8:661097776006 | 166 | _Monster.set_velocity(Monster_velocity); // set velocity |
JasonGuo | 8:661097776006 | 167 | _Monster.set_pos(Monster_pos); //monster stays on the screen |
JasonGuo | 8:661097776006 | 168 | } |
JasonGuo | 8:661097776006 | 169 | |
JasonGuo | 8:661097776006 | 170 | //function to get the value of life |
JasonGuo | 8:661097776006 | 171 | int GameEngine::get_life() |
JasonGuo | 8:661097776006 | 172 | { |
JasonGuo | 8:661097776006 | 173 | return life; |
JasonGuo | 8:661097776006 | 174 | } |
JasonGuo | 8:661097776006 | 175 | |
JasonGuo | 8:661097776006 | 176 | //function to get the monster number |
JasonGuo | 8:661097776006 | 177 | int GameEngine::get_monster_number() |
JasonGuo | 8:661097776006 | 178 | { |
JasonGuo | 8:661097776006 | 179 | return monster_number; |
JasonGuo | 8:661097776006 | 180 | } |