ELEC2645 (2018/19) / Mbed 2 deprecated el17ttds

Dependencies:   mbed N5110_tf

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();
-}