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:3a0194c87afe
- Parent:
- 8:d1c04f0e4890
- Child:
- 11:fd7f7b531e50
--- a/main.cpp Sat May 11 08:23:54 2019 +0000
+++ b/main.cpp Sun May 12 16:21:08 2019 +0000
@@ -1,5 +1,3 @@
-#include "main.h"
-
/*
ELEC2645 Embedded Systems Project
School of Electronic & Electrical Engineering
@@ -10,19 +8,21 @@
Date: 11 / 05 / 2019
*/
+#include "main.h"
+
/////////////// objects ///////////////
N5110 lcd(PTC9,PTC0,PTC7,PTD2,PTD1,PTC11);
Gamepad pad;
Engine engine;
int main() {
-
- init();
+ lcd.init();
+ pad.init();
+ opening();
welcome();
- string option = menu();
- begin(option);
+ menu();
- lcd.printString(" END",0,5);
+ lcd.printString("PLEASE RESET",0,5);
lcd.refresh();
}
@@ -37,14 +37,133 @@
engine.init(MAP_WIDTH,MAP_HEIGHT,SCREEN_WIDTH,SCREEN_HEIGHT);
}
+void opening() {
+ int happy[11][11] = {
+ {0,0,1,1,1,1,1,1,1,0,0},
+ {0,1,1,0,0,0,0,0,1,1,0},
+ {1,1,0,0,0,0,0,0,0,1,1},
+ {1,0,0,1,1,0,1,1,0,0,1},
+ {1,0,0,1,1,0,1,1,0,0,1},
+ {1,0,0,0,0,0,0,0,0,0,1},
+ {1,0,1,1,0,0,0,1,1,0,1},
+ {1,0,0,1,1,0,1,1,0,0,1},
+ {1,1,0,0,1,1,1,0,0,1,1},
+ {0,1,1,0,0,0,0,0,1,1,0},
+ {0,0,1,1,1,1,1,1,1,0,0},
+ };
+ int mad[11][11] = {
+ {0,0,1,1,1,1,1,1,1,0,0},
+ {0,1,1,0,0,0,0,0,1,1,0},
+ {1,1,0,0,0,0,0,0,0,1,1},
+ {1,0,0,1,1,0,1,1,0,0,1},
+ {1,0,0,1,1,0,1,1,0,0,1},
+ {1,0,0,0,0,0,0,0,0,0,1},
+ {1,0,0,1,1,1,1,1,0,0,1},
+ {1,0,0,1,1,1,1,1,0,0,1},
+ {1,1,0,1,1,1,1,1,0,1,1},
+ {0,1,1,0,0,0,0,0,1,1,0},
+ {0,0,1,1,1,1,1,1,1,0,0},
+ };
+ int eye[21][21] = {
+ {0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
+ {0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
+ {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
+ {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
+ {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
+ {0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0},
+ {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0},
+ {1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1},
+ {1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1},
+ {1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1},
+ {1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1},
+ {1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1},
+ {1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1},
+ {1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1},
+ {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0},
+ {0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0},
+ {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
+ {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
+ {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
+ {0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
+ {0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
+ };
+ lcd.drawSprite(37, 19, 11, 11, (int *)happy);
+ lcd.refresh(),
+ wait(1.0);
+ for(int i = 84; i >= 0; i--) {
+ lcd.clear();
+ lcd.drawSprite(37, 19, 11, 11, (int *)happy);
+ lcd.drawRect(i, 0, 84, 48, FILL_BLACK);
+ lcd.refresh();
+ wait(0.07);
+ }
+ wait(0.5);
+ pad.tone(2000, 2);
+ lcd.setBrightness(0.5);
+ lcd.refresh();
+ wait(1.0);
+ for(int i = 0; i < 85; i++) {
+ lcd.clear();
+ lcd.drawSprite(i - 69, 1, 21, 21, (int *)eye);
+ lcd.drawSprite(i - 69, 27, 21, 21, (int *)eye);
+ lcd.drawSprite(49, 1, 21, 21, (int *)eye);
+ lcd.drawSprite(49, 27, 21, 21, (int *)eye);
+ lcd.drawSprite(37, 19, 11, 11, (int *)happy);
+ lcd.drawRect(i, 0, 84, 48, FILL_BLACK);
+ lcd.refresh();
+ wait(0.02);
+ }
+ wait(1.5);
+ lcd.clear();
+ lcd.printString(" THEY ",0,0);
+ lcd.printString(" SAW ",0,1);
+ lcd.printString(" WHAT ",0,2);
+ lcd.printString(" YOU ",0,3);
+ lcd.printString(" DID ",0,4);
+ lcd.printString(" !!! ",0,5);
+ lcd.refresh();
+ wait(2);
+ for(int i = 0; i < 40; i++) {
+ lcd.clear();
+ lcd.drawSprite(15 - i, 1, 21, 21, (int *)eye);
+ lcd.drawSprite(15 - i, 27, 21, 21, (int *)eye);
+ lcd.drawSprite(49 + i, 1, 21, 21, (int *)eye);
+ lcd.drawSprite(49 + i, 27, 21, 21, (int *)eye);
+ lcd.drawSprite(37, 19, 11, 11, (int *)mad);
+ lcd.refresh();
+ wait(0.1);
+ }
+ lcd.clear();
+ lcd.drawSprite(37, 19, 11, 11, (int *)mad);
+ lcd.printString("AND THEY STOLE",0,0);
+ lcd.printString(" YOUR BRIBES! ",0,5);
+ lcd.refresh();
+ wait(2.0);
+
+ lcd.clear();
+ lcd.printString(" KEEP ",0,0);
+ lcd.printString(" THE ",0,1);
+ lcd.printString(" SECRET ",0,2);
+ lcd.printString(" SAFE ",0,3);
+ lcd.printString(" !!! ",0,4);
+ lcd.refresh();
+ wait(1.5);
+
+ lcd.clear();
+ lcd.printString(" KILL ",0,0);
+ lcd.refresh();
+ wait(0.6);
+ lcd.printString(" THEM ",0,2);
+ lcd.refresh();
+ wait(0.6);
+ lcd.printString(" ALL! ",0,4);
+ lcd.refresh();
+ wait(1.0);
+ lcd.clear();
+}
+
void welcome() {
- // Draw coin
- // wait
- // Draw protagonist
- // wait
- // draw enemies
- // wait
- lcd.printString(" GAME! ",0,0);
+ lcd.printString(" THE SECRET!! ",0,0);
lcd.refresh();
wait(1.0);
lcd.printString("By Thomas",0,2);
@@ -67,129 +186,279 @@
}
}
-string menu() {
+void menu() {
- string option = "0";
+ option = 0;
lcd.init();
- while(option == "0") {
+ while(option == 0) {
- lcd.printString("A - Play Now",0,1);
- lcd.printString("B - Tutorial",0,2);
- lcd.printString("X - Highscores",0,3);
- lcd.printString("Y - Credits",0,4);
+ lcd.printString("A - Play Now",0,2);
+ lcd.printString("B - Tutorial",0,4);
lcd.refresh();
if (pad.check_event(Gamepad::A_PRESSED) == true) {
- option = "A";
+ option = 1;
} else if (pad.check_event(Gamepad::B_PRESSED) == true) {
- option = "B";
- } else if (pad.check_event(Gamepad::X_PRESSED) == true) {
- option = "X";
- } else if (pad.check_event(Gamepad::Y_PRESSED) == true) {
- option = "Y";
+ option = 2;
}
wait(0.2);
}
- if (option == "A") {
- init();
+ lcd.init();
+ pad.init();
+ if (option == 1) {
lcd.printString(" Play game? ",0,0);
- ask(option);
- } else if (option == "B") {
- init();
+ ask();
+ } else if (option == 2) {
lcd.printString("Play tutorial?",0,0);
- ask(option);
- }
- return option;
-}
-
-void ask(string option) {
-
- int start = -1;
- lcd.printString("Are you sure?",0,3);
- lcd.printString("Back? Start?",0,5);
- lcd.refresh();
-
- while (start == -1) {
-
- if (pad.check_event(Gamepad::START_PRESSED) == true) {
- start = 1;
- } else if(pad.check_event(Gamepad::BACK_PRESSED) == true) {
- start = 0;
- }
- wait(0.2);
- }
-
- if (start == 0) {
- menu();
+ ask();
}
}
-void begin(string option) {
-
+void ask() {
+ begin = 0;
+ lcd.printString("Are you sure?",0,3);
+ lcd.printString("Back? Start?",0,5);
+ lcd.refresh();
+ while (begin == 0) {
+ if (pad.check_event(Gamepad::START_PRESSED) == true) {
+ begin = 1;
+ } else if(pad.check_event(Gamepad::BACK_PRESSED) == true) {
+ begin = -1;
+ }
+ wait(0.2);
+ }
+ init();
+ if (begin == -1) {
+ menu();
+ } else {
init();
- if (option == "A") {
- play();
- } else if (option == "B") {
- tutorial();
- } else if (option == "X") {
- highscores();
+ if (option == 1) {
+ gameLoop();
} else {
- credits();
+ tutorial();
}
-}
-
-void play() { // My game loop
- lcd.refresh();
- wait(0.2);
- gameLoop();
+ }
}
void gameLoop() {
+ pad.tone(750, 1.0);
while ( (health > 0) && (pad.check_event(Gamepad::START_PRESSED) == false) ) {
lcd.refresh();
engine.read(pad);
engine.write(MAX_SPEED, pad, lcd);
engine.render(lcd);
health = engine.get_health();
- score = engine.get_score();
wait(0.1);
}
wait(0.2);
+ score = engine.get_score();
+ buffer[4];
+ sprintf(buffer, " %2d", score);
if (health > 0) {
- while (pad.check_event(Gamepad::A_PRESSED) == false) {
- lcd.clear();
- lcd.printString(" PAUSED ", 0, 0);
- //lcd.printString("SCORE = ", 0, 1);
- //lcd.printString(score, 60, 1);
- lcd.refresh();
- wait(0.5);
- lcd.printString("Press A", 0, 3);
- lcd.refresh();
- wait(0.5);
- }
- gameLoop();
+ paused();
} else {
- lcd.clear();
- lcd.printString("YOU HELLA DEAD", 0, 0);
+ died();
}
}
-void tutorial() {
+void paused() {
+ while (pad.check_event(Gamepad::A_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString(" PAUSED ", 0, 0);
+ lcd.printString(buffer, 0, 3);
+ lcd.printString("coins", 28, 3);
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press A", 0, 5);
+ lcd.refresh();
+ wait(0.5);
+ }
+ gameLoop();
+}
- lcd.printString(" Tutorial!! ",0,0);
+void died() {
+ wait(1.0);
+ lcd.clear();
+ lcd.printString(" KO ", 0, 0);
+ lcd.refresh();
+ for (int i = 0; i < 10; i++) {
+ lcd.setBrightness(1 - (i / 10) );
+ wait(0.15);
+ }
+ lcd.init();
+ pad.leds_on();
+ lcd.printString("EVERYONE KNOWS", 0, 0);
+ lcd.printString(buffer, 0, 3);
+ lcd.printString("coins", 28, 3);
+ lcd.printString("recollected", 0, 4);
+ while(pad.check_event(Gamepad::A_PRESSED) == false) {
+ lcd.printString("Press A.", 0, 5);
lcd.refresh();
+ wait(0.1);
+ lcd.printString("Press A .", 0, 5);
+ lcd.refresh();
+ wait(0.1);
+ lcd.printString("Press A .", 0, 5);
+ lcd.refresh();
+ wait(0.1);
+ }
+ menu();
}
-void highscores() {
-
- lcd.printString(" Highscores!! ",0,0);
+void tutorial() {
+ int mad[11][11] = {
+ {0,0,1,1,1,1,1,1,1,0,0},
+ {0,1,1,0,0,0,0,0,1,1,0},
+ {1,1,0,0,0,0,0,0,0,1,1},
+ {1,0,0,1,1,0,1,1,0,0,1},
+ {1,0,0,1,1,0,1,1,0,0,1},
+ {1,0,0,0,0,0,0,0,0,0,1},
+ {1,0,0,1,1,1,1,1,0,0,1},
+ {1,0,0,1,1,1,1,1,0,0,1},
+ {1,1,0,1,1,1,1,1,0,1,1},
+ {0,1,1,0,0,0,0,0,1,1,0},
+ {0,0,1,1,1,1,1,1,1,0,0},
+ };
+ int bribe[11][11] = {
+ {0,0,0,1,1,1,1,1,0,0,0},
+ {0,0,1,1,0,0,0,1,1,0,0},
+ {0,1,1,0,0,1,0,0,1,1,0},
+ {1,1,0,1,1,1,1,1,0,1,1},
+ {1,0,0,1,0,1,0,0,0,0,1},
+ {1,0,0,1,1,1,1,1,0,0,1},
+ {1,0,0,0,0,1,0,1,0,0,1},
+ {1,1,0,1,1,1,1,1,0,1,1},
+ {0,1,1,0,0,1,0,0,1,1,0},
+ {0,0,1,1,0,0,0,1,1,0,0},
+ {0,0,0,1,1,1,1,1,0,0,0},
+ };
+ int eye[21][21] = {
+ {0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
+ {0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
+ {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
+ {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
+ {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
+ {0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0},
+ {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0},
+ {1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1},
+ {1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1},
+ {1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1},
+ {1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1},
+ {1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1},
+ {1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1},
+ {1,1,1,1,1,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1},
+ {0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0},
+ {0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,0},
+ {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0},
+ {0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0},
+ {0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0},
+ {0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0},
+ {0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0},
+ };
+ lcd.printString(" Tutorial!! ",0,0);
+ lcd.refresh();
+ wait(1.0);
+ while (pad.check_event(Gamepad::B_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString("Shoot The Eyes", 0, 1);
+ lcd.printString("To Keep Your", 0, 2);
+ lcd.printString("Secret!", 0, 3);
+ lcd.drawSprite(42, 23, 21, 21, (int *)eye);
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press B", 0, 5);
+ lcd.refresh();
+ wait(0.5);
+ }
+ wait(0.3);
+ while (pad.check_event(Gamepad::B_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString("Use Joystick", 0, 1);
+ lcd.printString("To Move!", 0, 2);
+ lcd.drawSprite(37, 23, 11, 11, (int *)mad);
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press B", 0, 5);
lcd.refresh();
+ wait(0.5);
+ }
+ wait(0.3);
+ while (pad.check_event(Gamepad::B_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString("A To Shoot", 0, 1);
+ lcd.printString("Forward", 0, 2);
+ lcd.drawSprite(37, 23, 11, 11, (int *)mad);
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press B", 0, 5);
+ lcd.refresh();
+ wait(0.5);
+ }
+ wait(0.3);
+ while (pad.check_event(Gamepad::B_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString("B To Shoot", 0, 1);
+ lcd.printString("Backwards", 0, 2);
+ lcd.drawSprite(37, 23, 11, 11, (int *)mad);
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press B", 0, 5);
+ lcd.refresh();
+ wait(0.5);
+ }
+ wait(0.3);
+ while (pad.check_event(Gamepad::B_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString("AMMO | HEALTH", 0, 1);
+ lcd.printString(" LED ", 0,3);
+ lcd.printString("123 | 456", 0, 4);
+ pad.leds_on();
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press B", 0, 5);
+ pad.leds_off();
+ lcd.refresh();
+ wait(0.5);
+ }
+ wait(0.3);
+ while (pad.check_event(Gamepad::B_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString("Recover Your", 0, 0);
+ lcd.printString("Bribes Quickly", 0,1);
+ lcd.printString("From Enemies", 0,2);
+ lcd.drawSprite(37, 26, 11, 11, (int *)bribe);
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press B", 0, 5);
+ lcd.refresh();
+ wait(0.5);
+ }
+ wait(0.3);
+ while (pad.check_event(Gamepad::B_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString("Difficulty", 0, 1);
+ lcd.printString("Increases", 0,2);
+ lcd.printString("With Time", 0,3);
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press B", 0, 5);
+ lcd.refresh();
+ wait(0.5);
+ }
+ wait(0.3);
+ while (pad.check_event(Gamepad::B_PRESSED) == false) {
+ lcd.clear();
+ lcd.printString("Aim Well", 0, 1);
+ lcd.printString("And", 0,2);
+ lcd.printString("Stay Alive!", 0,3);
+ lcd.refresh();
+ wait(0.5);
+ lcd.printString("Press B", 0, 5);
+ lcd.refresh();
+ wait(0.5);
+ }
+ wait(0.3);
+ menu();
}
-
-void credits() {
-
- lcd.printString(" Credits!! ",0,0);
- lcd.refresh();
-}