ECE 4180 - Project

Dependencies:   4DGL-uLCD-SE SDFileSystem mbed-rtos mbed wave_player_appbd

Revision:
0:0080ab59b360
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Oct 26 18:34:25 2016 +0000
@@ -0,0 +1,364 @@
+#include "mbed.h"
+#include "uLCD_4DGL.h"
+#include "Joystick.h"
+#include "SDFileSystem.h"
+#include "wave_player.h"
+#include "rtos.h"
+
+uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin;
+Nav_Switch myNav( p12, p13, p14, p15, p16);
+DigitalIn pb(p20);
+
+//Analog Out Jack
+AnalogOut DACout(p18);
+//On Board Speaker
+PwmOut PWMout(p26);
+
+wave_player waver(&DACout,&PWMout);
+SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sck, cs
+int Hx2 = 50;
+int Px2 = 127;
+int count;
+void Game_Over(void);
+void Thunder(void);
+void Shock(void);
+void Slam(void);
+void Tackle(void);
+void display_attacks(void);
+int select_attack(void);
+void attack(int A);
+void redraw(void);
+void mew(void);
+void attack_sound();
+
+void sound(char * wav)
+{
+    FILE *wave_file;
+    wave_file=fopen(wav,"r");
+    PWMout.period(1.0/400000.0);
+    // play wav file
+    waver.play(wave_file);
+
+    // close wav file
+    fclose(wave_file);
+}
+int D = 0;
+void led1_thread(void const *argument)
+{
+        while(1){
+           sound("/sd/battle16.wav");   
+        }
+}
+
+int main()
+{
+    
+    pb.mode(PullUp); 
+    int Position;
+    Thread thread1(led1_thread);
+    uLCD.cls();
+    uLCD.media_init();
+    uLCD.set_sector_address(0x0000, 0x07CA);
+    uLCD.display_image(0,0);
+    
+    while (1) {
+        int test[2] = {99,99};
+        test[1] = test[0];
+        test[0] = pb;
+        if (test[0] != test[1] && test[0] == 0){
+            break;
+        }
+    }
+    uLCD.cls();
+    uLCD.set_sector_address(0x0000, 0x06AB);
+    for (int i = 70; i > 0; i--){
+    uLCD.display_image(i,50);
+    wait(.01);
+    }
+    uLCD.set_sector_address(0x0000, 0x06C6);
+    uLCD.display_image(0,3);
+    uLCD.locate(0,14);
+    uLCD.printf("Lance wants to \nfight!");
+    wait(2);
+    uLCD.set_sector_address(0x0000, 0x0707);
+    uLCD.display_image(0,3);
+    wait(.5);
+    uLCD.set_sector_address(0x0000, 0x0748);
+    uLCD.display_image(0,3);
+    wait(.5);
+    uLCD.set_sector_address(0x0000, 0x0789);
+    uLCD.display_image(0,3);
+    wait(.5);
+    redraw();
+    
+    while (1) {
+       Position = select_attack();
+        if (myNav.fire()){
+            attack(Position);
+            wait(.3);
+            mew();
+        }
+    }
+}
+
+void display_attacks(void){
+    uLCD.locate(0,14);
+    uLCD.printf("Tackle");
+    uLCD.locate(8,14);
+    uLCD.printf("Thunder");
+    uLCD.locate(0,15);
+    uLCD.printf("Slam");
+    uLCD.locate(8,15);
+    uLCD.printf("Shock");
+}
+
+int select_attack(void){
+    if (myNav.right()){
+        uLCD.rectangle(0, 111, 50, 119, BLACK);
+        uLCD.rectangle(0, 119, 50, 127, BLACK);
+        uLCD.rectangle(55, 119, 105, 127, BLACK);
+        
+        uLCD.rectangle(55, 111, 105, 119, 0x1F);
+        count = 1;
+        wait(.2);
+    }
+    if (myNav.up()){
+        uLCD.rectangle(55, 119, 105, 127, BLACK);
+        uLCD.rectangle(55, 111, 105, 119, BLACK);
+        uLCD.rectangle(0, 119, 50, 127, BLACK);
+        
+        uLCD.rectangle(0, 111, 50, 119, 0x1F);
+        count = 2;
+        wait(.2);
+    }
+    if (myNav.left()){
+        uLCD.rectangle(55, 119, 105, 127, BLACK);
+        uLCD.rectangle(0, 111, 50, 119, BLACK);
+        uLCD.rectangle(55, 111, 105, 119, BLACK);
+        
+        uLCD.rectangle(0, 119, 50, 127, 0x1F);
+        count = 3;
+        wait(.2);
+    }
+    if (myNav.down()){
+        uLCD.rectangle(0, 119, 50, 127, BLACK);
+        uLCD.rectangle(0, 111, 50, 119, BLACK);
+        uLCD.rectangle(55, 111, 105, 119, BLACK);
+        
+        uLCD.rectangle(55, 119, 105, 127, 0x1F);
+        count = 4;
+        wait(.2);
+    }
+    
+    return count;     
+}
+
+void attack(int A) {
+    if (A == 1){
+        uLCD.rectangle(55, 111, 105, 119, BLACK);
+        wait(.2);
+        uLCD.rectangle(55, 111, 105, 119, 0x1F);
+        Thunder();
+    }
+    if (A == 2){
+        uLCD.rectangle(0, 111, 50, 119, BLACK);
+        wait(.2);
+        uLCD.rectangle(0, 111, 50, 119, 0x1F);
+        Tackle();
+    }
+    if (A == 3){
+        uLCD.rectangle(0, 119, 50, 127, BLACK);
+        wait(.2);
+        uLCD.rectangle(0, 119, 50, 127, 0x1F);
+        Slam();
+    }
+    if (A == 4){
+        uLCD.rectangle(55, 119, 105, 127, BLACK);
+        wait(.2);
+        uLCD.rectangle(55, 119, 105, 127, 0x1F);
+        Shock();
+    }
+
+}
+
+
+void Thunder(void) {
+    uLCD.locate(0,14);
+    uLCD.set_sector_address(0x0000, 0x0000);
+    uLCD.display_image(0,0);
+    uLCD.printf("Pikachu used \nThunder!");
+    wait(1.5);
+    uLCD.set_sector_address(0x0000, 0x0249);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x028A);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x02CB);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x030C);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x034D);
+    uLCD.display_image(0,0);
+    wait(.2);
+    Hx2 = Hx2 - 20;
+    redraw();
+}
+
+void Shock(void) {
+    uLCD.locate(0,14);
+    uLCD.set_sector_address(0x0000, 0x0000);
+    uLCD.display_image(0,0);
+    uLCD.printf("Pikachu used \nShock!");
+    wait(1.5);
+    for (int i = 0; i < 3; i++){
+    uLCD.set_sector_address(0x0000, 0x038E);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x03CF);
+    uLCD.display_image(0,0);
+    wait(.2);
+    }
+    Hx2 = Hx2 - 5;
+    redraw();
+}
+
+void Slam(void){
+    uLCD.locate(0,14);
+    uLCD.set_sector_address(0x0000, 0x0000);
+    uLCD.display_image(0,0);
+    uLCD.printf("Pikachu used \nSlam!");
+    wait(1.5);
+    uLCD.set_sector_address(0x0000, 0x0041);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0082);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x00C3);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0104);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x00C3);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0082);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0041);
+    uLCD.display_image(0,0);
+    wait(.2);
+    Hx2 = Hx2 - 13;
+    redraw();
+}
+
+void Tackle(void){
+    uLCD.locate(0,14);
+    uLCD.set_sector_address(0x0000, 0x0000);
+    uLCD.display_image(0,0);
+    uLCD.printf("Pikachu used \nTackle!");
+    wait(1.5);
+    uLCD.set_sector_address(0x0000, 0x0000);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0145);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0186);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x01C7);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0208);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x01C7);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0186);
+    uLCD.display_image(0,0);
+    wait(.2);
+    Hx2 = Hx2 - 8;
+    redraw();
+}
+void redraw(void){
+    uLCD.set_sector_address(0x0000, 0x0000);
+    uLCD.display_image(0,0);
+    
+    display_attacks();
+    uLCD.locate(0,1);
+    uLCD.printf("HP");
+    uLCD.locate(11,6);
+    uLCD.printf("HP");
+    uLCD.filled_rectangle(0, 20, Hx2, 25, RED); // enemy Health
+    uLCD.filled_rectangle(77, 60, Px2, 65, RED); // player Health
+    if (Hx2 <= 0 || Px2 <= 0){
+        wait(2);
+        Game_Over();
+    }
+}
+
+void mew(void){
+    if(Hx2 % 2){
+    uLCD.locate(0,14);
+    uLCD.set_sector_address(0x0000, 0x0000);
+    uLCD.display_image(0,0);
+    uLCD.printf("Mew used \nPsybeam!");
+    wait(1.5);
+    uLCD.set_sector_address(0x0000, 0x0410);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0451);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0492);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x04D3);
+    uLCD.display_image(0,0);
+    wait(.2);
+    Px2 = Px2 - 9;
+    }
+    else {
+    uLCD.locate(0,14);
+    uLCD.set_sector_address(0x0000, 0x0000);
+    uLCD.display_image(0,0);
+    uLCD.printf("Mew used \nAncient Power!");
+    wait(1.5);
+    uLCD.set_sector_address(0x0000, 0x0514);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0555);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0514);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0596);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x05D7);
+    uLCD.display_image(0,0);
+    wait(.2);
+    uLCD.set_sector_address(0x0000, 0x0618);
+    uLCD.display_image(0,0);
+    wait(.2);
+    Px2 = Px2 - 12;    
+    }
+
+redraw();
+}
+
+void Game_Over(void){
+    uLCD.cls();
+    uLCD.set_sector_address(0x0000, 0x084C);
+    uLCD.display_image(0,0);
+    //wait(.2);
+    wait(30);
+    exit(0);
+}
\ No newline at end of file