ELEC2645 (2018/19) / Mbed 2 deprecated el17aj

Dependencies:   mbed

Committer:
adat80
Date:
Sun Apr 28 16:55:24 2019 +0000
Revision:
3:97cd7b3d89d0
Parent:
2:88019d96e1da
Child:
4:87f3f3e5cdd9
Game menu and loop to re play game

Who changed what in which revision?

UserRevisionLine numberNew contents of line
adat80 1:3916f272663e 1 #include "GameEngine.h"
adat80 1:3916f272663e 2
adat80 3:97cd7b3d89d0 3
adat80 2:88019d96e1da 4
adat80 2:88019d96e1da 5 int bulletSymbol[8][4] = {
adat80 2:88019d96e1da 6 { 0,1,1,0 },
adat80 2:88019d96e1da 7 { 1,1,1,1 },
adat80 2:88019d96e1da 8 { 1,1,1,1 },
adat80 2:88019d96e1da 9 { 1,1,1,1 },
adat80 2:88019d96e1da 10 { 1,1,1,1 },
adat80 2:88019d96e1da 11 { 1,1,1,1 },
adat80 2:88019d96e1da 12 { 0,0,0,0 },
adat80 2:88019d96e1da 13 { 1,1,1,1 },
adat80 2:88019d96e1da 14 };
adat80 2:88019d96e1da 15
adat80 2:88019d96e1da 16 int healthSymbol[5][5] = {
adat80 2:88019d96e1da 17 { 1,1,1,1,1 },
adat80 2:88019d96e1da 18 { 1,1,0,1,1 },
adat80 2:88019d96e1da 19 { 1,0,0,0,1 },
adat80 2:88019d96e1da 20 { 1,1,0,1,1 },
adat80 2:88019d96e1da 21 { 1,1,1,1,1 },
adat80 2:88019d96e1da 22 };
adat80 2:88019d96e1da 23
adat80 2:88019d96e1da 24 int shot[5][5] = {
adat80 2:88019d96e1da 25 { 0,0,1,0,0 },
adat80 2:88019d96e1da 26 { 0,1,1,1,0 },
adat80 2:88019d96e1da 27 { 1,1,1,1,1 },
adat80 2:88019d96e1da 28 { 0,1,1,1,0 },
adat80 2:88019d96e1da 29 { 0,0,1,0,0 },
adat80 2:88019d96e1da 30 };
adat80 2:88019d96e1da 31
adat80 1:3916f272663e 32
adat80 1:3916f272663e 33 GameEngine::GameEngine()
adat80 1:3916f272663e 34 {
adat80 1:3916f272663e 35
adat80 1:3916f272663e 36 }
adat80 1:3916f272663e 37
adat80 1:3916f272663e 38 GameEngine::~GameEngine()
adat80 1:3916f272663e 39 {
adat80 1:3916f272663e 40
adat80 1:3916f272663e 41 }
adat80 1:3916f272663e 42
adat80 1:3916f272663e 43 void GameEngine::init(int CrossHairsSpeed, int fps)
adat80 1:3916f272663e 44 {
adat80 1:3916f272663e 45 // initialise the game parameters
adat80 3:97cd7b3d89d0 46 _game_over = false;
adat80 1:3916f272663e 47 _fps = fps;
adat80 3:97cd7b3d89d0 48 _frame = 0;
adat80 3:97cd7b3d89d0 49 _levelNumber = 1;
adat80 2:88019d96e1da 50 _killCount = 0;
adat80 1:3916f272663e 51
adat80 2:88019d96e1da 52 _wall.init(100);
adat80 1:3916f272663e 53 _crossHairs.init(CrossHairsSpeed);
adat80 1:3916f272663e 54
adat80 1:3916f272663e 55
adat80 1:3916f272663e 56
adat80 1:3916f272663e 57
adat80 1:3916f272663e 58 srand(time(NULL));
adat80 1:3916f272663e 59
adat80 1:3916f272663e 60 _enemies = _level.init(_levelNumber);
adat80 1:3916f272663e 61
adat80 1:3916f272663e 62
adat80 1:3916f272663e 63
adat80 1:3916f272663e 64
adat80 1:3916f272663e 65
adat80 1:3916f272663e 66
adat80 1:3916f272663e 67
adat80 1:3916f272663e 68 }
adat80 1:3916f272663e 69
adat80 1:3916f272663e 70 void GameEngine::read_input(Gamepad &pad)
adat80 1:3916f272663e 71 {
adat80 1:3916f272663e 72 _angle = pad.get_angle();
adat80 1:3916f272663e 73 _mag = pad.get_mag();
adat80 1:3916f272663e 74 }
adat80 1:3916f272663e 75
adat80 1:3916f272663e 76 void GameEngine::draw(N5110 &lcd)
adat80 1:3916f272663e 77 {
adat80 1:3916f272663e 78
adat80 1:3916f272663e 79
adat80 3:97cd7b3d89d0 80 char level[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
adat80 2:88019d96e1da 81 // so can display a string of a maximum 14 characters in length
adat80 2:88019d96e1da 82 // or create formatted strings - ensure they aren't more than 14 characters long
adat80 3:97cd7b3d89d0 83 int length = sprintf(level,"lvl: %i",_levelNumber); // print formatted data to buffer
adat80 2:88019d96e1da 84 // it is important the format specifier ensures the length will fit in the buffer
adat80 2:88019d96e1da 85 if (length <= 14) { // if string will fit on display (assuming printing at x=0)
adat80 3:97cd7b3d89d0 86 lcd.printString(level,23,0);
adat80 2:88019d96e1da 87 }
adat80 2:88019d96e1da 88
adat80 2:88019d96e1da 89
adat80 2:88019d96e1da 90 //draw wall
adat80 2:88019d96e1da 91 _wall.draw(lcd);
adat80 2:88019d96e1da 92
adat80 1:3916f272663e 93
adat80 1:3916f272663e 94
adat80 3:97cd7b3d89d0 95 //draw enemies
adat80 3:97cd7b3d89d0 96 for (int i=0; i < _level.get_number_of_enemies(); i++) {
adat80 1:3916f272663e 97 _enemies[i].draw(lcd);
adat80 1:3916f272663e 98 }
adat80 1:3916f272663e 99
adat80 2:88019d96e1da 100 _crossHairs.draw(lcd);
adat80 1:3916f272663e 101 }
adat80 1:3916f272663e 102
adat80 1:3916f272663e 103 void GameEngine::update(Gamepad &pad)
adat80 1:3916f272663e 104 {
adat80 3:97cd7b3d89d0 105 _frame = _frame + 1;
adat80 3:97cd7b3d89d0 106 if (_frame%(_fps/2) == 0) {
adat80 3:97cd7b3d89d0 107
adat80 3:97cd7b3d89d0 108 for (int i=0; i < _level.get_number_of_enemies(); i++) {
adat80 3:97cd7b3d89d0 109 if(_enemies[i].get_current_action() == attacking) {
adat80 3:97cd7b3d89d0 110 _wall.take_damage(1);
adat80 3:97cd7b3d89d0 111 if (_wall.get_wall_health() < 0) {
adat80 3:97cd7b3d89d0 112 _game_over = true;
adat80 3:97cd7b3d89d0 113 }
adat80 3:97cd7b3d89d0 114 }
adat80 3:97cd7b3d89d0 115 }
adat80 3:97cd7b3d89d0 116 }
adat80 3:97cd7b3d89d0 117
adat80 3:97cd7b3d89d0 118
adat80 1:3916f272663e 119 _level.update(_fps);
adat80 1:3916f272663e 120 _crossHairs.update(_angle,_mag, _fps);
adat80 1:3916f272663e 121 /*
adat80 1:3916f272663e 122 _enemy.update();
adat80 1:3916f272663e 123 _enemy2.update();
adat80 1:3916f272663e 124 */
adat80 1:3916f272663e 125
adat80 1:3916f272663e 126
adat80 3:97cd7b3d89d0 127 for (int i=0; i < _level.get_number_of_enemies(); i++) {
adat80 2:88019d96e1da 128 _enemies[i].update(_fps);
adat80 1:3916f272663e 129 }
adat80 1:3916f272663e 130
adat80 1:3916f272663e 131 if ( pad.check_event(Gamepad::B_PRESSED) == true) {
adat80 1:3916f272663e 132 fireShot(pad);
adat80 2:88019d96e1da 133 } else if ( pad.check_event(Gamepad::A_PRESSED) == true) {
adat80 2:88019d96e1da 134 fireShot(pad);
adat80 1:3916f272663e 135 }
adat80 1:3916f272663e 136
adat80 1:3916f272663e 137
adat80 1:3916f272663e 138
adat80 1:3916f272663e 139 }
adat80 1:3916f272663e 140
adat80 1:3916f272663e 141 void GameEngine::fireShot(Gamepad &gpad)
adat80 1:3916f272663e 142 {
adat80 2:88019d96e1da 143
adat80 2:88019d96e1da 144
adat80 2:88019d96e1da 145
adat80 1:3916f272663e 146 Vector2D shotLoc = _crossHairs.get_pos();
adat80 3:97cd7b3d89d0 147 for(int i = 0; i < _level.get_number_of_enemies(); i++) {
adat80 2:88019d96e1da 148 if (_enemies[i].get_alive()) {
adat80 2:88019d96e1da 149 Vector2D enemyLoc = _enemies[i].get_pos();
adat80 2:88019d96e1da 150 if (abs(enemyLoc.x - shotLoc.x) < 4) {
adat80 2:88019d96e1da 151 if (abs(enemyLoc.y - shotLoc.y) < 4) {
adat80 2:88019d96e1da 152 _killCount = _killCount + 1;
adat80 2:88019d96e1da 153 _enemies[i].set_alive(false);
adat80 2:88019d96e1da 154 Action myAc;
adat80 2:88019d96e1da 155 myAc = dying;
adat80 2:88019d96e1da 156 _enemies[i].set_current_action(myAc);
adat80 2:88019d96e1da 157
adat80 2:88019d96e1da 158
adat80 3:97cd7b3d89d0 159 if (_killCount == _level.get_number_of_enemies()) {
adat80 2:88019d96e1da 160 _killCount = 0;
adat80 2:88019d96e1da 161 _levelNumber = _levelNumber + 1;
adat80 2:88019d96e1da 162 _enemies = _level.init(_levelNumber);
adat80 2:88019d96e1da 163
adat80 2:88019d96e1da 164 }
adat80 2:88019d96e1da 165
adat80 2:88019d96e1da 166 }
adat80 1:3916f272663e 167 }
adat80 1:3916f272663e 168 }
adat80 1:3916f272663e 169 }
adat80 1:3916f272663e 170 }
adat80 1:3916f272663e 171
adat80 3:97cd7b3d89d0 172
adat80 3:97cd7b3d89d0 173
adat80 3:97cd7b3d89d0 174 bool GameEngine::get_game_over() {
adat80 3:97cd7b3d89d0 175 return _game_over;
adat80 3:97cd7b3d89d0 176
adat80 3:97cd7b3d89d0 177 }
adat80 3:97cd7b3d89d0 178 void GameEngine::set_game_over(bool is_game_over) {
adat80 3:97cd7b3d89d0 179 _game_over = is_game_over;
adat80 3:97cd7b3d89d0 180 }