multiplayer pong game for LPC 1768

Dependencies:   mbed MbedJSONValue mbed-rtos Adafruit_ST7735 Adafruit_GFX EthernetInterface DebouncedInterrupt

Committer:
vsoltan
Date:
Sat Nov 28 02:54:12 2020 +0000
Revision:
31:f70cf03c8ef9
Parent:
30:59e9a5409e65
Child:
32:7cbf4d9a82af
removed print statements ;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsoltan 18:32fce82690a1 1
donatien 1:8e1d4987eb90 2 #include "mbed.h"
vsoltan 11:d0a105f6743f 3 #include "network.h"
vsoltan 15:9d90f68e53da 4 #include "gamestate.h"
vsoltan 16:7fd48cda0773 5 #include "graphics.h"
denizguler 13:95d44f7855ca 6 #include "DebouncedInterrupt.h"
vsoltan 12:91affff3be75 7
vsoltan 26:ebadab157abe 8 #define DEBOUNCE 25
vsoltan 12:91affff3be75 9
denizguler 13:95d44f7855ca 10 DebouncedInterrupt leftButton(p21);
denizguler 13:95d44f7855ca 11 DebouncedInterrupt middleButton(p22);
denizguler 13:95d44f7855ca 12 DebouncedInterrupt rightButton(p23);
vsoltan 12:91affff3be75 13
vsoltan 12:91affff3be75 14 EthernetInterface eth;
vsoltan 12:91affff3be75 15 UDPSocket sock;
vsoltan 12:91affff3be75 16 Endpoint nist;
vsoltan 12:91affff3be75 17
vsoltan 14:6b20a930e1cb 18 volatile int sendFlag = 0;
vsoltan 14:6b20a930e1cb 19 volatile int moveData = 0;
vsoltan 17:32ae1f106002 20 volatile int menuPress = 0;
denizguler 13:95d44f7855ca 21
vsoltan 17:32ae1f106002 22 // interrupts service routines
vsoltan 17:32ae1f106002 23
vsoltan 17:32ae1f106002 24 void pressButtonMenu(void) {
vsoltan 17:32ae1f106002 25 menuPress = 1;
vsoltan 17:32ae1f106002 26 }
vsoltan 17:32ae1f106002 27
vsoltan 17:32ae1f106002 28 void pressLeftGame( void ) {
vsoltan 14:6b20a930e1cb 29 sendFlag = 1;
vsoltan 26:ebadab157abe 30 moveData -= 5;
vsoltan 12:91affff3be75 31 }
vsoltan 12:91affff3be75 32
vsoltan 17:32ae1f106002 33 void pressRightGame() {
vsoltan 14:6b20a930e1cb 34 sendFlag = 1;
vsoltan 26:ebadab157abe 35 moveData += 5;
vsoltan 12:91affff3be75 36 }
emilmont 6:25aad2d88749 37
emilmont 6:25aad2d88749 38 int main() {
vsoltan 19:58cc5465f647 39 initEthernet(&eth, &sock, &nist);
vsoltan 17:32ae1f106002 40 Graphics *gfx = new Graphics();
vsoltan 19:58cc5465f647 41
vsoltan 17:32ae1f106002 42 // attach ISR
vsoltan 17:32ae1f106002 43 leftButton.attach(&pressButtonMenu, IRQ_RISE, DEBOUNCE);
vsoltan 17:32ae1f106002 44 middleButton.attach(&pressButtonMenu, IRQ_RISE, DEBOUNCE);
vsoltan 17:32ae1f106002 45 rightButton.attach(&pressButtonMenu, IRQ_RISE, DEBOUNCE);
vsoltan 12:91affff3be75 46
vsoltan 17:32ae1f106002 47 MbedJSONValue serverResponse;
vsoltan 24:05eb0b0ab554 48 MbedJSONValue serverRequest;
vsoltan 15:9d90f68e53da 49
vsoltan 18:32fce82690a1 50 char connectionRequest[] = "{\"type\": \"connected\"}";
vsoltan 29:4708bfb863cb 51 char tmp_buffer[256];
vsoltan 29:4708bfb863cb 52
vsoltan 29:4708bfb863cb 53 string serverRequestContent = "";
vsoltan 29:4708bfb863cb 54 int requestLength = 0;
vsoltan 29:4708bfb863cb 55 char *serverRequestPayload = NULL;
vsoltan 14:6b20a930e1cb 56
vsoltan 17:32ae1f106002 57 gfx->renderLaunchScreen();
vsoltan 15:9d90f68e53da 58
vsoltan 17:32ae1f106002 59 while (1) { // keep program running
vsoltan 17:32ae1f106002 60 if (menuPress) {
vsoltan 17:32ae1f106002 61 GameState *gs = new GameState();
vsoltan 17:32ae1f106002 62
vsoltan 18:32fce82690a1 63 // request an open lobby from the server
vsoltan 29:4708bfb863cb 64 sock.sendTo(nist, connectionRequest, strlen(connectionRequest));
vsoltan 18:32fce82690a1 65
vsoltan 17:32ae1f106002 66 // change ISRs to game controls
vsoltan 17:32ae1f106002 67 leftButton.attach(&pressLeftGame, IRQ_RISE, DEBOUNCE);
vsoltan 27:fcc5fee18a24 68 middleButton.reset();
vsoltan 17:32ae1f106002 69 rightButton.attach(&pressRightGame, IRQ_RISE, DEBOUNCE);
vsoltan 17:32ae1f106002 70
vsoltan 30:59e9a5409e65 71 while (!gs->isConnected() || !gs->done()) {
vsoltan 17:32ae1f106002 72 if (sendFlag != 0) {
vsoltan 24:05eb0b0ab554 73 serverRequest["type"] = "move";
vsoltan 24:05eb0b0ab554 74 serverRequest["hash"] = "jaredyeagersflipflop";
vsoltan 24:05eb0b0ab554 75 serverRequest["player"] = gs->getLocalPlayerNum();
vsoltan 24:05eb0b0ab554 76 serverRequest["delta"] = (int)moveData;
vsoltan 24:05eb0b0ab554 77
vsoltan 29:4708bfb863cb 78 serverRequestContent = serverRequest.serialize();
vsoltan 29:4708bfb863cb 79 requestLength = serverRequestContent.size();
vsoltan 29:4708bfb863cb 80 serverRequestPayload = (char *)serverRequestContent.c_str();
vsoltan 17:32ae1f106002 81 sendFlag = 0;
vsoltan 17:32ae1f106002 82 moveData = 0;
vsoltan 29:4708bfb863cb 83 sock.sendTo(nist, serverRequestPayload, requestLength);
vsoltan 17:32ae1f106002 84 }
vsoltan 29:4708bfb863cb 85 int bytesRead = sock.receiveFrom(nist, tmp_buffer, sizeof(tmp_buffer));
vsoltan 29:4708bfb863cb 86 tmp_buffer[bytesRead] = 0;
vsoltan 17:32ae1f106002 87 if (bytesRead > 0) {
vsoltan 29:4708bfb863cb 88 parse(serverResponse, tmp_buffer);
vsoltan 27:fcc5fee18a24 89 gs->updateAndRender(&serverResponse, gfx);
vsoltan 17:32ae1f106002 90 }
vsoltan 17:32ae1f106002 91 wait(.1);
vsoltan 15:9d90f68e53da 92 }
vsoltan 29:4708bfb863cb 93 MbedJSONValue disconnectRequest;
vsoltan 29:4708bfb863cb 94 disconnectRequest["hash"] = "jaredyeagersflipflop";
vsoltan 29:4708bfb863cb 95 disconnectRequest["type"] = "disconnect";
vsoltan 27:fcc5fee18a24 96
vsoltan 29:4708bfb863cb 97 string disconnectRequestContent = disconnectRequest.serialize();
vsoltan 29:4708bfb863cb 98 int len = disconnectRequestContent.size();
vsoltan 29:4708bfb863cb 99 char *disconnectRequestPayload = (char *)disconnectRequestContent.c_str();
vsoltan 27:fcc5fee18a24 100
vsoltan 29:4708bfb863cb 101 sock.sendTo(nist, disconnectRequestPayload, len);
vsoltan 29:4708bfb863cb 102 gfx->renderGameOver(gs);
vsoltan 29:4708bfb863cb 103
vsoltan 29:4708bfb863cb 104 // reset the game
vsoltan 27:fcc5fee18a24 105 leftButton.attach(&pressButtonMenu, IRQ_RISE, DEBOUNCE);
vsoltan 27:fcc5fee18a24 106 middleButton.attach(&pressButtonMenu, IRQ_RISE, DEBOUNCE);
vsoltan 27:fcc5fee18a24 107 rightButton.attach(&pressButtonMenu, IRQ_RISE, DEBOUNCE);
vsoltan 27:fcc5fee18a24 108
vsoltan 17:32ae1f106002 109 menuPress = 0;
vsoltan 28:a26a43cdaea8 110 delete gs;
vsoltan 14:6b20a930e1cb 111 }
vsoltan 17:32ae1f106002 112 wait(0.3);
denizguler 13:95d44f7855ca 113 }
vsoltan 15:9d90f68e53da 114 // cleanupEthernet(&eth, &sock);
donatien 1:8e1d4987eb90 115 }