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: C12832 FXOS8700Q mbed-rtos mbed
Game.cpp
- Committer:
- co838_gtvl2
- Date:
- 2016-02-15
- Revision:
- 0:9ec880239b3c
- Child:
- 1:c6734b909bf0
File content as of revision 0:9ec880239b3c:
#include "Game.h" #if defined _DEBUG Serial host(USBTX, USBRX); // Serial Host #endif Game::Game() : _thread(&Game::threader, this, osPriorityNormal,1024) { #if defined _DEBUG host.baud(38400); #endif this->player = new Player(); this->lcd = new C12832(D11, D13, D12, D7, D10); this->lcd->set_auto_up(0); this->accel = new FXOS8700Q_acc(PTE25, PTE24, FXOS8700CQ_SLAVE_ADDR1); this->accel->enable(); this->accel->getY(&this->steadyPosition); this->asteroids = std::list<Asteroid*>(); this->_thread.signal_set(START_THREAD); } Game::~Game() { this->accel->disable(); this->_thread.terminate(); this->lcd->rect(this->player->getX() - 2, this->player->getY() - 2, this->player->getX() + 3, this->player->getY() + 3, 1); this->lcd->copy_to_lcd(); this->lcd->locate(0, 0); this->lcd->printf("GAME OVER"); delete this->player; delete this->accel; delete this->lcd; } void Game::threader(void const *p) { Game *instance = (Game*) p; instance->watchAccel(); } void Game::loop() { while (this->player->isAlive()) { this->process(); this->display(); Thread::wait(DELTA_TIME); } } void Game::watchAccel() { this->_thread.signal_wait(START_THREAD); while (true) { int16_t raX, raY; this->accel->getX(&raX); this->accel->getY(&raY); this->player->move(-raX, raY - this->steadyPosition); Thread::wait(DELTA_TIME); } } void Game::process() { static int delta = 0; static int next = rand() % 6; if (delta >= next) { this->generate(); next = rand() % 6; delta = 0; } ++delta; std::list<Asteroid*>::iterator it; for (it = this->asteroids.begin(); it != this->asteroids.end(); it++) { if (!(*it)->move(this->player)) { #if defined _DEBUG host.printf("Erasing Asteroid #%d !\r\n", (*it)->getNumber()); #endif it = this->asteroids.erase(it); } } } void Game::generate() { static int current = 0; this->asteroids.push_back(new Asteroid(++current)); #if defined _DEBUG host.printf("New Asteroid #%d !\r\n", current); #endif } void Game::display() { this->lcd->cls(); std::list<Asteroid*>::iterator it; for (it = this->asteroids.begin(); it != this->asteroids.end(); it++) { this->lcd->pixel((*it)->getX(), (*it)->getY(), 1); } this->lcd->rect(this->player->getX(), this->player->getY(), this->player->getX() + 1, this->player->getY() + 1, 1); this->lcd->copy_to_lcd(); }