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:
Mon Feb 16 03:46:57 2015 +0000
Revision:
16:f9227904afc4
Parent:
15:5d3f65500736
Added a 4th game screen

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 9:34008d8b1cdf 1 #include "GameEngine.h"
taylorza 9:34008d8b1cdf 2
taylorza 9:34008d8b1cdf 3 #include "SoundBlock.h"
taylorza 9:34008d8b1cdf 4 #include "SoundChannel.h"
taylorza 9:34008d8b1cdf 5 #include "OneBitSound.h"
taylorza 9:34008d8b1cdf 6
taylorza 9:34008d8b1cdf 7 static OneBitSound g_sound(P0_18);
taylorza 9:34008d8b1cdf 8 static Timer g_frameTimer;
taylorza 9:34008d8b1cdf 9
taylorza 9:34008d8b1cdf 10 LCD_ST7735 Game::Surface(
taylorza 9:34008d8b1cdf 11 P0_19,
taylorza 9:34008d8b1cdf 12 P0_20,
taylorza 9:34008d8b1cdf 13 P0_7,
taylorza 9:34008d8b1cdf 14 P0_21,
taylorza 9:34008d8b1cdf 15 P0_22,
taylorza 9:34008d8b1cdf 16 P1_15,
taylorza 9:34008d8b1cdf 17 P0_2,
taylorza 9:34008d8b1cdf 18 LCD_ST7735::RGB);
taylorza 9:34008d8b1cdf 19
taylorza 9:34008d8b1cdf 20 Game *Game::Instance = NULL;
taylorza 9:34008d8b1cdf 21
taylorza 9:34008d8b1cdf 22 void Game::playEffect(uint8_t channel, const SoundBlock *effect, uint8_t count)
taylorza 9:34008d8b1cdf 23 {
taylorza 9:34008d8b1cdf 24 g_sound.play(channel, effect, count);
taylorza 9:34008d8b1cdf 25 }
taylorza 9:34008d8b1cdf 26
taylorza 9:34008d8b1cdf 27 Game::Game() :
taylorza 9:34008d8b1cdf 28 _pScene(NULL),
taylorza 9:34008d8b1cdf 29 _pNextScene(NULL),
taylorza 9:34008d8b1cdf 30 _lives(3),
taylorza 15:5d3f65500736 31 _score(0),
taylorza 15:5d3f65500736 32 _speedAdjust(0)
taylorza 9:34008d8b1cdf 33 {
taylorza 9:34008d8b1cdf 34 Game::Instance = this;
taylorza 9:34008d8b1cdf 35 }
taylorza 9:34008d8b1cdf 36
taylorza 9:34008d8b1cdf 37 void Game::run()
taylorza 9:34008d8b1cdf 38 {
taylorza 9:34008d8b1cdf 39 g_frameTimer.start();
taylorza 9:34008d8b1cdf 40 int timeAccumulator = 0;
taylorza 9:34008d8b1cdf 41 int lastFrameTime = g_frameTimer.read_us();
taylorza 9:34008d8b1cdf 42
taylorza 9:34008d8b1cdf 43 while(true)
taylorza 9:34008d8b1cdf 44 {
taylorza 9:34008d8b1cdf 45 int timestamp = g_frameTimer.read_us();
taylorza 9:34008d8b1cdf 46 int elapsedTime = timestamp - lastFrameTime;
taylorza 9:34008d8b1cdf 47 lastFrameTime = timestamp;
taylorza 9:34008d8b1cdf 48
taylorza 9:34008d8b1cdf 49 g_sound.update(elapsedTime);
taylorza 9:34008d8b1cdf 50
taylorza 9:34008d8b1cdf 51 timeAccumulator += elapsedTime;
taylorza 9:34008d8b1cdf 52 if (timeAccumulator >= (32000 - _speedAdjust))
taylorza 9:34008d8b1cdf 53 {
taylorza 9:34008d8b1cdf 54 update();
taylorza 9:34008d8b1cdf 55 draw();
taylorza 9:34008d8b1cdf 56 if (_pNextScene != NULL)
taylorza 9:34008d8b1cdf 57 {
taylorza 9:34008d8b1cdf 58 _pScene = _pNextScene;
taylorza 9:34008d8b1cdf 59 _pNextScene = NULL;
taylorza 9:34008d8b1cdf 60 }
taylorza 9:34008d8b1cdf 61 timeAccumulator -= (32000 - _speedAdjust);
taylorza 9:34008d8b1cdf 62 }
taylorza 9:34008d8b1cdf 63 else
taylorza 9:34008d8b1cdf 64 {
taylorza 9:34008d8b1cdf 65 wait_us(1);
taylorza 9:34008d8b1cdf 66 }
taylorza 9:34008d8b1cdf 67 }
taylorza 9:34008d8b1cdf 68 }
taylorza 9:34008d8b1cdf 69
taylorza 9:34008d8b1cdf 70 void Game::die()
taylorza 9:34008d8b1cdf 71 {
taylorza 9:34008d8b1cdf 72 if (_lives > 1)
taylorza 9:34008d8b1cdf 73 {
taylorza 9:34008d8b1cdf 74 --_lives;
taylorza 9:34008d8b1cdf 75 if (_pScene != NULL) _pScene->restartScreen();
taylorza 9:34008d8b1cdf 76 }
taylorza 9:34008d8b1cdf 77 else
taylorza 9:34008d8b1cdf 78 {
taylorza 9:34008d8b1cdf 79 _lives = 0;
taylorza 9:34008d8b1cdf 80 }
taylorza 9:34008d8b1cdf 81 }
taylorza 9:34008d8b1cdf 82
taylorza 9:34008d8b1cdf 83 void Game::update()
taylorza 9:34008d8b1cdf 84 {
taylorza 9:34008d8b1cdf 85 if (_pScene != NULL) _pScene->update();
taylorza 9:34008d8b1cdf 86 }
taylorza 9:34008d8b1cdf 87
taylorza 9:34008d8b1cdf 88 void Game::draw()
taylorza 9:34008d8b1cdf 89 {
taylorza 9:34008d8b1cdf 90 if (_pScene != NULL) _pScene->draw();
taylorza 9:34008d8b1cdf 91 }
taylorza 9:34008d8b1cdf 92
taylorza 9:34008d8b1cdf 93
taylorza 9:34008d8b1cdf 94
taylorza 9:34008d8b1cdf 95