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
TanksEngine/TanksEngine.cpp@11:4e2eb64031a0, 2019-04-13 (annotated)
- Committer:
- el17mcd
- Date:
- Sat Apr 13 16:31:43 2019 +0000
- Revision:
- 11:4e2eb64031a0
- Parent:
- 7:a3ccabdebe2e
- Child:
- 12:9e6d5d0a0c82
!Can take left tank's turn including movement and firing turret. This transitions into "projectile phase" which ends when the projectile goes out of bounds (off screen). Objects instantiated inside game engine to tidy main.cpp.
Who changed what in which revision?
| User | Revision | Line number | New contents of line | 
|---|---|---|---|
| el17mcd | 7:a3ccabdebe2e | 1 | /* TanksEngine.cpp | 
| el17mcd | 7:a3ccabdebe2e | 2 | Game Engine | 
| el17mcd | 7:a3ccabdebe2e | 3 | 9.4.19 | 
| el17mcd | 7:a3ccabdebe2e | 4 | */ | 
| el17mcd | 7:a3ccabdebe2e | 5 | #include "TanksEngine.h" | 
| el17mcd | 7:a3ccabdebe2e | 6 | #include "Projectile.h" | 
| el17mcd | 7:a3ccabdebe2e | 7 | #include "TankL.h" | 
| el17mcd | 11:4e2eb64031a0 | 8 | |
| el17mcd | 7:a3ccabdebe2e | 9 | TanksEngine::TanksEngine() | 
| el17mcd | 11:4e2eb64031a0 | 10 | |
| el17mcd | 7:a3ccabdebe2e | 11 | { | 
| el17mcd | 7:a3ccabdebe2e | 12 | |
| el17mcd | 7:a3ccabdebe2e | 13 | } | 
| el17mcd | 7:a3ccabdebe2e | 14 | |
| el17mcd | 7:a3ccabdebe2e | 15 | TanksEngine::~TanksEngine() | 
| el17mcd | 7:a3ccabdebe2e | 16 | { | 
| el17mcd | 7:a3ccabdebe2e | 17 | |
| el17mcd | 7:a3ccabdebe2e | 18 | } | 
| el17mcd | 11:4e2eb64031a0 | 19 | void TanksEngine::initgame() | 
| el17mcd | 11:4e2eb64031a0 | 20 | { | 
| el17mcd | 11:4e2eb64031a0 | 21 | _tankl.set_position(0, 0); | 
| el17mcd | 11:4e2eb64031a0 | 22 | _tankl.set_speed(1); | 
| el17mcd | 11:4e2eb64031a0 | 23 | _turn = 1; | 
| el17mcd | 11:4e2eb64031a0 | 24 | _fire = false; | 
| el17mcd | 11:4e2eb64031a0 | 25 | _turn_alternater = 0; | 
| el17mcd | 11:4e2eb64031a0 | 26 | _turn_timer = 10; | 
| el17mcd | 11:4e2eb64031a0 | 27 | } | 
| el17mcd | 11:4e2eb64031a0 | 28 | |
| el17mcd | 11:4e2eb64031a0 | 29 | void TanksEngine::left_tank_turn(Gamepad &pad, N5110 &lcd) | 
| el17mcd | 11:4e2eb64031a0 | 30 | { | 
| el17mcd | 11:4e2eb64031a0 | 31 | _read_input(pad); | 
| el17mcd | 11:4e2eb64031a0 | 32 | _tankl.set_angle(100 - _angle ); | 
| el17mcd | 11:4e2eb64031a0 | 33 | _tankl.move_position(_move); | 
| el17mcd | 11:4e2eb64031a0 | 34 | _left_tank_shoots(); | 
| el17mcd | 11:4e2eb64031a0 | 35 | _tankl.draw(lcd); | 
| el17mcd | 11:4e2eb64031a0 | 36 | } | 
| el17mcd | 11:4e2eb64031a0 | 37 | |
| el17mcd | 11:4e2eb64031a0 | 38 | void TanksEngine::right_tank_turn(Gamepad &pad, N5110 &lcd) | 
| el17mcd | 11:4e2eb64031a0 | 39 | { | 
| el17mcd | 11:4e2eb64031a0 | 40 | _read_input(pad); | 
| el17mcd | 11:4e2eb64031a0 | 41 | _tankl.draw(lcd); | 
| el17mcd | 11:4e2eb64031a0 | 42 | } | 
| el17mcd | 11:4e2eb64031a0 | 43 | |
| el17mcd | 11:4e2eb64031a0 | 44 | |
| el17mcd | 11:4e2eb64031a0 | 45 | void TanksEngine::_left_tank_shoots() | 
| el17mcd | 11:4e2eb64031a0 | 46 | { | 
| el17mcd | 11:4e2eb64031a0 | 47 | if (_fire == true) { | 
| el17mcd | 11:4e2eb64031a0 | 48 | int angle = _angle; // change to an int | 
| el17mcd | 11:4e2eb64031a0 | 49 | angle = (-angle + 90) % 360; // gamepad's convention is N = 0 clockwise changed into E = 0 anticlockwise | 
| el17mcd | 11:4e2eb64031a0 | 50 | int x = _tankl.get_position_x() + 5; | 
| el17mcd | 11:4e2eb64031a0 | 51 | int y = _tankl.get_position_y() + 4; | 
| el17mcd | 11:4e2eb64031a0 | 52 | _proj.set_launch_parameters(x, y,angle, 1.3, 0.02, 0.00); // set launch parameters for projectile based on tank/game parameters | 
| el17mcd | 11:4e2eb64031a0 | 53 | _turn = 2; // change to projectile phase | 
| el17mcd | 11:4e2eb64031a0 | 54 | } | 
| el17mcd | 11:4e2eb64031a0 | 55 | } | 
| el17mcd | 11:4e2eb64031a0 | 56 | |
| el17mcd | 11:4e2eb64031a0 | 57 | void TanksEngine::projectile_phase(N5110 &lcd) | 
| el17mcd | 11:4e2eb64031a0 | 58 | { | 
| el17mcd | 11:4e2eb64031a0 | 59 | if (_proj.check_boundaries() == true) { _change_turn(); } | 
| el17mcd | 11:4e2eb64031a0 | 60 | _proj.update_flight(); | 
| el17mcd | 11:4e2eb64031a0 | 61 | _tankl.draw(lcd); | 
| el17mcd | 11:4e2eb64031a0 | 62 | _proj.draw(lcd); | 
| el17mcd | 11:4e2eb64031a0 | 63 | } | 
| el17mcd | 11:4e2eb64031a0 | 64 | |
| el17mcd | 11:4e2eb64031a0 | 65 | void TanksEngine::_change_turn() | 
| el17mcd | 11:4e2eb64031a0 | 66 | { | 
| el17mcd | 11:4e2eb64031a0 | 67 | _turn_alternater = !_turn_alternater; | 
| el17mcd | 11:4e2eb64031a0 | 68 | if (_turn_alternater == 1) { _turn = 3; } | 
| el17mcd | 11:4e2eb64031a0 | 69 | else { _turn = 1; } | 
| el17mcd | 11:4e2eb64031a0 | 70 | } | 
| el17mcd | 11:4e2eb64031a0 | 71 | |
| el17mcd | 11:4e2eb64031a0 | 72 | void TanksEngine::_read_input(Gamepad &pad) | 
| el17mcd | 11:4e2eb64031a0 | 73 | { | 
| el17mcd | 11:4e2eb64031a0 | 74 | |
| el17mcd | 11:4e2eb64031a0 | 75 | _angle = pad.get_angle(); | 
| el17mcd | 11:4e2eb64031a0 | 76 | if (pad.check_event(Gamepad::L_PRESSED) == true) { | 
| el17mcd | 11:4e2eb64031a0 | 77 | _move = -1 * !_move; // toggle movement to the left | 
| el17mcd | 11:4e2eb64031a0 | 78 | } | 
| el17mcd | 11:4e2eb64031a0 | 79 | else if (pad.check_event(Gamepad::R_PRESSED) == true) { | 
| el17mcd | 11:4e2eb64031a0 | 80 | _move = 1 * !_move; // toggle movement to the right | 
| el17mcd | 11:4e2eb64031a0 | 81 | } | 
| el17mcd | 11:4e2eb64031a0 | 82 | if (pad.check_event(Gamepad::A_PRESSED) == true) { _fire = true; } | 
| el17mcd | 11:4e2eb64031a0 | 83 | else { _fire = false; } | 
| el17mcd | 11:4e2eb64031a0 | 84 | } | 
| el17mcd | 11:4e2eb64031a0 | 85 | |
| el17mcd | 11:4e2eb64031a0 | 86 | bool TanksEngine::_collision_pl(TankL _tankl, Projectile _proj) | 
| el17mcd | 7:a3ccabdebe2e | 87 | { | 
| el17mcd | 7:a3ccabdebe2e | 88 | for (int i0 = 0; i0 < 4; i0++) { | 
| el17mcd | 7:a3ccabdebe2e | 89 | for (int i1 = 0; i1 < 40; i1++) { | 
| el17mcd | 11:4e2eb64031a0 | 90 | if (_proj.get_hitbox(i0) == _tankl.get_hitbox(i1)) {return true;} | 
| el17mcd | 7:a3ccabdebe2e | 91 | } | 
| el17mcd | 7:a3ccabdebe2e | 92 | } | 
| el17mcd | 7:a3ccabdebe2e | 93 | return false; | 
| el17mcd | 7:a3ccabdebe2e | 94 | } | 
| el17mcd | 7:a3ccabdebe2e | 95 | |
| el17mcd | 11:4e2eb64031a0 | 96 | int TanksEngine::get_turn() | 
| el17mcd | 11:4e2eb64031a0 | 97 | { | 
| el17mcd | 11:4e2eb64031a0 | 98 | return _turn; | 
| el17mcd | 11:4e2eb64031a0 | 99 | } | 
| el17mcd | 11:4e2eb64031a0 | 100 |