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 08:36:45 2014 +0000
Revision:
1:ecf7bbccddc1
Parent:
0:2ee0812e2615
Child:
2:97d01ba6cd91
No with bouncing 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 if (_state == Stopped) _jumpX = 0;
taylorza 0:2ee0812e2615 17
taylorza 0:2ee0812e2615 18 if (_state != Jumping && _state != Falling)
taylorza 0:2ee0812e2615 19 {
taylorza 0:2ee0812e2615 20 if (GameInput::isLeftPressed())
taylorza 0:2ee0812e2615 21 {
taylorza 0:2ee0812e2615 22 _state = moveLeft() ? Walking : Stopped;
taylorza 0:2ee0812e2615 23 _jumpX = -1;
taylorza 0:2ee0812e2615 24 animate();
taylorza 0:2ee0812e2615 25 }
taylorza 0:2ee0812e2615 26 else if (GameInput::isRightPressed())
taylorza 0:2ee0812e2615 27 {
taylorza 0:2ee0812e2615 28 _state = moveRight() ? Walking : Stopped;
taylorza 0:2ee0812e2615 29 _jumpX = 1;
taylorza 0:2ee0812e2615 30 animate();
taylorza 0:2ee0812e2615 31 }
taylorza 0:2ee0812e2615 32 }
taylorza 0:2ee0812e2615 33
taylorza 0:2ee0812e2615 34 if (GameInput::isCirclePressed() && _state != Jumping && _state != Falling)
taylorza 0:2ee0812e2615 35 {
taylorza 0:2ee0812e2615 36 _state = Jumping;
taylorza 0:2ee0812e2615 37 _jumpY = 0;
taylorza 0:2ee0812e2615 38 }
taylorza 0:2ee0812e2615 39 else if (_state != Jumping)
taylorza 0:2ee0812e2615 40 {
taylorza 0:2ee0812e2615 41 if (moveDown())
taylorza 0:2ee0812e2615 42 {
taylorza 0:2ee0812e2615 43 _state = Falling;
taylorza 0:2ee0812e2615 44 if (_jumpY > 0)
taylorza 0:2ee0812e2615 45 {
taylorza 0:2ee0812e2615 46 if (_jumpX < 0) { moveLeft(); animate(); }
taylorza 0:2ee0812e2615 47 else if (_jumpX > 0) { moveRight(); animate(); }
taylorza 1:ecf7bbccddc1 48 --_jumpY;
taylorza 0:2ee0812e2615 49 }
taylorza 0:2ee0812e2615 50 }
taylorza 0:2ee0812e2615 51 else
taylorza 0:2ee0812e2615 52 {
taylorza 0:2ee0812e2615 53 _state = Stopped;
taylorza 0:2ee0812e2615 54 _jumpY = 0;
taylorza 0:2ee0812e2615 55 }
taylorza 0:2ee0812e2615 56 }
taylorza 0:2ee0812e2615 57
taylorza 0:2ee0812e2615 58 if (_state == Jumping)
taylorza 0:2ee0812e2615 59 {
taylorza 0:2ee0812e2615 60 if (_jumpY < 10 && moveUp())
taylorza 0:2ee0812e2615 61 {
taylorza 0:2ee0812e2615 62 if (_jumpX < 0) { moveLeft(); animate(); }
taylorza 0:2ee0812e2615 63 else if (_jumpX > 0) { moveRight(); animate(); }
taylorza 0:2ee0812e2615 64 ++_jumpY;
taylorza 0:2ee0812e2615 65 }
taylorza 0:2ee0812e2615 66 else
taylorza 0:2ee0812e2615 67 {
taylorza 0:2ee0812e2615 68 _state = Falling;
taylorza 0:2ee0812e2615 69 }
taylorza 0:2ee0812e2615 70 }
taylorza 0:2ee0812e2615 71 }
taylorza 0:2ee0812e2615 72
taylorza 0:2ee0812e2615 73 private:
taylorza 0:2ee0812e2615 74 State _state;
taylorza 1:ecf7bbccddc1 75 int8_t _jumpY;
taylorza 0:2ee0812e2615 76 int8_t _jumpX;
taylorza 0:2ee0812e2615 77 };