4180 fire embed / Mbed 2 deprecated Fire_Mbed_2_0

Dependencies:   4DGL-uLCD-SE Motor SparkfunAnalogJoystick mbed

Fork of Fire_Mbed_2_0 by Jake Ramey

Revision:
3:275705c872e0
Parent:
2:ccfe87a5ccba
Child:
4:47c4ac917fd1
--- a/main.cpp	Tue May 02 03:37:35 2017 +0000
+++ b/main.cpp	Tue May 02 20:55:30 2017 +0000
@@ -6,7 +6,8 @@
 #define MapSecB 123
 
 #include "Motor.h"
-
+int units_recieved = 0;
+Ticker flipper;
 Motor m(p21, p24, p25); // pwm, fwd, rev
 
 #define FORTRESS 0
@@ -24,6 +25,10 @@
 DigitalIn pb6(p6);
 DigitalIn pb7(p7);
 DigitalIn pb8(p8);
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
 #define M_PI 3.14159265358979323846
 Serial pc(USBTX, USBRX);
 Serial Julio_Mbed(p28,p27);
@@ -74,8 +79,47 @@
 static person_t Wolfb;
 static person_t Wolfc;
 
-
-
+static person_t p_Princess;
+static person_t p_Thief;
+static person_t p_WhiteMage;
+static person_t p_Pirate;
+static person_t p_Lancer;
+static person_t p_Archer;
+static person_t p_Dragon;
+static person_t p_Sage;
+static person_t p_Caster;
+static person_t p_Assassin;
+static person_t p_Medic;
+static person_t p_Brigand;
+static person_t p_Wolf_a;
+static person_t p_Wolf_b;
+static person_t p_Wolf_c;
+static person_t p_Assassin_e;
+static person_t p_Thief_a;
+static person_t p_Thief_b;
+static person_t p_Thief_c;
+static person_t p_RedSpider;
+static person_t p_Spider_a;
+static person_t p_Spider_b;
+static person_t p_Spider_c;
+static person_t p_FallenHero;
+static person_t p_Mage_4a;
+static person_t p_Mage_4b;
+static person_t p_Mage_4c;
+static person_t p_TrueAssassin;
+static person_t p_Zombie_5a;
+static person_t p_Zombie_5b;
+static person_t p_Zombie_5c;
+static person_t p_General;
+static person_t p_Zombie_6a;
+static person_t p_Zombie_6b;
+static person_t p_Mage_6a;
+static person_t p_Mage_6b;
+static person_t p_Summoner;
+static person_t p_Zombie_7a;
+static person_t p_Zombie_7b;
+static person_t p_Zombie_7c;
+static person_t p_Zombie_7d;
 
 person_t* person_array[12] = {NULL,&Mc,&Ak,&Ap,&Healer,&Brigand,&Thief,&Soldier,&Wolf,&Wolfa,&Wolfb,&Wolfc};
     
@@ -114,6 +158,12 @@
 void ai_movement(void);    
 void ask_nextstage(void);
 void load_units_map(void);
+void combatPhase(void);
+void sendMap(void);
+void sendUnits (void);
+void receiveMap (void);
+void receiveUnits (void);
+void waitForAck (void);
 int state;
 int cursor_x;
 int cursor_y;
@@ -133,6 +183,7 @@
     cursor_y = 0;
     state = 0;
     person_t* temp_persona;
+    flipper.attach(&waitForAck, 1);
     while(1) {
         if (state == 0){
             selection = user_selecting();}
@@ -198,17 +249,8 @@
                 castledrawn = 1;
         }
     }*/
-    //get map
-    //get units
-    //send julio the char[2] {255, map/track number}
-    uLCD.printf("Load Map\r\n");
-    //put read from gui map code here
-    uLCD.printf("Load Units\r\n");
-    //put read units from gui code here
-    uLCD.printf("New Game\r\n");
-    uLCD.printf("Or Continue\r\n");
-    uLCD.set_sector_address(Mapx, Mapy);
-    uLCD.display_image(0,0);
+    //uLCD.set_sector_address(Mapx, Mapy);
+    //uLCD.display_image(0,0);
     Mc.job = Lord;
     Mc.v = 1;
     Mc.FoF = USER;
@@ -218,8 +260,8 @@
     Mc.yloc = 3;
     Mc.remain_moves = Mc.job.movement;
     Mc.health = Mc.job.maxHealth;
-    uLCD.set_sector_address(Mc.job.x, Mc.job.y);
-    uLCD.display_image((Mc.xloc*16),(Mc.yloc*16));
+    //uLCD.set_sector_address(Mc.job.x, Mc.job.y);
+    //uLCD.display_image((Mc.xloc*16),(Mc.yloc*16));
     
     Ak.job = Armor;
     Ak.v = 2;
@@ -231,10 +273,10 @@
     Ak.remain_moves = Ak.job.movement;
     Ak.health = Ak.job.maxHealth;
     
-    uLCD.set_sector_address(Ak.job.x, Ak.job.y);
-    uLCD.display_image((Ak.xloc*16),(Ak.yloc*16));
+    //uLCD.set_sector_address(Ak.job.x, Ak.job.y);
+    //uLCD.display_image((Ak.xloc*16),(Ak.yloc*16));
     
-    Ap.job = Pirate;
+    Ap.job = j_Pirate;
     Ap.v = 3;
     Ap.FoF = USER;
     Ap.xlast = 2;
@@ -244,10 +286,10 @@
     Ap.remain_moves = Ap.job.movement;
     Ap.health = Ap.job.maxHealth;
     
-    uLCD.set_sector_address(Ap.job.x, Ap.job.y);
-    uLCD.display_image((Ap.xloc*16),(Ap.yloc*16));
+    //uLCD.set_sector_address(Ap.job.x, Ap.job.y);
+    //uLCD.display_image((Ap.xloc*16),(Ap.yloc*16));
     
-    Healer.job = Cleric;
+    Healer.job = j_Cleric;
     Healer.v = 4;
     Healer.FoF = USER;
     Healer.xlast = 0;
@@ -257,8 +299,8 @@
     Healer.remain_moves = Healer.job.movement;
     Healer.health = Healer.job.maxHealth;
     
-    uLCD.set_sector_address(Healer.job.x, Healer.job.y);
-    uLCD.display_image((Healer.xloc*16),(Healer.yloc*16));
+    //uLCD.set_sector_address(Healer.job.x, Healer.job.y);
+    //uLCD.display_image((Healer.xloc*16),(Healer.yloc*16));
     
     Wolf.job = Beast;
     Wolf.v = 8;
@@ -270,9 +312,9 @@
     Wolf.remain_moves = Wolf.job.movement;
     Wolf.health = Wolf.job.maxHealth;
     
-    uLCD.set_sector_address(Wolf.job.x, Wolf.job.y);
-    uLCD.display_image((Wolf.xloc*16),(Wolf.yloc*16));    
-    unitsMap1_1[Wolf.yloc][Wolf.xloc] = Wolf.v;
+    //uLCD.set_sector_address(Wolf.job.x, Wolf.job.y);
+    //uLCD.display_image((Wolf.xloc*16),(Wolf.yloc*16));    
+    //unitsMap1_1[Wolf.yloc][Wolf.xloc] = Wolf.v;
     
     Wolfa.job = Beast;
     Wolfa.v = 9;
@@ -284,9 +326,9 @@
     Wolfa.remain_moves = Wolfa.job.movement;
     Wolfa.health = Wolfa.job.maxHealth;
     
-    uLCD.set_sector_address(Wolfa.job.x, Wolfa.job.y);
-    uLCD.display_image((Wolfa.xloc*16),(Wolfa.yloc*16));    
-    unitsMap1_1[Wolfa.yloc][Wolfa.xloc] = Wolfa.v;
+    //uLCD.set_sector_address(Wolfa.job.x, Wolfa.job.y);
+    //uLCD.display_image((Wolfa.xloc*16),(Wolfa.yloc*16));    
+    //unitsMap1_1[Wolfa.yloc][Wolfa.xloc] = Wolfa.v;
     
     Wolfb.job = Beast;
     Wolfb.v = 10;
@@ -298,9 +340,9 @@
     Wolfb.remain_moves = Wolfb.job.movement;
     Wolfb.health = Wolfb.job.maxHealth;
     
-    uLCD.set_sector_address(Wolfb.job.x, Wolfb.job.y);
-    uLCD.display_image((Wolfb.xloc*16),(Wolfb.yloc*16));    
-    unitsMap1_1[Wolfb.yloc][Wolfb.xloc] = Wolfb.v;
+    //uLCD.set_sector_address(Wolfb.job.x, Wolfb.job.y);
+    //uLCD.display_image((Wolfb.xloc*16),(Wolfb.yloc*16));    
+    //unitsMap1_1[Wolfb.yloc][Wolfb.xloc] = Wolfb.v;
     
     
     Wolfc.job = Beast;
@@ -313,15 +355,27 @@
     Wolfc.remain_moves = Wolfc.job.movement;
     Wolfc.health = Wolfc.job.maxHealth;
     
-    uLCD.set_sector_address(Wolfc.job.x, Wolfc.job.y);
-    uLCD.display_image((Wolfc.xloc*16),(Wolfc.yloc*16));    
-    unitsMap1_1[Wolfc.yloc][Wolfc.xloc] = Wolfc.v;
+    //uLCD.set_sector_address(Wolfc.job.x, Wolfc.job.y);
+    //uLCD.display_image((Wolfc.xloc*16),(Wolfc.yloc*16));    
+    //unitsMap1_1[Wolfc.yloc][Wolfc.xloc] = Wolfc.v;
+    
+    //unitsMap1_1[Mc.yloc][Mc.xloc] = Mc.v;
+    //unitsMap1_1[Ak.yloc][Ak.xloc] = Ak.v;
+    //unitsMap1_1[Ap.yloc][Ap.xloc] = Ap.v;
+    //unitsMap1_1[Healer.yloc][Healer.xloc] = Healer.v;
     
-    unitsMap1_1[Mc.yloc][Mc.xloc] = Mc.v;
-    unitsMap1_1[Ak.yloc][Ak.xloc] = Ak.v;
-    unitsMap1_1[Ap.yloc][Ap.xloc] = Ap.v;
-    unitsMap1_1[Healer.yloc][Healer.xloc] = Healer.v;
-    
+    //get map
+    //get units
+    //send julio the char[2] {255, map/track number}
+    uLCD.printf("Load Map\r\n");
+    //put read from gui map code here
+    uLCD.printf("Load Units\r\n");
+    //put read units from gui code here
+    uLCD.printf("New Game\r\n");
+    uLCD.printf("Or Continue\r\n");
+    while(units_recieved == 0){
+        wait(.5);}
+    load_units_map();
     return;
 }
 int user_selecting(void){    
@@ -736,8 +790,8 @@
     int notdead;
     notdead = 0;
     person_t* ai_unit;
-    for( ai_r = 0; ai_r<7; ai_r++){
-        for( ai_col = 0; ai_col<7; ai_col++){
+    for( ai_r = 0; ai_r<8; ai_r++){
+        for( ai_col = 0; ai_col<8; ai_col++){
             if (unitsMap1_1[ai_r][ai_col] > 10){
                 notdead = 1;
                 ai_unit = person_array[unitsMap1_1[ai_r][ai_col]];
@@ -1013,16 +1067,16 @@
     tiles tile_draw; 
     person_t* draw_unit;
     //draw map
-    for( y_num = 0; y_num<7; y_num++){
-        for( x_num = 0; x_num<7; x_num++){
+    for( y_num = 0; y_num<8; y_num++){
+        for( x_num = 0; x_num<8; x_num++){
             tile_draw = tile_array[Map1_1[y_num][x_num]];
             uLCD.set_sector_address(tile_draw.x,tile_draw.y);
             uLCD.display_image((16*x_num),(16*y_num));
         }
     }
     //load and draw units on the map
-    for( y_num = 0; y_num<7; y_num++){
-        for( x_num = 0; x_num<7; x_num++){
+    for( y_num = 0; y_num<8; y_num++){
+        for( x_num = 0; x_num<8; x_num++){
             if(unitsMap1_1[y_num][x_num] != 0){
                draw_unit = person_array[unitsMap1_1[y_num][x_num]];
                draw_unit->xloc = x_num;
@@ -1040,6 +1094,106 @@
     
     
     
-    
+    units_recieved=0;
     return;    
+}
+
+
+ 
+void sendMap()
+{
+    for(int i = 0; i < 8; i++) 
+    {
+        for(int j = 0; j < 8; j++)
+        {
+            pc.putc(Map1_1[i][j]);
+        }
+    }
+}
+ 
+void sendUnits()
+{
+    for(int a = 0; a < 8; a++) 
+    {
+        for(int b = 0; b < 8; b++)
+        {
+            pc.putc(unitsMap1_1[a][b]);
+        }
+    }
+}
+ 
+void receiveMap()
+{
+    for(int c = 0; c < 8; c++)
+    {
+        for(int d = 0; d < 8; d++)
+        {
+            while(!pc.readable()){}
+            Map1_1[c][d] = pc.getc();
+        }   
+    }
+}
+ 
+void receiveUnits()
+{
+    for(int c = 0; c < 8; c++)
+    {
+        for(int d = 0; d < 8; d++)
+        {
+            while(!pc.readable()){}
+            unitsMap1_1[c][d] = pc.getc();
+        }   
+    }
+    units_recieved = 1;
+    for(int q = 0; q < 8; q++)
+    {
+        for(int w = 0; w < 8; w++)
+        { 
+            uLCD.printf("%d", Map1_1[q][w]);
+        }   
+    }
+}
+ 
+void waitForAck()
+{
+    char command[2];
+    command[0] = '0';
+    led3=!led3;
+    while(pc.readable())
+    {
+        led4=!led4;
+        command[0] = pc.getc();
+        command[1] = pc.getc();
+        if(strcmp(command, "rm")==0)
+        {
+            sendMap();
+            led1 = !led1;
+        }
+        if(strcmp(command, "ru")==0)
+        {
+            sendUnits();
+            led1 = !led1;
+            
+            uLCD.printf("enter combat phase");
+            combatPhase();
+        }
+        if(strcmp(command, "sm")==0)
+        {            
+            receiveMap();
+            led2 = !led2;
+        }
+        if(strcmp(command, "su")==0)
+        {
+            receiveUnits();
+            led2 = !led2;
+        }
+    }
+}
+ 
+void combatPhase()
+{
+    pc.putc('1');
+    wait(5);
+    pc.putc('2');
+    led4 = 1;
 }
\ No newline at end of file