Platform game written for the GHI/OutrageousCircuits RETRO game device. Navigate the caves collecting all the pickups and avoiding the creatures and haunted mine carts that patrol the caves. Oh and remember to watch out for the poisonous plants... This game demonstrates the ability to have multiple animated sprites where the sprites can overlap the background environment. See how the player moves past the fence and climbs the wall in the 3rd screen.

Dependencies:   mbed

Committer:
taylorza
Date:
Sat Nov 29 06:40:50 2014 +0000
Revision:
0:2ee0812e2615
Child:
1:ecf7bbccddc1
Working engine with patrolling enemies

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 0:2ee0812e2615 1 class Player : public GameObject
taylorza 0:2ee0812e2615 2 {
taylorza 0:2ee0812e2615 3 public:
taylorza 0:2ee0812e2615 4 enum State { Stopped, Walking, Jumping, Falling };
taylorza 0:2ee0812e2615 5
taylorza 0:2ee0812e2615 6 Player(Game &game) :
taylorza 0:2ee0812e2615 7 GameObject(game),
taylorza 0:2ee0812e2615 8 _state(Stopped),
taylorza 0:2ee0812e2615 9 _jumpY(0),
taylorza 0:2ee0812e2615 10 _jumpX(0)
taylorza 0:2ee0812e2615 11 {
taylorza 0:2ee0812e2615 12 }
taylorza 0:2ee0812e2615 13
taylorza 0:2ee0812e2615 14 virtual void update()
taylorza 0:2ee0812e2615 15 {
taylorza 0:2ee0812e2615 16 char buffer[20];
taylorza 0:2ee0812e2615 17 sprintf(buffer, "%d ", _state);
taylorza 0:2ee0812e2615 18 Game::Screen.drawString(font_ibm, 0, 0, buffer);
taylorza 0:2ee0812e2615 19
taylorza 0:2ee0812e2615 20 if (_state == Stopped) _jumpX = 0;
taylorza 0:2ee0812e2615 21
taylorza 0:2ee0812e2615 22 if (_state != Jumping && _state != Falling)
taylorza 0:2ee0812e2615 23 {
taylorza 0:2ee0812e2615 24 if (GameInput::isLeftPressed())
taylorza 0:2ee0812e2615 25 {
taylorza 0:2ee0812e2615 26 _state = moveLeft() ? Walking : Stopped;
taylorza 0:2ee0812e2615 27 _jumpX = -1;
taylorza 0:2ee0812e2615 28 animate();
taylorza 0:2ee0812e2615 29 }
taylorza 0:2ee0812e2615 30 else if (GameInput::isRightPressed())
taylorza 0:2ee0812e2615 31 {
taylorza 0:2ee0812e2615 32 _state = moveRight() ? Walking : Stopped;
taylorza 0:2ee0812e2615 33 _jumpX = 1;
taylorza 0:2ee0812e2615 34 animate();
taylorza 0:2ee0812e2615 35 }
taylorza 0:2ee0812e2615 36 }
taylorza 0:2ee0812e2615 37
taylorza 0:2ee0812e2615 38 if (GameInput::isCirclePressed() && _state != Jumping && _state != Falling)
taylorza 0:2ee0812e2615 39 {
taylorza 0:2ee0812e2615 40 _state = Jumping;
taylorza 0:2ee0812e2615 41 _jumpY = 0;
taylorza 0:2ee0812e2615 42 }
taylorza 0:2ee0812e2615 43 else if (_state != Jumping)
taylorza 0:2ee0812e2615 44 {
taylorza 0:2ee0812e2615 45 if (moveDown())
taylorza 0:2ee0812e2615 46 {
taylorza 0:2ee0812e2615 47 _state = Falling;
taylorza 0:2ee0812e2615 48 if (_jumpY > 0)
taylorza 0:2ee0812e2615 49 {
taylorza 0:2ee0812e2615 50 if (_jumpX < 0) { moveLeft(); animate(); }
taylorza 0:2ee0812e2615 51 else if (_jumpX > 0) { moveRight(); animate(); }
taylorza 0:2ee0812e2615 52 }
taylorza 0:2ee0812e2615 53 }
taylorza 0:2ee0812e2615 54 else
taylorza 0:2ee0812e2615 55 {
taylorza 0:2ee0812e2615 56 _state = Stopped;
taylorza 0:2ee0812e2615 57 _jumpY = 0;
taylorza 0:2ee0812e2615 58 }
taylorza 0:2ee0812e2615 59 }
taylorza 0:2ee0812e2615 60
taylorza 0:2ee0812e2615 61 if (_state == Jumping)
taylorza 0:2ee0812e2615 62 {
taylorza 0:2ee0812e2615 63 if (_jumpY < 10 && moveUp())
taylorza 0:2ee0812e2615 64 {
taylorza 0:2ee0812e2615 65 if (_jumpX < 0) { moveLeft(); animate(); }
taylorza 0:2ee0812e2615 66 else if (_jumpX > 0) { moveRight(); animate(); }
taylorza 0:2ee0812e2615 67 ++_jumpY;
taylorza 0:2ee0812e2615 68 }
taylorza 0:2ee0812e2615 69 else
taylorza 0:2ee0812e2615 70 {
taylorza 0:2ee0812e2615 71 _state = Falling;
taylorza 0:2ee0812e2615 72 }
taylorza 0:2ee0812e2615 73 }
taylorza 0:2ee0812e2615 74 }
taylorza 0:2ee0812e2615 75
taylorza 0:2ee0812e2615 76 private:
taylorza 0:2ee0812e2615 77 State _state;
taylorza 0:2ee0812e2615 78 uint8_t _jumpY;
taylorza 0:2ee0812e2615 79 int8_t _jumpX;
taylorza 0:2ee0812e2615 80 };