The library for the game engine

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?

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