Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
GameEngine/GameEngine.cpp@2:88019d96e1da, 2019-04-24 (annotated)
- Committer:
- adat80
- Date:
- Wed Apr 24 12:38:53 2019 +0000
- Revision:
- 2:88019d96e1da
- Parent:
- 1:3916f272663e
- Child:
- 3:97cd7b3d89d0
game with levels changing and, currency;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| adat80 | 1:3916f272663e | 1 | #include "GameEngine.h" |
| adat80 | 1:3916f272663e | 2 | |
| adat80 | 2:88019d96e1da | 3 | //enum Action { waiting, moving, attacking, dying }; |
| adat80 | 2:88019d96e1da | 4 | //enum Vegetable { Potato, Carrot, Onion }; |
| adat80 | 2:88019d96e1da | 5 | |
| adat80 | 2:88019d96e1da | 6 | int bulletSymbol[8][4] = { |
| adat80 | 2:88019d96e1da | 7 | { 0,1,1,0 }, |
| 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 | { 1,1,1,1 }, |
| adat80 | 2:88019d96e1da | 13 | { 0,0,0,0 }, |
| adat80 | 2:88019d96e1da | 14 | { 1,1,1,1 }, |
| adat80 | 2:88019d96e1da | 15 | }; |
| adat80 | 2:88019d96e1da | 16 | |
| adat80 | 2:88019d96e1da | 17 | int healthSymbol[5][5] = { |
| adat80 | 2:88019d96e1da | 18 | { 1,1,1,1,1 }, |
| adat80 | 2:88019d96e1da | 19 | { 1,1,0,1,1 }, |
| adat80 | 2:88019d96e1da | 20 | { 1,0,0,0,1 }, |
| adat80 | 2:88019d96e1da | 21 | { 1,1,0,1,1 }, |
| adat80 | 2:88019d96e1da | 22 | { 1,1,1,1,1 }, |
| adat80 | 2:88019d96e1da | 23 | }; |
| adat80 | 2:88019d96e1da | 24 | |
| adat80 | 2:88019d96e1da | 25 | int shot[5][5] = { |
| adat80 | 2:88019d96e1da | 26 | { 0,0,1,0,0 }, |
| adat80 | 2:88019d96e1da | 27 | { 0,1,1,1,0 }, |
| adat80 | 2:88019d96e1da | 28 | { 1,1,1,1,1 }, |
| adat80 | 2:88019d96e1da | 29 | { 0,1,1,1,0 }, |
| adat80 | 2:88019d96e1da | 30 | { 0,0,1,0,0 }, |
| adat80 | 2:88019d96e1da | 31 | }; |
| adat80 | 2:88019d96e1da | 32 | |
| adat80 | 1:3916f272663e | 33 | |
| adat80 | 1:3916f272663e | 34 | GameEngine::GameEngine() |
| adat80 | 1:3916f272663e | 35 | { |
| adat80 | 1:3916f272663e | 36 | |
| adat80 | 1:3916f272663e | 37 | } |
| adat80 | 1:3916f272663e | 38 | |
| adat80 | 1:3916f272663e | 39 | GameEngine::~GameEngine() |
| adat80 | 1:3916f272663e | 40 | { |
| adat80 | 1:3916f272663e | 41 | |
| adat80 | 1:3916f272663e | 42 | } |
| adat80 | 1:3916f272663e | 43 | |
| adat80 | 1:3916f272663e | 44 | void GameEngine::init(int CrossHairsSpeed, int fps) |
| adat80 | 1:3916f272663e | 45 | { |
| adat80 | 1:3916f272663e | 46 | // initialise the game parameters |
| adat80 | 1:3916f272663e | 47 | _fps = fps; |
| adat80 | 2:88019d96e1da | 48 | _levelNumber = 3; |
| adat80 | 2:88019d96e1da | 49 | _money = 0.0f; |
| 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 | 2:88019d96e1da | 80 | char money[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 | 2:88019d96e1da | 83 | int length = sprintf(money,"$%.1f",_money); // 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 | 2:88019d96e1da | 86 | lcd.printString(money,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 | 2:88019d96e1da | 93 | //draw ammo symbol |
| adat80 | 2:88019d96e1da | 94 | // x origin, y origin, rows, cols, sprite |
| adat80 | 2:88019d96e1da | 95 | lcd.drawSprite((WIDTH/4)*3,0,8,4,(int *)bulletSymbol); |
| adat80 | 1:3916f272663e | 96 | |
| adat80 | 1:3916f272663e | 97 | // draw the elements in the LCD buffer |
| adat80 | 1:3916f272663e | 98 | /* |
| adat80 | 1:3916f272663e | 99 | _enemy.draw(lcd); |
| adat80 | 1:3916f272663e | 100 | _enemy2.draw(lcd); |
| adat80 | 1:3916f272663e | 101 | */ |
| adat80 | 1:3916f272663e | 102 | |
| adat80 | 1:3916f272663e | 103 | |
| adat80 | 1:3916f272663e | 104 | |
| adat80 | 1:3916f272663e | 105 | |
| adat80 | 1:3916f272663e | 106 | for (int i=0; i < _levelNumber; i++) { |
| adat80 | 1:3916f272663e | 107 | _enemies[i].draw(lcd); |
| adat80 | 1:3916f272663e | 108 | } |
| adat80 | 1:3916f272663e | 109 | |
| adat80 | 2:88019d96e1da | 110 | _crossHairs.draw(lcd); |
| adat80 | 1:3916f272663e | 111 | } |
| adat80 | 1:3916f272663e | 112 | |
| adat80 | 1:3916f272663e | 113 | void GameEngine::update(Gamepad &pad) |
| adat80 | 1:3916f272663e | 114 | { |
| adat80 | 1:3916f272663e | 115 | _level.update(_fps); |
| adat80 | 1:3916f272663e | 116 | _crossHairs.update(_angle,_mag, _fps); |
| adat80 | 1:3916f272663e | 117 | /* |
| adat80 | 1:3916f272663e | 118 | _enemy.update(); |
| adat80 | 1:3916f272663e | 119 | _enemy2.update(); |
| adat80 | 1:3916f272663e | 120 | */ |
| adat80 | 1:3916f272663e | 121 | |
| adat80 | 1:3916f272663e | 122 | |
| adat80 | 1:3916f272663e | 123 | for (int i=0; i < _levelNumber; i++) { |
| adat80 | 2:88019d96e1da | 124 | _enemies[i].update(_fps); |
| adat80 | 1:3916f272663e | 125 | } |
| adat80 | 1:3916f272663e | 126 | |
| adat80 | 1:3916f272663e | 127 | if ( pad.check_event(Gamepad::B_PRESSED) == true) { |
| adat80 | 1:3916f272663e | 128 | fireShot(pad); |
| adat80 | 2:88019d96e1da | 129 | } else if ( pad.check_event(Gamepad::A_PRESSED) == true) { |
| adat80 | 2:88019d96e1da | 130 | fireShot(pad); |
| adat80 | 1:3916f272663e | 131 | } |
| adat80 | 1:3916f272663e | 132 | |
| adat80 | 1:3916f272663e | 133 | |
| adat80 | 1:3916f272663e | 134 | |
| adat80 | 1:3916f272663e | 135 | } |
| adat80 | 1:3916f272663e | 136 | |
| adat80 | 1:3916f272663e | 137 | void GameEngine::fireShot(Gamepad &gpad) |
| adat80 | 1:3916f272663e | 138 | { |
| adat80 | 2:88019d96e1da | 139 | |
| adat80 | 2:88019d96e1da | 140 | |
| adat80 | 2:88019d96e1da | 141 | |
| adat80 | 1:3916f272663e | 142 | Vector2D shotLoc = _crossHairs.get_pos(); |
| adat80 | 1:3916f272663e | 143 | for(int i = 0; i < _levelNumber; i++) { |
| adat80 | 2:88019d96e1da | 144 | if (_enemies[i].get_alive()) { |
| adat80 | 2:88019d96e1da | 145 | Vector2D enemyLoc = _enemies[i].get_pos(); |
| adat80 | 2:88019d96e1da | 146 | if (abs(enemyLoc.x - shotLoc.x) < 4) { |
| adat80 | 2:88019d96e1da | 147 | if (abs(enemyLoc.y - shotLoc.y) < 4) { |
| adat80 | 2:88019d96e1da | 148 | _killCount = _killCount + 1; |
| adat80 | 2:88019d96e1da | 149 | _enemies[i].set_alive(false); |
| adat80 | 2:88019d96e1da | 150 | float moneyEarnt = _enemies[i].get_value(); |
| adat80 | 2:88019d96e1da | 151 | _money = _money + moneyEarnt; |
| adat80 | 2:88019d96e1da | 152 | Action myAc; |
| adat80 | 2:88019d96e1da | 153 | myAc = dying; |
| adat80 | 2:88019d96e1da | 154 | _enemies[i].set_current_action(myAc); |
| adat80 | 2:88019d96e1da | 155 | |
| adat80 | 2:88019d96e1da | 156 | |
| adat80 | 2:88019d96e1da | 157 | if (_killCount == _levelNumber) { |
| adat80 | 2:88019d96e1da | 158 | Vector2D posch = {WIDTH/2, HEIGHT/2}; |
| adat80 | 2:88019d96e1da | 159 | _crossHairs.set_pos(posch); |
| 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 |