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
two_player.h
- Committer:
- jford38
- Date:
- 2015-10-06
- Revision:
- 0:899c85cd266f
- Child:
- 1:0589ea36661b
File content as of revision 0:899c85cd266f:
#ifndef TWO_PLAYER_H__ #define TWO_PLAYER_H__ #include "uLCD_4DGL.h" #include "EthernetInterface.h" #define PLAYER1 true #define PLAYER2 false Serial pc(USBTX, USBRX); const char* PLAYER1_IP = "192.168.2.1"; const char* PLAYER2_IP = "192.168.2.2"; const int SERVER_PORT = 7; DigitalOut led(LED2); class uLCD_2P { public : int p1_p2; enum Color { LINE_CMD, BG_COLOR_CMD, CIRCLE_CMD, CLS_CMD, BUTTONS_CMD }; uLCD_2P(PinName tx, PinName rx, PinName rst, bool player) { p1_p2 = player; //LCD = new uLCD_4DGL (tx, rx, rst); } void init() { buffer_idx = 0; sock = new UDPSocket(); endpoint = new Endpoint(); eth = new EthernetInterface(); switch (p1_p2) { case PLAYER1: // Client eth->init(PLAYER1_IP, "255.255.255.0", "0.0.0.0"); eth->connect(); sock->init(); endpoint->set_address(PLAYER2_IP, SERVER_PORT); //sock.sendTo(endpoint, buffer, sizeof(buffer)); //int n = sock.receiveFrom(echo_server, in_buffer, sizeof(in_buffer)); break; case PLAYER2: // Server eth->init(PLAYER2_IP, "255.255.255.0", "0.0.0.0"); eth->connect(); sock->bind(SERVER_PORT); //sock.sendTo(endpoint, buffer, sizeof(buffer)); //int n = sock.receiveFrom(endpoint, buffer, sizeof(buffer)); break; } } void draw(int CMD, int a, int b, int c, int d, int e, char nArgs){ // Deal with overflows //if(buffer_idx + nArgs > 256) {//flush();} 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; // ERROR: nArgs > 5 buffer_idx += nArgs+1; } void cls(void) { draw(CLS_CMD, 0,0,0,0,0,0); } void background_color(int color) { draw(BG_COLOR_CMD, color, 0,0,0,0,1); } void set_button_state(int a, int b, int c, int d, int e) { draw(BUTTONS_CMD, a,b,c,d,e,5); } void line(int sx, int sy, int ex, int ey, int color) { //draw(LINE_CMD, sx, sy, ex, ey, color); } void update() { if(p1_p2 == PLAYER1) { sock->sendTo(*endpoint, (char*)buffer, (buffer_idx+1)*sizeof(buffer[0])); buffer_idx = 0; }else if(p1_p2 == PLAYER2) { int n = sock->receiveFrom(*endpoint, (char*)buffer, sizeof(buffer)/sizeof(buffer[0])); buffer[n] = '\0'; } int idx = 0; while(buffer[idx] != '\0') { char cmd = buffer[idx]; idx++; switch(cmd) { case BG_COLOR_CMD: //LCD->background_color(buffer[idx+1]); pc.printf("Change the background to %x\n", buffer[idx]); idx += 1; break; case LINE_CMD: break; case CLS_CMD: //LCD->cls(); pc.printf("Clear the screen!\n"); idx += 0; break; case BUTTONS_CMD: A_button = buffer[idx+0]; B_button = buffer[idx+1]; C_button = buffer[idx+2]; D_button = buffer[idx+3]; E_button = buffer[idx+4]; pc.printf("Button Values: %d %d %d %d %d\n", A_button, B_button, C_button, D_button, E_button); idx += 5; break; default: pc.printf("UNKNOWN CMD %d: This could get ugly!\n", cmd); idx += 0; } } } ~uLCD_2P() { sock->close(); eth->disconnect(); delete sock; delete endpoint; delete eth; } private: bool master_slave; int buffer[256]; int buffer_idx; UDPSocket* sock; Endpoint* endpoint; EthernetInterface* eth; uLCD_4DGL* LCD; int A_button; int B_button; int C_button; int D_button; int E_button; }; #endif