Retro game that let's the player steer a ball through a hole filled maze. Has multiple levels of increasing difficulty.

Dependencies:   LCD_ST7735 MusicEngine RETRO_BallsAndThings mbed

Ball and Holes

In this game I attempted to create somewhat natural movement of the ball by implementing gravity and friction which combined over time determine the speed of the ball. Playing with the settings (aka. the magic numbers) that are spread out all over game.cpp, gives different effects, such as an icy, rough or liquid-like surface.

It took some time to figure out how to post my very first youtube video. Sorry for the shaky recording. Trying to record the video with my phone while playing the game in one hand was quite challenging, but here it is;

The left and right buttons are used to cheat: restart the current or go to the next level. Up and down control the game-tick. During game-play the robot-button shows the accelerator graph and the ship-button mutes the sound.

BTW. If your ball happens to get stuck, tilting the console in the opposite direction will set it free. For sake of argument: these magnetic wall-ends are in the words of Bob Ross "a happy accident". Since there is no specific code for it, others might call it a bug. As it results in more interesting game-play, I didn't attempt to fix it, but left a comment for those who dare to look at the mess I call code.

Committer:
maxint
Date:
Sun Feb 01 16:21:24 2015 +0000
Revision:
1:c1ee4c699517
Parent:
0:87ab172a74b4
moved graph to accelerometer class

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maxint 0:87ab172a74b4 1 #pragma once
maxint 0:87ab172a74b4 2 #include "mbed.h"
maxint 0:87ab172a74b4 3
maxint 1:c1ee4c699517 4 #include "Color565.h"
maxint 1:c1ee4c699517 5 #include "LCD_ST7735.h"
maxint 1:c1ee4c699517 6
maxint 0:87ab172a74b4 7 class Accelerometer
maxint 0:87ab172a74b4 8 {
maxint 0:87ab172a74b4 9 public:
maxint 1:c1ee4c699517 10 Accelerometer(int nI2cAddress, LCD_ST7735* pDisp);
maxint 0:87ab172a74b4 11 void getXYZ(double& x, double& y, double& z);
maxint 1:c1ee4c699517 12 void resetGraph();
maxint 1:c1ee4c699517 13 void updateGraph();
maxint 1:c1ee4c699517 14
maxint 0:87ab172a74b4 15 private:
maxint 1:c1ee4c699517 16 static const int GRAPH_HEIGHT = 40;
maxint 1:c1ee4c699517 17 static const int GRAPH_SPACING = 2;
maxint 1:c1ee4c699517 18
maxint 0:87ab172a74b4 19 void readRegisters(char address, char* buffer, int len);
maxint 0:87ab172a74b4 20 int writeRegister(char address, char value);
maxint 0:87ab172a74b4 21 double convert(char* buffer);
maxint 1:c1ee4c699517 22
maxint 0:87ab172a74b4 23 int i2cAddress;
maxint 0:87ab172a74b4 24 I2C i2c;
maxint 1:c1ee4c699517 25 LCD_ST7735* pDisp;
maxint 1:c1ee4c699517 26 unsigned short colors[3];
maxint 1:c1ee4c699517 27 int graphX;
maxint 1:c1ee4c699517 28
maxint 1:c1ee4c699517 29 void drawAxes();
maxint 1:c1ee4c699517 30 void drawPoint(int axis, double value);
maxint 1:c1ee4c699517 31 void checkGraphReset();
maxint 0:87ab172a74b4 32 };