Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- Revision:
- 9:96969b1c6bde
- Parent:
- 8:21b6d4dbce44
- Child:
- 10:58cf89dd878c
--- a/main.cpp Fri Apr 19 17:54:09 2019 +0000
+++ b/main.cpp Wed Apr 24 10:18:45 2019 +0000
@@ -7,9 +7,6 @@
Student ID Number: 201148379
Date: 12/03/2019
*/
-const int fps = 15;
-
-
///////// pre-processor directives ////////
@@ -22,6 +19,8 @@
#include "SoundData.h"
#include "SplashScreen.h"
#include "MenuScreen.h"
+#include "WinScreen.h"
+
Timer game_timer;
Timer music_timer;
@@ -34,14 +33,17 @@
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Gamepad pad;
Game game;
-Music play;
+Music music;
///////////// prototypes ///////////////
void init();
void welcome();
-
+void menu();
+void how_to_play();
+void you_win();
+int main();
// initialies all classes and libraries
void init()
@@ -51,60 +53,97 @@
lcd.init();
lcd.setContrast(0.4);
pad.init();
- play.init(data1,NUM_ELEMENTS);
+ // Initalises Music with data from SoundData.h and game
+ music.init(data1,NUM_ELEMENTS);
game.init();
-
-
}
// simple splash screen displayed on start-up
void welcome()
{
-
+ // Draws Splash Screen
lcd.drawSprite(0,0,48,84, (int *) splashScreen);
lcd.refresh();
// wait flashing LEDs until start button is pressed
- while ( pad.check_event(Gamepad::START_PRESSED) == false) {
+ while (!pad.check_event(Gamepad::START_PRESSED)) {
+ pad.leds_on();
+ wait(0.1);
+ pad.leds_off();
+ wait(0.1);
+ }
+
+}
+
+void you_win()
+{
+
+ // Draws Win Screen
+ lcd.drawSprite(0,0,48,84, (int *) winScreen);
+ lcd.refresh();
+
+ // wait flashing LEDs until A button is pressed
+ while (!pad.check_event(Gamepad::A_PRESSED)) {
pad.leds_on();
wait(0.1);
pad.leds_off();
wait(0.1);
- printf("Welcome\n");
}
+
+ main();
}
+
void how_to_play()
{
-
+ // Gives instructions on how to play
+ lcd.clear();
+ lcd.printString("Use the joy -",0,0);
+ lcd.printString("stick to move.",0,1);
+ lcd.printString("Press A to ",0,2);
+ lcd.printString("flip gravity.",0,3);
+ lcd.printString("Get the flags",0,4);
+ lcd.printString("to win!",0,5);
+ lcd.refresh();
+
+ // Loop until A button pressed
+ while ( !pad.check_event(Gamepad::A_PRESSED) ) {}
+
+ // Return to menu
+ menu();
}
void menu()
{
+ // Main Menu
int menu_option = 1;
-
-
while ( !pad.check_event(Gamepad::A_PRESSED) ) {
-
- if (pad.get_coord().y> 0.7f) {
+
+ // Read the joystick value and relate it to a menu option
+ if (pad.get_coord().y > 0.7f) {
menu_option = 1;
}
if (pad.get_coord().y < -0.7f) {
menu_option = 0;
}
+ // Draws main menu background image
lcd.drawSprite(0,0,48,84, (int *) menuScreen);
+
+ // Draws the arrow on the menu
if (menu_option == 1) {
lcd.drawSprite(40,10,7,4, (int *) arrow);
} else {
lcd.drawSprite(40,25,7,4, (int *) arrow);
}
+
lcd.refresh();
}
- if (menu_option == 1) {
+ // If the "how to play" option is selected run its display function
+ if (menu_option == 0) {
how_to_play();
}
}
@@ -121,24 +160,32 @@
game.init();
+ // Resets and starts the timers responsible for the game and music loop
game_timer.reset();
music_timer.reset();
game_timer.start();
music_timer.start();
-
+
+ // The tick times for both timers
const int MUSIC_TICK_TIME = 100; //125 microseconds
const int GAME_TICK_TIME = 100; // 100 millieconds
- while (1) {
+ while (true) {
+
+ // If the game timer is above the game tick time then main game process
+ // is ran
if (game_timer.read_ms() > GAME_TICK_TIME) {
- game.read_input(pad);
game.update(pad);
game.draw(lcd);
game_timer.reset();
+ if (game.game_won()) {
+ you_win();
+ }
}
-
+
+ // If the music timer is above the music tick time update the music object
if (music_timer.read_us() > MUSIC_TICK_TIME) {
- play.play_next();
+ music.play_next();
music_timer.reset();
}