Revenge of the Mouse

Dependencies:   4DGL-uLCD-SE EthernetInterface Game_Synchronizer LCD_fonts MMA8452 SDFileSystem mbed-rtos mbed wave_player

Fork of 2035_Tanks_Shell by ECE2035 Spring 2015 TA

Revision:
21:edfeb289b21f
Parent:
20:6a58052b0140
Child:
22:3c68eea5a609
--- a/main.cpp	Thu Oct 29 02:21:11 2015 +0000
+++ b/main.cpp	Thu Oct 29 03:56:30 2015 +0000
@@ -95,6 +95,10 @@
     sync.update();
 }
 
+
+// Initialize the game hardware. 
+// Call game_menu to find out which mode to play the game in (Single- or Multi-Player)
+// Initialize the game synchronizer.
 void game_init(void) {
     
     led1 = 0; led2 = 0; led3 = 0; led4 = 0;
@@ -112,6 +116,7 @@
     pc.printf("Initialized...\n");              // Let us know you finished initializing.
 }
 
+// Given the filename of a .wav file in the SD card, play the file over the speaker.
 void playSound(char * wav)
 {
     // open wav file
@@ -130,6 +135,29 @@
     fclose(wave_file);
 }
 
+// Display some kind of game over screen which lets us know who won.
+void game_over(int winner) {
+    if(winner == PLAYER1)      { pc.printf("Player 1 wins!\n"); }
+    else if(winner == PLAYER2) { pc.printf("Player 2 wins!\n"); }
+        
+    int i = 0;
+    while(1) {
+        sync.cls();
+        sync.locate(i, 9);
+        if(winner == PLAYER1) {
+            char msg[] = "P1 Wins!";
+            sync.puts(msg, sizeof(msg)); 
+        } else if(winner == PLAYER2) {
+            char msg[] = "P2 Wins!";
+            sync.puts(msg, sizeof(msg)); 
+        }
+        
+        sync.update();  
+        i = (i+1)%11;
+        wait(0.1);
+    }
+
+}
 int main (void) {
     
     int* p1_buttons;
@@ -155,7 +183,7 @@
         p2_buttons = sync.get_p2_buttons();
 
         sync.get_p1_accel_data(ax1, ay1, az1);
-        sync.get_p1_accel_data(ax2, ay2, az2);
+        sync.get_p2_accel_data(ax2, ay2, az2);
         
         led1 = p2_buttons[0] ^ p2_buttons[0];
         led2 = p2_buttons[1] ^ p2_buttons[1];
@@ -175,11 +203,20 @@
             }
             
             float dt = frame_timer.read();
-            int pix_color = b1.time_step(dt);
-            if(pix_color != CONVERT_24_TO_16_BPP(SKY_COLOR)) { pc.printf("Now it's P1's turn!\n"); whose_turn = PLAYER2; }
-            if(pix_color == CONVERT_24_TO_16_BPP(t1.tank_color) || pix_color == CONVERT_24_TO_16_BPP(t2.tank_color)) { 
+            int intersection_code = b1.time_step(dt);
+            
+            if(intersection_code != BULLET_NO_COLLISION || intersection_code == BULLET_OFF_SCREEN) { pc.printf("Now it's P2's turn!\n"); whose_turn = PLAYER2; }
+            
+            // If you have shot yourself, you lost.
+            if(intersection_code == CONVERT_24_TO_16_BPP(t1.tank_color)) { 
+                sync.update();  // Is this necessary?
+                winner = PLAYER2;
+                break;
+            }
+            
+            // If you have shot the other guy, you won!
+            if(intersection_code == CONVERT_24_TO_16_BPP(t2.tank_color)) { 
                 sync.update();
-                pc.printf("P2 wins!"); 
                 winner = PLAYER1;
                 break;
             }
@@ -202,11 +239,20 @@
             }
                 
             float dt = frame_timer.read();
-            int pix_color = b2.time_step(dt);
-            if(pix_color != CONVERT_24_TO_16_BPP(SKY_COLOR)) { pc.printf("Now it's P1's turn!\n"); whose_turn = PLAYER1; }
-            if(pix_color == CONVERT_24_TO_16_BPP(t1.tank_color) || pix_color == CONVERT_24_TO_16_BPP(t2.tank_color)) { 
+            int intersection_code = b2.time_step(dt);
+            
+            if(intersection_code != BULLET_NO_COLLISION || intersection_code == BULLET_OFF_SCREEN) { pc.printf("Now it's P1's turn!\n"); whose_turn = PLAYER1; }
+            
+            // If you shot yourself, you lost.
+            if(intersection_code == CONVERT_24_TO_16_BPP(t2.tank_color)) { 
+                sync.update();  // Is this necessary?
+                winner = PLAYER1;
+                break;
+            }
+            
+            // If you shot the other guy, you won!
+            if(intersection_code == CONVERT_24_TO_16_BPP(t1.tank_color)) { 
                 sync.update();
-                pc.printf("P1 wins!"); 
                 winner = PLAYER2;
                 break;
             }
@@ -217,22 +263,7 @@
     } 
     
     playSound("/sd/wavfiles/BUZZER.wav");
-        
-    // This dies after a while, and I have NO IDEA WHY.
-    int i = 0;
-    while(1) {
-        sync.cls();
-        sync.locate(i, 9);
-        if(winner == PLAYER1) {
-            char msg[] = "P1 Wins!";
-            sync.puts(msg, sizeof(msg)); 
-        } else if(winner == PLAYER2) {
-            char msg[] = "P2 Wins!";
-            sync.puts(msg, sizeof(msg)); 
-        }
-        
-        sync.update();  
-        i = (i+1)%10;
-        wait(0.1);
-    }
+    
+    game_over(winner);
+    
 }
\ No newline at end of file