Race around the city collecting the flags while avoiding those that stand in the way of your mission. Make no mistake you will need to be quick to outwit your opponents, they are smart and will try to box you in. I wrote this game to prove that writing a game with scrolling scenery is possible even with the limited 6kB of RAM available. I had to compromise sound effects for features, I wanted multiple opponents, I wanted to be able to drop smoke bombs to trap the opponents but all this required memory so the sound effects had to take a back seat.

Dependencies:   mbed

Committer:
taylorza
Date:
Sun Feb 01 00:43:25 2015 +0000
Revision:
1:1b8125937f28
Parent:
0:d85c449aca6d
Minor updates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 0:d85c449aca6d 1 #include "Constants.h"
taylorza 0:d85c449aca6d 2 #include "GameObject.h"
taylorza 0:d85c449aca6d 3 #include "RallyCar.h"
taylorza 0:d85c449aca6d 4
taylorza 0:d85c449aca6d 5 #ifndef __SMOKE_H__
taylorza 0:d85c449aca6d 6 #define __SMOKE_H__
taylorza 0:d85c449aca6d 7
taylorza 0:d85c449aca6d 8 class Smoke : public GameObject
taylorza 0:d85c449aca6d 9 {
taylorza 0:d85c449aca6d 10 public:
taylorza 0:d85c449aca6d 11 Smoke() :
taylorza 0:d85c449aca6d 12 _active(false)
taylorza 0:d85c449aca6d 13 {
taylorza 0:d85c449aca6d 14 setSpriteId(9);
taylorza 0:d85c449aca6d 15 setCollisionRect(4, 4, 8, 8);
taylorza 0:d85c449aca6d 16 }
taylorza 0:d85c449aca6d 17
taylorza 0:d85c449aca6d 18 void setCars(RallyCar **cars) { _cars = cars; }
taylorza 0:d85c449aca6d 19
taylorza 0:d85c449aca6d 20 virtual void update()
taylorza 0:d85c449aca6d 21 {
taylorza 0:d85c449aca6d 22 GameObject::update();
taylorza 0:d85c449aca6d 23
taylorza 0:d85c449aca6d 24 if (_active)
taylorza 0:d85c449aca6d 25 {
taylorza 0:d85c449aca6d 26 // Exclude first car, the player car
taylorza 0:d85c449aca6d 27 for (int i = 1; i < MAX_CARS; ++i)
taylorza 0:d85c449aca6d 28 {
taylorza 0:d85c449aca6d 29 if (_cars[i]->getState() != RallyCar::StartSpinning &&
taylorza 0:d85c449aca6d 30 _cars[i]->getState() != RallyCar::Spinning)
taylorza 0:d85c449aca6d 31 {
taylorza 0:d85c449aca6d 32 if (detectCollision((GameObject*)_cars[i]))
taylorza 0:d85c449aca6d 33 {
taylorza 0:d85c449aca6d 34 _cars[i]->setPosition(getPosition());
taylorza 0:d85c449aca6d 35 _cars[i]->setState(RallyCar::StartSpinning);
taylorza 0:d85c449aca6d 36 }
taylorza 0:d85c449aca6d 37 }
taylorza 0:d85c449aca6d 38 }
taylorza 0:d85c449aca6d 39
taylorza 0:d85c449aca6d 40 if (_liveCounter-- == 0)
taylorza 0:d85c449aca6d 41 {
taylorza 0:d85c449aca6d 42 for (int i = 0; i < MAX_CARS; ++i)
taylorza 0:d85c449aca6d 43 {
taylorza 0:d85c449aca6d 44 if (_cars[i]->getState() == RallyCar::StartSpinning ||
taylorza 0:d85c449aca6d 45 _cars[i]->getState() == RallyCar::Spinning)
taylorza 0:d85c449aca6d 46 {
taylorza 0:d85c449aca6d 47 if (detectCollision((GameObject*)_cars[i]))
taylorza 0:d85c449aca6d 48 {
taylorza 0:d85c449aca6d 49 _cars[i]->setState(RallyCar::Driving);
taylorza 0:d85c449aca6d 50 }
taylorza 0:d85c449aca6d 51 }
taylorza 0:d85c449aca6d 52 }
taylorza 1:1b8125937f28 53 _active = false;
taylorza 0:d85c449aca6d 54 }
taylorza 0:d85c449aca6d 55 }
taylorza 0:d85c449aca6d 56 }
taylorza 0:d85c449aca6d 57
taylorza 0:d85c449aca6d 58 virtual void draw()
taylorza 0:d85c449aca6d 59 {
taylorza 0:d85c449aca6d 60 if (_active)
taylorza 0:d85c449aca6d 61 {
taylorza 0:d85c449aca6d 62 GameObject::draw();
taylorza 0:d85c449aca6d 63 }
taylorza 0:d85c449aca6d 64 }
taylorza 0:d85c449aca6d 65
taylorza 0:d85c449aca6d 66 inline bool getActive() { return _active; }
taylorza 0:d85c449aca6d 67 inline void setActive(bool active)
taylorza 0:d85c449aca6d 68 {
taylorza 0:d85c449aca6d 69 if (_active != active)
taylorza 0:d85c449aca6d 70 {
taylorza 0:d85c449aca6d 71 _active = active;
taylorza 0:d85c449aca6d 72 _liveCounter = 90;
taylorza 0:d85c449aca6d 73 }
taylorza 0:d85c449aca6d 74 }
taylorza 0:d85c449aca6d 75
taylorza 0:d85c449aca6d 76 private:
taylorza 0:d85c449aca6d 77 bool _active;
taylorza 0:d85c449aca6d 78 RallyCar **_cars;
taylorza 0:d85c449aca6d 79 uint16_t _liveCounter;
taylorza 0:d85c449aca6d 80 };
taylorza 0:d85c449aca6d 81 #endif //__SMOKE_H__