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:
Thu Dec 04 03:13:14 2014 +0000
Revision:
2:97d01ba6cd91
Parent:
1:ecf7bbccddc1
Child:
3:a93fe5f207f5
Improved ladder and jump handling.
; Minimized sprite overlap when composing background and foreground with sprites

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 0:2ee0812e2615 1 #include "GameEngine.h"
taylorza 0:2ee0812e2615 2 #include "SpriteSheet.h"
taylorza 0:2ee0812e2615 3 #include "Player.h"
taylorza 1:ecf7bbccddc1 4 #include "PatrollingEnemy.h"
taylorza 2:97d01ba6cd91 5 #include "BouncingEnemy.h"
taylorza 0:2ee0812e2615 6 #include "font_IBM.h"
taylorza 0:2ee0812e2615 7
taylorza 0:2ee0812e2615 8 // Block images
taylorza 0:2ee0812e2615 9 static const ImageFrame emptyBlock(bmp, 0, 0, 8, 8);
taylorza 2:97d01ba6cd91 10 static const ImageFrame brickBlock(bmp, 16, 48, 8, 8);
taylorza 2:97d01ba6cd91 11 static const ImageFrame meshFenceTopBlock(bmp, 24, 48, 8, 8);
taylorza 2:97d01ba6cd91 12 static const ImageFrame meshFenceBlock(bmp, 32, 48, 8, 8);
taylorza 2:97d01ba6cd91 13 static const ImageFrame platformBlock(bmp, 40, 48, 8, 8);
taylorza 2:97d01ba6cd91 14 static const ImageFrame brickTrimBlock(bmp, 48, 48, 8, 8);
taylorza 2:97d01ba6cd91 15 static const ImageFrame leftLadderBlock(bmp, 16, 56, 8, 8);
taylorza 2:97d01ba6cd91 16 static const ImageFrame rightLadderBlock(bmp, 24, 56, 8, 8);
taylorza 2:97d01ba6cd91 17 static const ImageFrame wallBlock(bmp, 56, 48, 8, 8);
taylorza 0:2ee0812e2615 18
taylorza 0:2ee0812e2615 19 // Sprite images
taylorza 0:2ee0812e2615 20 static const ImageFrame playerWalk1(bmp, 0, 0, 16, 16);
taylorza 0:2ee0812e2615 21 static const ImageFrame playerWalk2(bmp, 16, 0, 16, 16);
taylorza 0:2ee0812e2615 22 static const ImageFrame playerWalk3(bmp, 32, 0, 16, 16);
taylorza 0:2ee0812e2615 23 static const ImageFrame playerWalk4(bmp, 48, 0, 16, 16);
taylorza 0:2ee0812e2615 24
taylorza 2:97d01ba6cd91 25 static const ImageFrame playerClimb1(bmp, 0, 64, 16, 16);
taylorza 2:97d01ba6cd91 26 static const ImageFrame playerClimb2(bmp, 16, 64, 16, 16);
taylorza 2:97d01ba6cd91 27 static const ImageFrame playerClimb3(bmp, 32, 64, 16, 16);
taylorza 2:97d01ba6cd91 28 static const ImageFrame playerClimb4(bmp, 48, 64, 16, 16);
taylorza 2:97d01ba6cd91 29
taylorza 0:2ee0812e2615 30 static const ImageFrame angryBird1(bmp, 0, 16, 16, 16);
taylorza 0:2ee0812e2615 31 static const ImageFrame angryBird2(bmp, 16, 16, 16, 16);
taylorza 0:2ee0812e2615 32 static const ImageFrame angryBird3(bmp, 32, 16, 16, 16);
taylorza 0:2ee0812e2615 33 static const ImageFrame angryBird4(bmp, 48, 16, 16, 16);
taylorza 0:2ee0812e2615 34
taylorza 1:ecf7bbccddc1 35 static const ImageFrame mineCart1(bmp, 0, 32, 16, 16);
taylorza 1:ecf7bbccddc1 36 static const ImageFrame mineCart2(bmp, 16, 32, 16, 16);
taylorza 1:ecf7bbccddc1 37 static const ImageFrame mineCart3(bmp, 32, 32, 16, 16);
taylorza 1:ecf7bbccddc1 38 static const ImageFrame mineCart4(bmp, 48, 32, 16, 16);
taylorza 1:ecf7bbccddc1 39
taylorza 1:ecf7bbccddc1 40 static const ImageFrame bubble1(bmp, 0, 48, 16, 16);
taylorza 1:ecf7bbccddc1 41
taylorza 0:2ee0812e2615 42 // Blocks
taylorza 0:2ee0812e2615 43 const Block blocks[] =
taylorza 0:2ee0812e2615 44 {
taylorza 0:2ee0812e2615 45 Block(&emptyBlock, Block::Background, 0, 0), // 0 - Empty block
taylorza 0:2ee0812e2615 46 Block(&brickBlock, Block::Solid, 2, 0), // 1 - Brick - Red on black
taylorza 0:2ee0812e2615 47 Block(&meshFenceTopBlock, Block::Background, 1, 0), // 2 - Mesh fence top - Blue on black
taylorza 0:2ee0812e2615 48 Block(&meshFenceBlock, Block::Background, 1, 0), // 3 - Mesh fence - Blue on black
taylorza 0:2ee0812e2615 49 Block(&platformBlock, Block::Platform, 5, 0), // 4 - Platform - Cyan on black
taylorza 0:2ee0812e2615 50 Block(&brickTrimBlock, Block::Background, 2, 0), // 5 - Brick trim - Red on black
taylorza 2:97d01ba6cd91 51 Block(&leftLadderBlock, Block::Ladder, 6, 0), // 6 - Left ladder half - Yellow on black
taylorza 2:97d01ba6cd91 52 Block(&rightLadderBlock, Block::Ladder, 6, 0), // 7 - Right ladder half - Yellow on black
taylorza 2:97d01ba6cd91 53 Block(&wallBlock, Block::Ladder, 5, 0), // 8 - Wall - Cyan on black
taylorza 0:2ee0812e2615 54 };
taylorza 0:2ee0812e2615 55
taylorza 0:2ee0812e2615 56 // Sprite animation sequences
taylorza 0:2ee0812e2615 57 const ImageFrame *playerWalking[] = { &playerWalk1, &playerWalk2, &playerWalk3, &playerWalk4, NULL };
taylorza 2:97d01ba6cd91 58 const ImageFrame *playerClimbing[] = { &playerClimb1, &playerClimb2, &playerClimb3, &playerClimb4, NULL };
taylorza 0:2ee0812e2615 59 const ImageFrame *angryBird[] = { &angryBird1, &angryBird2, &angryBird3, &angryBird4, NULL };
taylorza 1:ecf7bbccddc1 60 const ImageFrame *mineCart[] = { &mineCart1, &mineCart2, &mineCart3, &mineCart4, NULL };
taylorza 1:ecf7bbccddc1 61 const ImageFrame *bubble[] = { &bubble1, NULL };
taylorza 0:2ee0812e2615 62
taylorza 0:2ee0812e2615 63 // Sprites
taylorza 0:2ee0812e2615 64 Sprite sprites[] =
taylorza 0:2ee0812e2615 65 {
taylorza 0:2ee0812e2615 66 Sprite(playerWalking, 7), // 0 - Player walking
taylorza 2:97d01ba6cd91 67 Sprite(playerClimbing, 7), // 1 - Player climbing
taylorza 2:97d01ba6cd91 68 Sprite(angryBird, 6), // 2 - Angry bird
taylorza 2:97d01ba6cd91 69 Sprite(mineCart, 6), // 3 - Mine cart
taylorza 2:97d01ba6cd91 70 Sprite(bubble, 1) // 4 - Bubble
taylorza 0:2ee0812e2615 71 };
taylorza 0:2ee0812e2615 72
taylorza 0:2ee0812e2615 73 static const uint8_t map[] = {
taylorza 0:2ee0812e2615 74 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
taylorza 2:97d01ba6cd91 75 1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,
taylorza 0:2ee0812e2615 76 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
taylorza 0:2ee0812e2615 77 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
taylorza 0:2ee0812e2615 78 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
taylorza 0:2ee0812e2615 79 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
taylorza 2:97d01ba6cd91 80 1,4,6,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,
taylorza 2:97d01ba6cd91 81 1,0,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
taylorza 2:97d01ba6cd91 82 1,0,6,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,
taylorza 2:97d01ba6cd91 83 1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,6,7,4,1,
taylorza 2:97d01ba6cd91 84 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,6,7,2,1,
taylorza 2:97d01ba6cd91 85 1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,6,7,3,1,
taylorza 2:97d01ba6cd91 86 1,4,6,7,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,
taylorza 2:97d01ba6cd91 87 1,2,6,7,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,
taylorza 2:97d01ba6cd91 88 1,3,6,7,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,1,
taylorza 0:2ee0812e2615 89 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
taylorza 0:2ee0812e2615 90 };
taylorza 0:2ee0812e2615 91
taylorza 0:2ee0812e2615 92 class MyGame : public Game
taylorza 0:2ee0812e2615 93 {
taylorza 0:2ee0812e2615 94 public:
taylorza 0:2ee0812e2615 95 MyGame() :
taylorza 0:2ee0812e2615 96 _player(*this),
taylorza 2:97d01ba6cd91 97 _enemy1(*this, 3, PatrollingEnemy::LeftRight),
taylorza 2:97d01ba6cd91 98 _enemy2(*this, 4)
taylorza 0:2ee0812e2615 99 {
taylorza 2:97d01ba6cd91 100 _player.setStartPosition(130, 96);
taylorza 2:97d01ba6cd91 101 _enemy1.setStartPosition(80, 80);
taylorza 2:97d01ba6cd91 102 _enemy2.setStartPosition(8, 8);
taylorza 0:2ee0812e2615 103 setMap(map, 20, 16, blocks, sprites);
taylorza 2:97d01ba6cd91 104
taylorza 2:97d01ba6cd91 105 addGameObject(&_player);
taylorza 2:97d01ba6cd91 106 addGameObject(&_enemy1);
taylorza 2:97d01ba6cd91 107 addGameObject(&_enemy2);
taylorza 0:2ee0812e2615 108 }
taylorza 0:2ee0812e2615 109
taylorza 0:2ee0812e2615 110 private:
taylorza 0:2ee0812e2615 111 Player _player;
taylorza 0:2ee0812e2615 112 PatrollingEnemy _enemy1;
taylorza 2:97d01ba6cd91 113 BouncingEnemy _enemy2;
taylorza 0:2ee0812e2615 114
taylorza 0:2ee0812e2615 115 protected:
taylorza 0:2ee0812e2615 116 virtual void update(float elapsedTime)
taylorza 0:2ee0812e2615 117 {
taylorza 2:97d01ba6cd91 118 Game::update(elapsedTime);
taylorza 0:2ee0812e2615 119 wait_ms(32);
taylorza 0:2ee0812e2615 120 }
taylorza 0:2ee0812e2615 121 };
taylorza 0:2ee0812e2615 122
taylorza 0:2ee0812e2615 123 int main()
taylorza 0:2ee0812e2615 124 {
taylorza 0:2ee0812e2615 125 DigitalOut led1(P0_9);
taylorza 0:2ee0812e2615 126 led1 = 1;
taylorza 0:2ee0812e2615 127
taylorza 0:2ee0812e2615 128 MyGame game;
taylorza 0:2ee0812e2615 129 game.run();
taylorza 0:2ee0812e2615 130 }
taylorza 2:97d01ba6cd91 131