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:
9:ee330b1ba394
Parent:
8:e6dd05393290
Child:
10:5da9b27e050e
--- a/Game_Synchronizer/game_synchronizer.cpp	Thu Oct 22 09:52:53 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,204 +0,0 @@
-#include "game_synchronizer.h"
-
-extern Serial pc;
-
-Game_Synchronizer::Game_Synchronizer(bool player) {
-    p1_p2 = player;       
-}
-
-void Game_Synchronizer::init(uLCD_4DGL* lcd, int mode) { 
-
-    // Save a pointer to the local lcd.
-    LCD = lcd;
-    // Save the play mode. (Multi-player or Single-player)
-    play_mode = mode;
-    
-    // Initialize the idx into the send_buffer to zero.
-    buffer_idx = 0;
-    
-    // buttons is the array containing player two's button (and accelerometer) values.
-    // Initialize it to zero.
-    memset(buttons, 0, sizeof(buttons));
-    
-    switch (p1_p2) {
-        case PLAYER1:                               // If I am p1...
-        
-            // If play_mode is set to multi-player, establish the ethernet connection.
-            if(MULTI_PLAYER == play_mode) {
-                eth = new EthernetInterface();
-                eth->init(PLAYER1_IP, "255.255.255.0", "0.0.0.0"); 
-                eth->connect();
-                
-                sock = new TCPSocketConnection();
-                while(sock->connect(PLAYER2_IP, SERVER_PORT) < 0) {
-                    //pc.printf("Trying to connect.\n");
-                }
-            }
-            break;
-        case PLAYER2:                               // If I am p2...
-            
-            // If I am player 2, play_mode doesn't matter. I have to assume it's 
-            // set to multi-player and try to connect to p1.
-            eth = new EthernetInterface();
-            eth->init(PLAYER2_IP, "255.255.255.0", "0.0.0.0"); 
-            eth->connect();
-
-            server = new TCPSocketServer();
-            server->bind(SERVER_PORT);
-            server->listen();
-            sock = new TCPSocketConnection();
-            server->accept(*sock);
-            sock->set_blocking(false, 1500);
-            break;   
-    }
-}
-
-// Yes, this sucks. If you're smart, find a good way to do variable args and show me!
-// Look into template metaprogramming!
-
-void  Game_Synchronizer::draw(int CMD) {_draw(CMD, 0,0,0,0,0,0,0, 0); }
-void  Game_Synchronizer::draw(int CMD, int a) { _draw(CMD, a, 0,0,0,0,0,0, 1); }
-void  Game_Synchronizer::draw(int CMD, int a, int b) { _draw(CMD, a, b, 0,0,0,0,0, 2); }
-void  Game_Synchronizer::draw(int CMD, int a, int b, int c) { _draw(CMD, a, b, c, 0,0,0,0, 3); }
-void  Game_Synchronizer::draw(int CMD, int a, int b, int c, int d) { _draw(CMD, a, b, c, d, 0,0,0, 4); }
-void  Game_Synchronizer::draw(int CMD, int a, int b, int c, int d, int e) { _draw(CMD, a, b, c, d, e, 0,0, 5); }
-void  Game_Synchronizer::draw(int CMD, int a, int b, int c, int d, int e, int f) { _draw(CMD, a, b, c, d, e, f, 0, 6); }
-void  Game_Synchronizer::draw(int CMD, int a, int b, int c, int d, int e, int f, int g) { _draw(CMD, a, b, c, d, e, f, g, 7); }
-
-void Game_Synchronizer::_draw(int CMD, int a, int b, int c, int d, int e, int f, int g, char nArgs){
-    
-    // I haven't had time to deal with overflows of the buffer. If you are pushing tons of draw calls into the buffer,
-    // you could overrun it. This will cause bad things. (At a minimum, your stuff won't be drawn.)
-    // If you have this problem, try calling update in the middle of your draw calls to flush the buffer.
-    // Alternatively, you can increase ETH_PACKET_SIZE.
-    
-    if(nArgs > 7) { 
-        //pc.printf("Error in call to _draw(): nArgs > 7 not allowed!\n");
-        return;
-    }
-    
-    buffer[buffer_idx] = CMD;
-    if(nArgs >= 1) buffer[buffer_idx+1] = a;
-    if(nArgs >= 2) buffer[buffer_idx+2] = b;
-    if(nArgs >= 3) buffer[buffer_idx+3] = c;
-    if(nArgs >= 4) buffer[buffer_idx+4] = d;
-    if(nArgs >= 5) buffer[buffer_idx+5] = e;
-    if(nArgs >= 6) buffer[buffer_idx+6] = f;
-    if(nArgs >= 7) buffer[buffer_idx+7] = g;
-    // ERROR: nArgs > 7
-    
-    
-    buffer_idx += nArgs+1;
-}
-
-
-void Game_Synchronizer::background_color(int color)                                  { draw(BG_COLOR_CMD, color); }
-void Game_Synchronizer::line(int sx, int sy, int ex, int ey, int color)              { draw(LINE_CMD, sx, sy, ex, ey, color); }
-void Game_Synchronizer::circle(int x , int y , int radius, int color)                { draw(CIRCLE_CMD, x, y, radius, color); }
-void Game_Synchronizer::filled_circle(int x , int y , int radius, int color)         { draw(FILLED_CIRCLE_CMD, x, y, radius, color); }
-void Game_Synchronizer::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 Game_Synchronizer::rectangle(int a, int b, int c, int d, int col)               { draw(RECT_CMD, a, b, c, d, col); }
-void Game_Synchronizer::filled_rectangle(int a, int b, int c, int d, int col)        { draw(FILLED_RECT_CMD, a, b, c, d, col); }
-void Game_Synchronizer::pixel(int a, int b, int col)                                 { draw(PIX_CMD, a, b, col); }
-void Game_Synchronizer::cls(void)                                                    { draw(CLS_CMD); }
-
-/*void Game_Synchronizer::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...
-    // I'll get to it later.
-}*/
-
-// Reads don't need to be done on the slave side. Hopefully both sides match!
-int  Game_Synchronizer::read_pixel(int x, int y) { return LCD->read_pixel(x, y); }
-
-void Game_Synchronizer::set_button_state(int a, int b, int c, int d, int e) { 
-    buttons[0] = a; buttons[1] = b; buttons[2] = c; 
-    buttons[3] = d; buttons[4] = e;   
-}
-
-int* Game_Synchronizer::get_button_state() {
-    return buttons;
-}
-
-void Game_Synchronizer::update() {
-    int buffer_size = buffer_idx;
-    buffer_idx = 0;
-    
-    if(p1_p2 == PLAYER1 && MULTI_PLAYER == play_mode) {
-        sock->set_blocking(true, 100);
-        sock->send_all((char*)buffer, (buffer_size+1)*sizeof(buffer[0]));
-        
-        int n = sock->receive((char*)buttons, sizeof(buttons));
-        //if(n < 0) {pc.printf("RECEIVE ERROR.\n");}          
-    
-    }else if(p1_p2 == PLAYER2) {    
-        sock->set_blocking(true, 100);
-        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 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 0x%X\n", buffer[idx]);
-                idx += 1;
-                break;
-            case LINE_CMD:
-                //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 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 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);
-                idx += 0;
-        }
-    }
-}
-
-Game_Synchronizer::~Game_Synchronizer() {            
-    sock->close();
-    eth->disconnect();  
-    delete sock;
-    delete server;
-    delete eth; 
-}