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:
5:cfec780c935b
Parent:
4:d8bd8b41468d
--- a/two_player.h	Thu Oct 15 19:57:51 2015 +0000
+++ b/two_player.h	Thu Oct 15 22:07:40 2015 +0000
@@ -26,7 +26,7 @@
 
     enum Color
     {
-        CLS_CMD=1,
+        CLS_CMD,
         BG_COLOR_CMD,
         LINE_CMD,
         CIRCLE_CMD,
@@ -34,13 +34,12 @@
         TRI_CMD,
         RECT_CMD,
         FILLED_RECT_CMD,
-        PIX_CMD,
-        PEN_SZ_CMD
+        PIX_CMD
     };
 
     uLCD_2P(PinName tx, PinName rx, PinName rst, bool player) {
         p1_p2 = player;
-        //LCD = new uLCD_4DGL (tx, rx, rst);        
+        LCD = new uLCD_4DGL (tx, rx, rst);        
     }
     
     void init() {
@@ -115,17 +114,16 @@
     }
     
    
-    void background_color(int color) { draw(BG_COLOR_CMD, color); }
-    void line(int sx, int sy, int ex, int ey, int color) { draw(LINE_CMD, sx, sy, ex, ey, color); }
-    void circle(int x , int y , int radius, int color) { draw(CIRCLE_CMD, x, y, radius, color); }
-    void filled_circle(int x , int y , int radius, int color) { draw(FILLED_CIRCLE_CMD, x, y, radius, color); }
+    void background_color(int color)                                  { draw(BG_COLOR_CMD, color); }
+    void line(int sx, int sy, int ex, int ey, int color)              { draw(LINE_CMD, sx, sy, ex, ey, color); }
+    void circle(int x , int y , int radius, int color)                { draw(CIRCLE_CMD, x, y, radius, color); }
+    void filled_circle(int x , int y , int radius, int color)         { draw(FILLED_CIRCLE_CMD, x, y, radius, color); }
     void triangle(int a, int b, int c, int d , int e, int f, int col) { draw(TRI_CMD, a, b, c, d, e, f, col); }
-    void rectangle(int a, int b, int c, int d, int col) { draw(RECT_CMD, a, b, c, d, col); }
-    void filled_rectangle(int a, int b, int c, int d, int col) { draw(FILLED_RECT_CMD, a, b, c, d, col); }
-    void pixel(int a, int b, int col) { draw(PIX_CMD, a, b, col); }
-    void cls(void) { draw(CLS_CMD); }
+    void rectangle(int a, int b, int c, int d, int col)               { draw(RECT_CMD, a, b, c, d, col); }
+    void filled_rectangle(int a, int b, int c, int d, int col)        { draw(FILLED_RECT_CMD, a, b, c, d, col); }
+    void pixel(int a, int b, int col)                                 { draw(PIX_CMD, a, b, col); }
+    void cls(void)                                                    { draw(CLS_CMD); }
     
-    void pen_size(char sz) { draw(PEN_SZ_CMD, sz); }
     /*void BLIT(int x1, int y1, int x2, int y2, int *colors) {
         int size = abs((x1-x2)*(y1-y2));
         // pad to a multiple of 4 and memset buffer...
@@ -145,11 +143,13 @@
     }
     
     void update() {
+        int buffer_size;
         sock->set_blocking(true, 100);
         if(p1_p2 == PLAYER1) {
-            sock->send_all((char*)buffer, (buffer_idx+1)*sizeof(buffer[0]));
+            buffer_size = buffer_idx;
+            sock->send_all((char*)buffer, (buffer_size+1)*sizeof(buffer[0]));
             buffer_idx = 0;
- 
+            
             int n = sock->receive((char*)buttons, sizeof(buttons));
             if(n < 0) {pc.printf("RECEIVE ERROR.\n");}          
         
@@ -157,40 +157,64 @@
             int n = sock->receive((char*)buffer, sizeof(buffer));  
             if(n < 0) {pc.printf("RECEIVE ERROR.\n");}
             buffer[n] = '\0';   
+            buffer_size = n/sizeof(buffer[0]) - 1;
+            
             sock->send_all((char*)buttons, sizeof(buttons));          
         }
-        
-        int i = 0;    
-        pc.printf("Buffer: ");    
-        while(buffer[i] != '\0') {
+            
+        //pc.printf("Buffer: ");    
+        /*for(int i=0; i<buffer_size; i++) {
             pc.printf("%d ", buffer[i]);
             i++;
         }
         pc.printf("\n");
-        
+        */
         int idx = 0;
-        while(buffer[idx] != '\0') {
+        while(idx < buffer_size) {
             char cmd = buffer[idx];
             idx++;
             
             switch(cmd) {
+                case CLS_CMD:
+                    LCD->cls();
+                    //pc.printf("Clear the screen!\n");
+                    break;
                 case BG_COLOR_CMD:
-                    //LCD->background_color(buffer[idx+1]);
-                    pc.printf("Change the background to %x\n", buffer[idx]);
+                    LCD->background_color(buffer[idx+1]);
+                    //pc.printf("Change the background to 0x%X\n", buffer[idx]);
                     idx += 1;
                     break;
                 case LINE_CMD:
-                    pc.printf("LINE: (%d, %d) - (%d, %d) COLOR: %X\n", buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
+                    //pc.printf("LINE: (%d, %d) - (%d, %d) COLOR: 0x%X\n", buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
+                    LCD->line(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
                     idx += 5;
                     break;
-                case CLS_CMD:
-                    //LCD->cls();
-                    pc.printf("Clear the screen!\n");
+                case CIRCLE_CMD:
+                    //pc.printf("CIRCLE: (%d, %d), r=%d\n", buffer[idx], buffer[idx+1], buffer[idx+2]);
+                    LCD->circle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3]);
+                    idx += 4;
+                    break;
+                case FILLED_CIRCLE_CMD:
+                    //pc.printf("CIRCLE: (%d, %d), r=%d\n", buffer[idx], buffer[idx+1], buffer[idx+2]);
+                    LCD->filled_circle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3]);
+                    idx += 4;
                     break;
-                case CIRCLE_CMD:
-                    //LCD->cls();
-                    pc.printf("CIRCLE: (%d, %d), r=%d\n", buffer[idx], buffer[idx+1], buffer[idx+2]);
-                    idx += 4;
+                case TRI_CMD:
+                    //pc.printf("CIRCLE: (%d, %d), r=%d\n", buffer[idx], buffer[idx+1], buffer[idx+2]);
+                    LCD->triangle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4], buffer[idx+5], buffer[idx+6]);
+                    idx += 7;
+                    break;
+                case RECT_CMD:
+                    LCD->rectangle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
+                    idx += 5;
+                    break;
+                case FILLED_RECT_CMD:
+                    LCD->filled_rectangle(buffer[idx], buffer[idx+1], buffer[idx+2], buffer[idx+3], buffer[idx+4]);
+                    idx += 5;
+                    break;
+                case PIX_CMD:
+                    LCD->pixel(buffer[idx], buffer[idx+1], buffer[idx+2]);
+                    idx += 3;
                     break;
                 default:
                     pc.printf("UNKNOWN CMD %d: This could get ugly!\n", cmd);
@@ -207,10 +231,10 @@
         delete eth; 
     }
  
-    private:
+    //private:
         bool master_slave;
         
-        int buffer[256];
+        int buffer[1024];
         int  buffer_idx;
         
         TCPSocketServer* server;