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
- Committer:
- adat80
- Date:
- 2019-05-05
- Revision:
- 4:87f3f3e5cdd9
- Parent:
- 3:97cd7b3d89d0
- Child:
- 5:8bd09c675f28
File content as of revision 4:87f3f3e5cdd9:
#include "GameEngine.h"
GameEngine::GameEngine()
{
}
GameEngine::~GameEngine()
{
}
void GameEngine::init(int CrossHairsSpeed, int fps)
{
// initialise the game parameters
_game_over = false;
_fps = fps;
_frame = 0;
_levelNumber = 1;
_killCount = 0;
_wall.init(100);
_crossHairs.init(CrossHairsSpeed);
srand(time(NULL));
_enemies = _level.init(_levelNumber);
}
void GameEngine::read_input(Gamepad &pad)
{
_angle = pad.get_angle();
_mag = pad.get_mag();
}
void GameEngine::draw(N5110 &lcd)
{
char level[14]; // each character is 6 pixels wide, screen is 84 pixels (84/6 = 14)
// so can display a string of a maximum 14 characters in length
// or create formatted strings - ensure they aren't more than 14 characters long
int length = sprintf(level,"lvl:%i",_levelNumber); // print formatted data to buffer
// it is important the format specifier ensures the length will fit in the buffer
if (length <= 14) { // if string will fit on display (assuming printing at x=0)
lcd.printString(level,23,0);
}
//draw wall
_wall.draw(lcd);
//draw enemies
for (int i=0; i < _level.get_number_of_enemies(); i++) {
_enemies[i].draw(lcd);
}
_crossHairs.draw(lcd);
}
void GameEngine::update(Gamepad &pad)
{
_frame = _frame + 1;
if (_frame%(_fps/2) == 0) {
for (int i=0; i < _level.get_number_of_enemies(); i++) {
if(_enemies[i].get_current_action() == attacking) {
_wall.take_damage(1);
if (_wall.get_wall_health() < 0) {
_game_over = true;
}
}
}
}
_level.update(_fps);
_crossHairs.update(_angle,_mag, _fps);
/*
_enemy.update();
_enemy2.update();
*/
for (int i=0; i < _level.get_number_of_enemies(); i++) {
_enemies[i].update(_fps);
}
if ( pad.check_event(Gamepad::B_PRESSED) == true) {
fireShot(pad);
} else if ( pad.check_event(Gamepad::A_PRESSED) == true) {
fireShot(pad);
}
}
void GameEngine::fireShot(Gamepad &gpad)
{
gpad.tone(400, 0.1);
Vector2D shotLoc = _crossHairs.get_pos();
for(int i = 0; i < _level.get_number_of_enemies(); i++) {
if (_enemies[i].get_alive()) {
was_enemy_shot(i, shotLoc);
}
}
}
void GameEngine::was_enemy_shot(int i, Vector2D shotLoc)
{
Vector2D enemyLoc = _enemies[i].get_pos();
if (abs(enemyLoc.x - shotLoc.x) < 4 && abs(enemyLoc.y - shotLoc.y) < 4) {
_killCount = _killCount + 1;
_enemies[i].set_alive(false);
Action myAc;
myAc = dying;
_enemies[i].set_current_action(myAc);
if (_killCount == _level.get_number_of_enemies()) {
_killCount = 0;
_levelNumber = _levelNumber + 1;
_enemies = _level.init(_levelNumber);
}
}
}
bool GameEngine::get_game_over() {
return _game_over;
}
void GameEngine::set_game_over(bool is_game_over) {
_game_over = is_game_over;
}