Play battleship against another mbed over an ethernet internet connection
Dependencies: 4DGL-uLCD-SE EthernetInterface mbed-rtos mbed
Fork of Working_Get_Example_Ethernet by
main.cpp@18:ac354cf138dd, 2015-12-08 (annotated)
- Committer:
- ndaniel7
- Date:
- Tue Dec 08 06:11:55 2015 +0000
- Revision:
- 18:ac354cf138dd
- Parent:
- 17:46186f7da7eb
First working iteration of Ethernet Battleship
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
donatien | 0:bb128f0e952f | 1 | #include "mbed.h" |
donatien | 0:bb128f0e952f | 2 | #include "EthernetInterface.h" |
ndaniel7 | 17:46186f7da7eb | 3 | #include <string> |
ndaniel7 | 18:ac354cf138dd | 4 | #include "uLCD_4DGL.h" |
donatien | 0:bb128f0e952f | 5 | |
rquinn7 | 15:7a9850866be9 | 6 | Serial pc(USBTX,USBRX); |
rquinn7 | 15:7a9850866be9 | 7 | |
rquinn7 | 15:7a9850866be9 | 8 | extern "C" void mbed_mac_address(char * mac) { |
rquinn7 | 15:7a9850866be9 | 9 | |
rquinn7 | 15:7a9850866be9 | 10 | // define your own MAC Address ba:d7:05:47:1f:c6 |
rquinn7 | 15:7a9850866be9 | 11 | mac[0] = 0xba; |
rquinn7 | 15:7a9850866be9 | 12 | mac[1] = 0xd7; |
rquinn7 | 15:7a9850866be9 | 13 | mac[2] = 0x05; |
rquinn7 | 15:7a9850866be9 | 14 | mac[3] = 0x47; |
rquinn7 | 15:7a9850866be9 | 15 | mac[4] = 0x1f; |
rquinn7 | 15:7a9850866be9 | 16 | mac[5] = 0xc6; |
rquinn7 | 15:7a9850866be9 | 17 | |
rquinn7 | 15:7a9850866be9 | 18 | }; |
rquinn7 | 15:7a9850866be9 | 19 | |
ndaniel7 | 18:ac354cf138dd | 20 | //int main() { |
ndaniel7 | 18:ac354cf138dd | 21 | // pc.baud(9600); |
ndaniel7 | 18:ac354cf138dd | 22 | // pc.printf("Running\n"); |
ndaniel7 | 18:ac354cf138dd | 23 | // EthernetInterface eth; |
ndaniel7 | 18:ac354cf138dd | 24 | // eth.init(); //Use DHCP |
ndaniel7 | 18:ac354cf138dd | 25 | // wait(15); |
ndaniel7 | 18:ac354cf138dd | 26 | // eth.connect(); |
ndaniel7 | 18:ac354cf138dd | 27 | // wait(15); |
ndaniel7 | 18:ac354cf138dd | 28 | // pc.printf("MAC is %s\n", eth.getMACAddress()); |
ndaniel7 | 18:ac354cf138dd | 29 | // pc.printf("IP Address is %s\n", eth.getIPAddress()); |
ndaniel7 | 18:ac354cf138dd | 30 | // |
ndaniel7 | 18:ac354cf138dd | 31 | // TCPSocketConnection sock; |
ndaniel7 | 18:ac354cf138dd | 32 | // sock.connect("192.184.82.3", 5000); |
ndaniel7 | 18:ac354cf138dd | 33 | // |
ndaniel7 | 18:ac354cf138dd | 34 | // char http_cmd[300] = "GET /create_board?playerNum=1&gameNum=144&board=1111000000000000000000000000000000000000000000000000000000000000 HTTP/1.0\n\n"; |
ndaniel7 | 18:ac354cf138dd | 35 | // sock.send_all(http_cmd, sizeof(http_cmd)-1); |
ndaniel7 | 18:ac354cf138dd | 36 | // |
ndaniel7 | 18:ac354cf138dd | 37 | // //Instead of printing here, do what you did before to convert the string, and just append buffer to a string (below the break), |
ndaniel7 | 18:ac354cf138dd | 38 | // // replacing pc.printf |
ndaniel7 | 18:ac354cf138dd | 39 | // //Then we can do string find to snipe the values we want (have to do math to grab the right amount) |
ndaniel7 | 18:ac354cf138dd | 40 | // //Implemented example here, testStr now holds the received text (so you can search it) |
ndaniel7 | 18:ac354cf138dd | 41 | // string testStr = ""; |
ndaniel7 | 18:ac354cf138dd | 42 | // char buffer[600]; |
ndaniel7 | 18:ac354cf138dd | 43 | // int ret; |
ndaniel7 | 18:ac354cf138dd | 44 | // while (true) { |
ndaniel7 | 18:ac354cf138dd | 45 | // ret = sock.receive(buffer, sizeof(buffer)-1); |
ndaniel7 | 18:ac354cf138dd | 46 | // if (ret <= 0) |
ndaniel7 | 18:ac354cf138dd | 47 | // break; |
ndaniel7 | 18:ac354cf138dd | 48 | // buffer[ret] = '\0'; |
ndaniel7 | 18:ac354cf138dd | 49 | // pc.printf("Received %d chars from server:\n%s\n", ret, buffer); |
ndaniel7 | 18:ac354cf138dd | 50 | // string conv(buffer); |
ndaniel7 | 18:ac354cf138dd | 51 | // testStr = testStr + conv; |
ndaniel7 | 18:ac354cf138dd | 52 | // } |
ndaniel7 | 18:ac354cf138dd | 53 | // pc.printf("Stringified %s\n", testStr); |
ndaniel7 | 18:ac354cf138dd | 54 | // sock.close(); |
ndaniel7 | 18:ac354cf138dd | 55 | // wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 56 | // sock.connect("192.184.82.3", 5000); |
ndaniel7 | 18:ac354cf138dd | 57 | // wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 58 | // strcpy(http_cmd, "GET /create_board?playerNum=2&gameNum=144&board=1111000000000000000000000000000000000000000000000000000000000000 HTTP/1.0\n\n"); |
ndaniel7 | 18:ac354cf138dd | 59 | // pc.printf("Command is %s", http_cmd); |
ndaniel7 | 18:ac354cf138dd | 60 | // sock.send_all(http_cmd, sizeof(http_cmd)-1); |
ndaniel7 | 18:ac354cf138dd | 61 | // |
ndaniel7 | 18:ac354cf138dd | 62 | // while (true) { |
ndaniel7 | 18:ac354cf138dd | 63 | // ret = sock.receive(buffer, sizeof(buffer)-1); |
ndaniel7 | 18:ac354cf138dd | 64 | // if (ret <= 0) |
ndaniel7 | 18:ac354cf138dd | 65 | // break; |
ndaniel7 | 18:ac354cf138dd | 66 | // buffer[ret] = '\0'; |
ndaniel7 | 18:ac354cf138dd | 67 | // pc.printf("Received %d chars from server:\n%s\n", ret, buffer); |
ndaniel7 | 18:ac354cf138dd | 68 | // } |
ndaniel7 | 18:ac354cf138dd | 69 | // |
ndaniel7 | 18:ac354cf138dd | 70 | // sock.close(); |
ndaniel7 | 18:ac354cf138dd | 71 | // wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 72 | // sock.connect("192.184.82.3", 5000); |
ndaniel7 | 18:ac354cf138dd | 73 | // wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 74 | // strcpy(http_cmd, "GET /polling?gameNum=144&playerNum=1 HTTP/1.0\n\n"); |
ndaniel7 | 18:ac354cf138dd | 75 | // pc.printf("Command is %s", http_cmd); |
ndaniel7 | 18:ac354cf138dd | 76 | // sock.send_all(http_cmd, sizeof(http_cmd)-1); |
ndaniel7 | 18:ac354cf138dd | 77 | // |
ndaniel7 | 18:ac354cf138dd | 78 | // while (true) { |
ndaniel7 | 18:ac354cf138dd | 79 | // ret = sock.receive(buffer, sizeof(buffer)-1); |
ndaniel7 | 18:ac354cf138dd | 80 | // if (ret <= 0) |
ndaniel7 | 18:ac354cf138dd | 81 | // break; |
ndaniel7 | 18:ac354cf138dd | 82 | // buffer[ret] = '\0'; |
ndaniel7 | 18:ac354cf138dd | 83 | // pc.printf("Received %d chars from server:\n%s\n", ret, buffer); |
ndaniel7 | 18:ac354cf138dd | 84 | // } |
ndaniel7 | 18:ac354cf138dd | 85 | // |
ndaniel7 | 18:ac354cf138dd | 86 | // sock.close(); |
ndaniel7 | 18:ac354cf138dd | 87 | // wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 88 | // sock.connect("192.184.82.3", 5000); |
ndaniel7 | 18:ac354cf138dd | 89 | // wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 90 | // strcpy(http_cmd, "GET /fire?playerNum=1&gameNum=144&x=1&y=0 HTTP/1.0\n\n"); |
ndaniel7 | 18:ac354cf138dd | 91 | // pc.printf("Command is %s", http_cmd); |
ndaniel7 | 18:ac354cf138dd | 92 | // sock.send_all(http_cmd, sizeof(http_cmd)-1); |
ndaniel7 | 18:ac354cf138dd | 93 | // |
ndaniel7 | 18:ac354cf138dd | 94 | // while (true) { |
ndaniel7 | 18:ac354cf138dd | 95 | // ret = sock.receive(buffer, sizeof(buffer)-1); |
ndaniel7 | 18:ac354cf138dd | 96 | // if (ret <= 0) |
ndaniel7 | 18:ac354cf138dd | 97 | // break; |
ndaniel7 | 18:ac354cf138dd | 98 | // buffer[ret] = '\0'; |
ndaniel7 | 18:ac354cf138dd | 99 | // pc.printf("Received %d chars from server:\n%s\n", ret, buffer); |
ndaniel7 | 18:ac354cf138dd | 100 | // } |
ndaniel7 | 18:ac354cf138dd | 101 | // |
ndaniel7 | 18:ac354cf138dd | 102 | // sock.close(); |
ndaniel7 | 18:ac354cf138dd | 103 | // eth.disconnect(); |
ndaniel7 | 18:ac354cf138dd | 104 | // |
ndaniel7 | 18:ac354cf138dd | 105 | // while(1) {} |
ndaniel7 | 18:ac354cf138dd | 106 | //} |
ndaniel7 | 18:ac354cf138dd | 107 | |
ndaniel7 | 18:ac354cf138dd | 108 | uLCD_4DGL lcd(p28,p27,p29); |
ndaniel7 | 18:ac354cf138dd | 109 | DigitalOut myled(LED1); |
ndaniel7 | 18:ac354cf138dd | 110 | |
ndaniel7 | 18:ac354cf138dd | 111 | AnalogIn sliderh(p17); |
ndaniel7 | 18:ac354cf138dd | 112 | AnalogIn sliderv(p19); |
ndaniel7 | 18:ac354cf138dd | 113 | DigitalIn pb1(p21); |
ndaniel7 | 18:ac354cf138dd | 114 | bool down = false; |
ndaniel7 | 18:ac354cf138dd | 115 | string gameID = ""; |
ndaniel7 | 18:ac354cf138dd | 116 | string myBoard = ""; |
ndaniel7 | 18:ac354cf138dd | 117 | string targetBoard = ""; |
ndaniel7 | 18:ac354cf138dd | 118 | int size=7;//board square size in pixels |
ndaniel7 | 18:ac354cf138dd | 119 | int cx=0,cy=0;//cursor position |
ndaniel7 | 18:ac354cf138dd | 120 | int playerNum; |
ndaniel7 | 18:ac354cf138dd | 121 | |
ndaniel7 | 18:ac354cf138dd | 122 | //If button is pressed, print only once |
ndaniel7 | 18:ac354cf138dd | 123 | bool check_button() { |
ndaniel7 | 18:ac354cf138dd | 124 | if(pb1 == 0 && !down) { |
ndaniel7 | 18:ac354cf138dd | 125 | return true; |
ndaniel7 | 18:ac354cf138dd | 126 | } |
ndaniel7 | 18:ac354cf138dd | 127 | if(pb1 == 1) { |
ndaniel7 | 18:ac354cf138dd | 128 | down = false; |
ndaniel7 | 18:ac354cf138dd | 129 | } |
ndaniel7 | 18:ac354cf138dd | 130 | return false; |
ndaniel7 | 18:ac354cf138dd | 131 | } |
ndaniel7 | 18:ac354cf138dd | 132 | |
ndaniel7 | 18:ac354cf138dd | 133 | void emptyBoards() { |
ndaniel7 | 18:ac354cf138dd | 134 | myBoard=""; |
ndaniel7 | 18:ac354cf138dd | 135 | targetBoard=""; |
ndaniel7 | 18:ac354cf138dd | 136 | for (int i=0;i<64;i++) { |
ndaniel7 | 18:ac354cf138dd | 137 | myBoard+="0"; |
ndaniel7 | 18:ac354cf138dd | 138 | targetBoard+="0"; |
ndaniel7 | 18:ac354cf138dd | 139 | } |
ndaniel7 | 18:ac354cf138dd | 140 | } |
ndaniel7 | 18:ac354cf138dd | 141 | |
ndaniel7 | 18:ac354cf138dd | 142 | //0: nothing |
ndaniel7 | 18:ac354cf138dd | 143 | //1: down |
ndaniel7 | 18:ac354cf138dd | 144 | //2: up |
ndaniel7 | 18:ac354cf138dd | 145 | //3: right |
ndaniel7 | 18:ac354cf138dd | 146 | //4: down |
ndaniel7 | 18:ac354cf138dd | 147 | //5: button press |
ndaniel7 | 18:ac354cf138dd | 148 | int analogStick() { |
ndaniel7 | 18:ac354cf138dd | 149 | if(sliderh < 0.2) { |
ndaniel7 | 18:ac354cf138dd | 150 | return 1; |
ndaniel7 | 18:ac354cf138dd | 151 | } |
ndaniel7 | 18:ac354cf138dd | 152 | else if(sliderh > 0.8) { |
ndaniel7 | 18:ac354cf138dd | 153 | return 2; |
ndaniel7 | 18:ac354cf138dd | 154 | } |
ndaniel7 | 18:ac354cf138dd | 155 | else if(sliderv < 0.2) { |
ndaniel7 | 18:ac354cf138dd | 156 | return 3; |
ndaniel7 | 18:ac354cf138dd | 157 | } |
ndaniel7 | 18:ac354cf138dd | 158 | else if(sliderv > 0.8) { |
ndaniel7 | 18:ac354cf138dd | 159 | return 4; |
ndaniel7 | 18:ac354cf138dd | 160 | } |
ndaniel7 | 18:ac354cf138dd | 161 | else if (check_button()){ |
ndaniel7 | 18:ac354cf138dd | 162 | return 5; |
ndaniel7 | 18:ac354cf138dd | 163 | } |
ndaniel7 | 18:ac354cf138dd | 164 | else |
ndaniel7 | 18:ac354cf138dd | 165 | return 0; |
ndaniel7 | 18:ac354cf138dd | 166 | } |
ndaniel7 | 18:ac354cf138dd | 167 | |
ndaniel7 | 18:ac354cf138dd | 168 | string playerMenu(){ |
ndaniel7 | 18:ac354cf138dd | 169 | lcd.cls(); |
ndaniel7 | 18:ac354cf138dd | 170 | wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 171 | //lcd.printf("Player Select:"); |
ndaniel7 | 18:ac354cf138dd | 172 | lcd.locate(3,0); |
ndaniel7 | 18:ac354cf138dd | 173 | lcd.printf("Host a Game"); |
ndaniel7 | 18:ac354cf138dd | 174 | lcd.locate(3, 14); |
ndaniel7 | 18:ac354cf138dd | 175 | lcd.printf("Join a Game"); |
ndaniel7 | 18:ac354cf138dd | 176 | while (1){ |
ndaniel7 | 18:ac354cf138dd | 177 | if (analogStick()==2){ |
ndaniel7 | 18:ac354cf138dd | 178 | return "1"; |
ndaniel7 | 18:ac354cf138dd | 179 | } |
ndaniel7 | 18:ac354cf138dd | 180 | else if (analogStick()==1){ |
ndaniel7 | 18:ac354cf138dd | 181 | return "2"; |
ndaniel7 | 18:ac354cf138dd | 182 | } |
ndaniel7 | 18:ac354cf138dd | 183 | } |
ndaniel7 | 18:ac354cf138dd | 184 | |
ndaniel7 | 18:ac354cf138dd | 185 | } |
ndaniel7 | 18:ac354cf138dd | 186 | |
ndaniel7 | 18:ac354cf138dd | 187 | void selectMenu(){ |
ndaniel7 | 18:ac354cf138dd | 188 | lcd.cls(); |
ndaniel7 | 18:ac354cf138dd | 189 | wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 190 | lcd.locate(1,0); |
ndaniel7 | 18:ac354cf138dd | 191 | lcd.printf("Current GameID:"); |
ndaniel7 | 18:ac354cf138dd | 192 | int input; |
ndaniel7 | 18:ac354cf138dd | 193 | while (1){ |
ndaniel7 | 18:ac354cf138dd | 194 | input = analogStick(); |
ndaniel7 | 18:ac354cf138dd | 195 | if (input==5) { |
ndaniel7 | 18:ac354cf138dd | 196 | break; |
ndaniel7 | 18:ac354cf138dd | 197 | } |
ndaniel7 | 18:ac354cf138dd | 198 | else if (input==0) { |
ndaniel7 | 18:ac354cf138dd | 199 | lcd.locate(1,0); |
ndaniel7 | 18:ac354cf138dd | 200 | lcd.printf("Current GameID: %s",gameID); |
ndaniel7 | 18:ac354cf138dd | 201 | continue; |
ndaniel7 | 18:ac354cf138dd | 202 | } |
ndaniel7 | 18:ac354cf138dd | 203 | char buf[10]; |
ndaniel7 | 18:ac354cf138dd | 204 | sprintf(buf,"%d",input); |
ndaniel7 | 18:ac354cf138dd | 205 | gameID.append(buf); |
ndaniel7 | 18:ac354cf138dd | 206 | wait(0.3); |
ndaniel7 | 18:ac354cf138dd | 207 | } |
ndaniel7 | 18:ac354cf138dd | 208 | } |
ndaniel7 | 18:ac354cf138dd | 209 | |
ndaniel7 | 18:ac354cf138dd | 210 | void drawTargetBoard(){ |
ndaniel7 | 18:ac354cf138dd | 211 | int x=0; |
ndaniel7 | 18:ac354cf138dd | 212 | int y=0; |
ndaniel7 | 18:ac354cf138dd | 213 | string s; |
ndaniel7 | 18:ac354cf138dd | 214 | for (int i=0;i<64;i++) { |
ndaniel7 | 18:ac354cf138dd | 215 | x=7*(i%8); |
ndaniel7 | 18:ac354cf138dd | 216 | if (i%8==0 && i!=0) { |
ndaniel7 | 18:ac354cf138dd | 217 | y+=size; |
ndaniel7 | 18:ac354cf138dd | 218 | } |
ndaniel7 | 18:ac354cf138dd | 219 | s = targetBoard.at(i); |
ndaniel7 | 18:ac354cf138dd | 220 | if (s.compare("0")==0){ //water |
ndaniel7 | 18:ac354cf138dd | 221 | lcd.filled_rectangle(x,y,x+size-1,y+size-1,0x0000FF); |
ndaniel7 | 18:ac354cf138dd | 222 | } |
ndaniel7 | 18:ac354cf138dd | 223 | else if (s.compare("0")==1){ //unknown opponent ship |
ndaniel7 | 18:ac354cf138dd | 224 | lcd.filled_rectangle(x,y,x+size-1,y+size-1,0x0000FF); |
ndaniel7 | 18:ac354cf138dd | 225 | } |
ndaniel7 | 18:ac354cf138dd | 226 | else if (s.compare("0")==2){ //hit |
ndaniel7 | 18:ac354cf138dd | 227 | lcd.filled_rectangle(x,y,x+size-1,y+size-1,0xFF0000); |
ndaniel7 | 18:ac354cf138dd | 228 | } |
ndaniel7 | 18:ac354cf138dd | 229 | else if (s.compare("0")==3){ //miss |
ndaniel7 | 18:ac354cf138dd | 230 | lcd.filled_rectangle(x,y,x+size-1,y+size-1,0xFFFFFF); |
ndaniel7 | 18:ac354cf138dd | 231 | } |
ndaniel7 | 18:ac354cf138dd | 232 | } |
ndaniel7 | 18:ac354cf138dd | 233 | } |
ndaniel7 | 18:ac354cf138dd | 234 | |
ndaniel7 | 18:ac354cf138dd | 235 | void drawMyBoard(){ |
ndaniel7 | 18:ac354cf138dd | 236 | int x=0; |
ndaniel7 | 18:ac354cf138dd | 237 | int y=56+16; |
ndaniel7 | 18:ac354cf138dd | 238 | string s; |
ndaniel7 | 18:ac354cf138dd | 239 | for (int i=0;i<64;i++) { |
ndaniel7 | 18:ac354cf138dd | 240 | x=7*(i%8); |
ndaniel7 | 18:ac354cf138dd | 241 | if (i%8==0 && i!=0) { |
ndaniel7 | 18:ac354cf138dd | 242 | y+=size; |
ndaniel7 | 18:ac354cf138dd | 243 | } |
ndaniel7 | 18:ac354cf138dd | 244 | s = myBoard.at(i); |
ndaniel7 | 18:ac354cf138dd | 245 | if (s.compare("0")==0){ //water |
ndaniel7 | 18:ac354cf138dd | 246 | lcd.filled_rectangle(x,y,x+size-1,y+size-1,0x0000FF); |
ndaniel7 | 18:ac354cf138dd | 247 | } |
ndaniel7 | 18:ac354cf138dd | 248 | else if (s.compare("0")==1){ //my ship |
ndaniel7 | 18:ac354cf138dd | 249 | lcd.filled_rectangle(x,y,x+size-1,y+size-1,0x2F4F4F); |
ndaniel7 | 18:ac354cf138dd | 250 | } |
ndaniel7 | 18:ac354cf138dd | 251 | else if (s.compare("0")==2){ //hit |
ndaniel7 | 18:ac354cf138dd | 252 | lcd.filled_rectangle(x,y,x+size-1,y+size-1,0xFF0000); |
ndaniel7 | 18:ac354cf138dd | 253 | } |
ndaniel7 | 18:ac354cf138dd | 254 | else if (s.compare("0")==3){ //miss |
ndaniel7 | 18:ac354cf138dd | 255 | lcd.filled_rectangle(x,y,x+size-1,y+size-1,0xFFFFFF); |
ndaniel7 | 18:ac354cf138dd | 256 | } |
ndaniel7 | 18:ac354cf138dd | 257 | } |
ndaniel7 | 18:ac354cf138dd | 258 | } |
ndaniel7 | 18:ac354cf138dd | 259 | |
ndaniel7 | 18:ac354cf138dd | 260 | void drawLegend(){ |
ndaniel7 | 18:ac354cf138dd | 261 | int startX=64; |
ndaniel7 | 18:ac354cf138dd | 262 | int startY=16; |
ndaniel7 | 18:ac354cf138dd | 263 | int lSize=5; |
ndaniel7 | 18:ac354cf138dd | 264 | int dY=24; |
ndaniel7 | 18:ac354cf138dd | 265 | lcd.locate(11,2); |
ndaniel7 | 18:ac354cf138dd | 266 | lcd.printf("Water"); |
ndaniel7 | 18:ac354cf138dd | 267 | lcd.filled_rectangle(startX,startY,startX+lSize,startY+lSize,0x0000FF); |
ndaniel7 | 18:ac354cf138dd | 268 | lcd.locate(11,5); |
ndaniel7 | 18:ac354cf138dd | 269 | lcd.printf("Ship"); |
ndaniel7 | 18:ac354cf138dd | 270 | lcd.filled_rectangle(startX,startY+dY,startX+lSize,startY+dY+lSize,0x2F4F4F); |
ndaniel7 | 18:ac354cf138dd | 271 | lcd.locate(11,8); |
ndaniel7 | 18:ac354cf138dd | 272 | lcd.printf("Hit"); |
ndaniel7 | 18:ac354cf138dd | 273 | lcd.filled_rectangle(startX,startY+2*dY,startX+lSize,startY+2*dY+lSize,0xFF0000); |
ndaniel7 | 18:ac354cf138dd | 274 | lcd.locate(11,11); |
ndaniel7 | 18:ac354cf138dd | 275 | lcd.printf("Miss"); |
ndaniel7 | 18:ac354cf138dd | 276 | lcd.filled_rectangle(startX,startY+3*dY,startX+lSize,startY+3*dY+lSize,0xFFFFFF); |
ndaniel7 | 18:ac354cf138dd | 277 | } |
ndaniel7 | 18:ac354cf138dd | 278 | |
ndaniel7 | 18:ac354cf138dd | 279 | void drawBoards() { |
ndaniel7 | 18:ac354cf138dd | 280 | lcd.cls(); |
ndaniel7 | 18:ac354cf138dd | 281 | //wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 282 | drawTargetBoard(); |
ndaniel7 | 18:ac354cf138dd | 283 | drawMyBoard(); |
ndaniel7 | 18:ac354cf138dd | 284 | drawLegend(); |
ndaniel7 | 18:ac354cf138dd | 285 | } |
ndaniel7 | 18:ac354cf138dd | 286 | |
ndaniel7 | 18:ac354cf138dd | 287 | void selectTarget(){//selected x,y coords are stored in global cx/cy coords |
ndaniel7 | 18:ac354cf138dd | 288 | drawBoards(); |
ndaniel7 | 18:ac354cf138dd | 289 | lcd.filled_rectangle(cx*size,cy*size,cx*size+size-1,cy*size+size-1,0xFFFF00); |
ndaniel7 | 18:ac354cf138dd | 290 | int input; |
ndaniel7 | 18:ac354cf138dd | 291 | while (1) { |
ndaniel7 | 18:ac354cf138dd | 292 | input=analogStick(); |
ndaniel7 | 18:ac354cf138dd | 293 | if (input==5) { |
ndaniel7 | 18:ac354cf138dd | 294 | return; |
ndaniel7 | 18:ac354cf138dd | 295 | } |
ndaniel7 | 18:ac354cf138dd | 296 | if (input==1) {//down |
ndaniel7 | 18:ac354cf138dd | 297 | if (cy<7) { |
ndaniel7 | 18:ac354cf138dd | 298 | cy++; |
ndaniel7 | 18:ac354cf138dd | 299 | } |
ndaniel7 | 18:ac354cf138dd | 300 | } |
ndaniel7 | 18:ac354cf138dd | 301 | if (input==2) {//up |
ndaniel7 | 18:ac354cf138dd | 302 | if (cy>0) { |
ndaniel7 | 18:ac354cf138dd | 303 | cy--; |
ndaniel7 | 18:ac354cf138dd | 304 | } |
ndaniel7 | 18:ac354cf138dd | 305 | } |
ndaniel7 | 18:ac354cf138dd | 306 | if (input==3) {//right |
ndaniel7 | 18:ac354cf138dd | 307 | if (cx<7) { |
ndaniel7 | 18:ac354cf138dd | 308 | cx++; |
ndaniel7 | 18:ac354cf138dd | 309 | } |
ndaniel7 | 18:ac354cf138dd | 310 | } |
ndaniel7 | 18:ac354cf138dd | 311 | if (input==4) {//left |
ndaniel7 | 18:ac354cf138dd | 312 | if (cx>0) { |
ndaniel7 | 18:ac354cf138dd | 313 | cx--; |
ndaniel7 | 18:ac354cf138dd | 314 | } |
ndaniel7 | 18:ac354cf138dd | 315 | } |
ndaniel7 | 18:ac354cf138dd | 316 | if (input!=0) { |
ndaniel7 | 18:ac354cf138dd | 317 | drawBoards(); |
ndaniel7 | 18:ac354cf138dd | 318 | lcd.filled_rectangle(cx*size,cy*size,cx*size+size-1,cy*size+size-1,0xFFFF00); |
ndaniel7 | 18:ac354cf138dd | 319 | } |
ndaniel7 | 18:ac354cf138dd | 320 | } |
ndaniel7 | 18:ac354cf138dd | 321 | } |
ndaniel7 | 18:ac354cf138dd | 322 | |
ndaniel7 | 18:ac354cf138dd | 323 | void placeShip(int s){ |
ndaniel7 | 18:ac354cf138dd | 324 | for (int i=0;i<s;i++) { |
ndaniel7 | 18:ac354cf138dd | 325 | drawBoards(); |
ndaniel7 | 18:ac354cf138dd | 326 | lcd.filled_rectangle(cx*size,cy*size+72,cx*size+(size-1)*2,cy*size+72+size-1,0xFFFF00); |
ndaniel7 | 18:ac354cf138dd | 327 | int input; |
ndaniel7 | 18:ac354cf138dd | 328 | while (1) { |
ndaniel7 | 18:ac354cf138dd | 329 | input=analogStick(); |
ndaniel7 | 18:ac354cf138dd | 330 | if (input==5) { |
ndaniel7 | 18:ac354cf138dd | 331 | break; |
ndaniel7 | 18:ac354cf138dd | 332 | } |
ndaniel7 | 18:ac354cf138dd | 333 | if (input==1) {//down |
ndaniel7 | 18:ac354cf138dd | 334 | if (cy<7) { |
ndaniel7 | 18:ac354cf138dd | 335 | cy++; |
ndaniel7 | 18:ac354cf138dd | 336 | } |
ndaniel7 | 18:ac354cf138dd | 337 | } |
ndaniel7 | 18:ac354cf138dd | 338 | if (input==2) {//up |
ndaniel7 | 18:ac354cf138dd | 339 | if (cy>0) { |
ndaniel7 | 18:ac354cf138dd | 340 | cy--; |
ndaniel7 | 18:ac354cf138dd | 341 | } |
ndaniel7 | 18:ac354cf138dd | 342 | } |
ndaniel7 | 18:ac354cf138dd | 343 | if (input==3) {//right |
ndaniel7 | 18:ac354cf138dd | 344 | if (cx<6) { |
ndaniel7 | 18:ac354cf138dd | 345 | cx++; |
ndaniel7 | 18:ac354cf138dd | 346 | } |
ndaniel7 | 18:ac354cf138dd | 347 | } |
ndaniel7 | 18:ac354cf138dd | 348 | if (input==4) {//left |
ndaniel7 | 18:ac354cf138dd | 349 | if (cx>0) { |
ndaniel7 | 18:ac354cf138dd | 350 | cx--; |
ndaniel7 | 18:ac354cf138dd | 351 | } |
ndaniel7 | 18:ac354cf138dd | 352 | } |
ndaniel7 | 18:ac354cf138dd | 353 | if (input!=0) { |
ndaniel7 | 18:ac354cf138dd | 354 | drawBoards(); |
ndaniel7 | 18:ac354cf138dd | 355 | lcd.filled_rectangle(cx*size,cy*size+72,cx*size+(size-1)*2,cy*size+72+size-1,0xFFFF00); |
ndaniel7 | 18:ac354cf138dd | 356 | } |
ndaniel7 | 18:ac354cf138dd | 357 | } |
ndaniel7 | 18:ac354cf138dd | 358 | myBoard.replace(cy*8+cx,2,"11"); |
ndaniel7 | 18:ac354cf138dd | 359 | } |
ndaniel7 | 18:ac354cf138dd | 360 | } |
ndaniel7 | 18:ac354cf138dd | 361 | |
emilmont | 7:65188f4a8c25 | 362 | int main() { |
rquinn7 | 15:7a9850866be9 | 363 | pc.baud(9600); |
rquinn7 | 15:7a9850866be9 | 364 | pc.printf("Running\n"); |
donatien | 0:bb128f0e952f | 365 | EthernetInterface eth; |
donatien | 0:bb128f0e952f | 366 | eth.init(); //Use DHCP |
rquinn7 | 15:7a9850866be9 | 367 | wait(15); |
donatien | 0:bb128f0e952f | 368 | eth.connect(); |
rquinn7 | 15:7a9850866be9 | 369 | wait(15); |
rquinn7 | 15:7a9850866be9 | 370 | pc.printf("MAC is %s\n", eth.getMACAddress()); |
rquinn7 | 15:7a9850866be9 | 371 | pc.printf("IP Address is %s\n", eth.getIPAddress()); |
emilmont | 7:65188f4a8c25 | 372 | TCPSocketConnection sock; |
ndaniel7 | 18:ac354cf138dd | 373 | char http_cmd[300]; |
ndaniel7 | 18:ac354cf138dd | 374 | string cmdStr = ""; |
ndaniel7 | 18:ac354cf138dd | 375 | string resultStr = ""; |
ndaniel7 | 18:ac354cf138dd | 376 | char buffer[600]; |
ndaniel7 | 18:ac354cf138dd | 377 | int ret; |
ndaniel7 | 18:ac354cf138dd | 378 | std::size_t found; |
ndaniel7 | 18:ac354cf138dd | 379 | |
ndaniel7 | 18:ac354cf138dd | 380 | emptyBoards(); |
ndaniel7 | 18:ac354cf138dd | 381 | pb1.mode(PullUp); |
ndaniel7 | 18:ac354cf138dd | 382 | lcd.baudrate(3000000); |
ndaniel7 | 18:ac354cf138dd | 383 | lcd.cls(); |
ndaniel7 | 18:ac354cf138dd | 384 | //lcd.printf("%d",analogStick()); |
ndaniel7 | 18:ac354cf138dd | 385 | //lcd.printf("%d",playerMenu()); |
ndaniel7 | 18:ac354cf138dd | 386 | string pm = playerMenu(); |
ndaniel7 | 18:ac354cf138dd | 387 | wait(0.5); |
ndaniel7 | 18:ac354cf138dd | 388 | selectMenu(); |
ndaniel7 | 18:ac354cf138dd | 389 | lcd.cls(); |
ndaniel7 | 18:ac354cf138dd | 390 | placeShip(2); |
rquinn7 | 15:7a9850866be9 | 391 | sock.connect("192.184.82.3", 5000); |
ndaniel7 | 18:ac354cf138dd | 392 | cmdStr = "GET /create_board?playerNum="; |
ndaniel7 | 18:ac354cf138dd | 393 | cmdStr += pm; |
ndaniel7 | 18:ac354cf138dd | 394 | cmdStr += "&gameNum="; |
ndaniel7 | 18:ac354cf138dd | 395 | cmdStr += gameID; |
ndaniel7 | 18:ac354cf138dd | 396 | cmdStr += "&board="; |
ndaniel7 | 18:ac354cf138dd | 397 | cmdStr += myBoard; |
ndaniel7 | 18:ac354cf138dd | 398 | cmdStr += " HTTP/1.0\n\n"; |
ndaniel7 | 18:ac354cf138dd | 399 | strcpy(http_cmd, cmdStr.c_str()); |
ndaniel7 | 18:ac354cf138dd | 400 | pc.printf(http_cmd); |
emilmont | 11:59dcefdda506 | 401 | sock.send_all(http_cmd, sizeof(http_cmd)-1); |
emilmont | 7:65188f4a8c25 | 402 | |
rquinn7 | 16:0a1035af04b4 | 403 | //Instead of printing here, do what you did before to convert the string, and just append buffer to a string (below the break), |
rquinn7 | 16:0a1035af04b4 | 404 | // replacing pc.printf |
rquinn7 | 16:0a1035af04b4 | 405 | //Then we can do string find to snipe the values we want (have to do math to grab the right amount) |
ndaniel7 | 17:46186f7da7eb | 406 | //Implemented example here, testStr now holds the received text (so you can search it) |
rquinn7 | 15:7a9850866be9 | 407 | while (true) { |
rquinn7 | 15:7a9850866be9 | 408 | ret = sock.receive(buffer, sizeof(buffer)-1); |
rquinn7 | 15:7a9850866be9 | 409 | if (ret <= 0) |
rquinn7 | 15:7a9850866be9 | 410 | break; |
rquinn7 | 15:7a9850866be9 | 411 | buffer[ret] = '\0'; |
ndaniel7 | 18:ac354cf138dd | 412 | string conv(buffer); |
ndaniel7 | 18:ac354cf138dd | 413 | resultStr = resultStr + conv; |
ndaniel7 | 18:ac354cf138dd | 414 | } |
ndaniel7 | 18:ac354cf138dd | 415 | sock.close(); |
ndaniel7 | 18:ac354cf138dd | 416 | resultStr=""; |
ndaniel7 | 18:ac354cf138dd | 417 | wait(0.2);//we have now setup and sent the board |
ndaniel7 | 18:ac354cf138dd | 418 | |
ndaniel7 | 18:ac354cf138dd | 419 | while (1){ |
ndaniel7 | 18:ac354cf138dd | 420 | while (1){ |
ndaniel7 | 18:ac354cf138dd | 421 | sock.connect("192.184.82.3", 5000);//start polling to wait for turn |
ndaniel7 | 18:ac354cf138dd | 422 | wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 423 | cmdStr = "GET /polling?playerNum="; |
ndaniel7 | 18:ac354cf138dd | 424 | cmdStr += pm; |
ndaniel7 | 18:ac354cf138dd | 425 | cmdStr += "&gameNum="; |
ndaniel7 | 18:ac354cf138dd | 426 | cmdStr += gameID; |
ndaniel7 | 18:ac354cf138dd | 427 | cmdStr += " HTTP/1.0\n\n"; |
ndaniel7 | 18:ac354cf138dd | 428 | strcpy(http_cmd, cmdStr.c_str()); |
ndaniel7 | 18:ac354cf138dd | 429 | pc.printf("Command is %s", http_cmd); |
ndaniel7 | 18:ac354cf138dd | 430 | sock.send_all(http_cmd, sizeof(http_cmd)-1); |
ndaniel7 | 18:ac354cf138dd | 431 | resultStr = ""; |
ndaniel7 | 18:ac354cf138dd | 432 | while (true) { |
ndaniel7 | 18:ac354cf138dd | 433 | ret = sock.receive(buffer, sizeof(buffer)-1); |
ndaniel7 | 18:ac354cf138dd | 434 | if (ret <= 0) |
ndaniel7 | 18:ac354cf138dd | 435 | break; |
ndaniel7 | 18:ac354cf138dd | 436 | buffer[ret] = '\0'; |
ndaniel7 | 18:ac354cf138dd | 437 | string conv(buffer); |
ndaniel7 | 18:ac354cf138dd | 438 | resultStr = resultStr + conv; |
ndaniel7 | 18:ac354cf138dd | 439 | } |
ndaniel7 | 18:ac354cf138dd | 440 | found = resultStr.find("You lose"); |
ndaniel7 | 18:ac354cf138dd | 441 | pc.printf("%s",resultStr); |
ndaniel7 | 18:ac354cf138dd | 442 | if(found!=std::string::npos){ |
ndaniel7 | 18:ac354cf138dd | 443 | wait(3); |
ndaniel7 | 18:ac354cf138dd | 444 | sock.close(); |
ndaniel7 | 18:ac354cf138dd | 445 | wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 446 | lcd.cls(); |
ndaniel7 | 18:ac354cf138dd | 447 | drawTargetBoard(); |
ndaniel7 | 18:ac354cf138dd | 448 | drawMyBoard(); |
ndaniel7 | 18:ac354cf138dd | 449 | lcd.locate(12,5); |
ndaniel7 | 18:ac354cf138dd | 450 | lcd.printf("You"); |
ndaniel7 | 18:ac354cf138dd | 451 | lcd.locate(12,9); |
ndaniel7 | 18:ac354cf138dd | 452 | lcd.printf("Lose!"); |
ndaniel7 | 18:ac354cf138dd | 453 | return; |
ndaniel7 | 18:ac354cf138dd | 454 | } |
ndaniel7 | 18:ac354cf138dd | 455 | found = resultStr.find("Don't go"); |
ndaniel7 | 18:ac354cf138dd | 456 | pc.printf("%s",resultStr); |
ndaniel7 | 18:ac354cf138dd | 457 | if(found==std::string::npos){ |
ndaniel7 | 18:ac354cf138dd | 458 | wait(3); |
ndaniel7 | 18:ac354cf138dd | 459 | sock.close(); |
ndaniel7 | 18:ac354cf138dd | 460 | wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 461 | break; |
ndaniel7 | 18:ac354cf138dd | 462 | } |
ndaniel7 | 18:ac354cf138dd | 463 | sock.close(); |
ndaniel7 | 18:ac354cf138dd | 464 | wait(2); |
ndaniel7 | 18:ac354cf138dd | 465 | } |
ndaniel7 | 18:ac354cf138dd | 466 | //Now your turn |
ndaniel7 | 18:ac354cf138dd | 467 | // if (myBoard.at(cy*8+cx)=='1') { |
ndaniel7 | 18:ac354cf138dd | 468 | // targetBoard.replace(cy*8+cx,1,"2"); |
ndaniel7 | 18:ac354cf138dd | 469 | // myBoard.replace(cy*8+cx,1,"2"); |
ndaniel7 | 18:ac354cf138dd | 470 | // } |
ndaniel7 | 18:ac354cf138dd | 471 | // else{ |
ndaniel7 | 18:ac354cf138dd | 472 | // targetBoard.replace(cy*8+cx,1,"3"); |
ndaniel7 | 18:ac354cf138dd | 473 | // myBoard.replace(cy*8+cx,1,"3"); |
ndaniel7 | 18:ac354cf138dd | 474 | // } |
ndaniel7 | 18:ac354cf138dd | 475 | string tmp = "player"; |
ndaniel7 | 18:ac354cf138dd | 476 | tmp += pm; |
ndaniel7 | 18:ac354cf138dd | 477 | tmp += "_board"; |
ndaniel7 | 18:ac354cf138dd | 478 | // pc.printf("\nwe printing shit"); |
ndaniel7 | 18:ac354cf138dd | 479 | // pc.printf("\ntmp: %s",tmp); |
ndaniel7 | 18:ac354cf138dd | 480 | found = resultStr.find(tmp); |
ndaniel7 | 18:ac354cf138dd | 481 | pc.printf("\nfound: %d",found); |
ndaniel7 | 18:ac354cf138dd | 482 | myBoard = resultStr.substr(found+17,64); |
ndaniel7 | 18:ac354cf138dd | 483 | wait(0.5); |
ndaniel7 | 18:ac354cf138dd | 484 | // pc.printf("\nmyBoard: %s",myBoard); |
ndaniel7 | 18:ac354cf138dd | 485 | // pc.printf("\nresultStr: %s",resultStr); |
ndaniel7 | 18:ac354cf138dd | 486 | tmp = "player"; |
ndaniel7 | 18:ac354cf138dd | 487 | tmp += pm; |
ndaniel7 | 18:ac354cf138dd | 488 | tmp += "_board"; |
ndaniel7 | 18:ac354cf138dd | 489 | if (pm.compare("1")==0) |
ndaniel7 | 18:ac354cf138dd | 490 | tmp += "_p2"; |
ndaniel7 | 18:ac354cf138dd | 491 | else |
ndaniel7 | 18:ac354cf138dd | 492 | tmp += "_p1"; |
ndaniel7 | 18:ac354cf138dd | 493 | found = resultStr.find(tmp); |
ndaniel7 | 18:ac354cf138dd | 494 | targetBoard = resultStr.substr(found+20,64); |
ndaniel7 | 18:ac354cf138dd | 495 | drawBoards(); |
ndaniel7 | 18:ac354cf138dd | 496 | cx=0,cy=0; |
ndaniel7 | 18:ac354cf138dd | 497 | selectTarget(); |
ndaniel7 | 18:ac354cf138dd | 498 | sock.connect("192.184.82.3", 5000);//start polling to wait for turn |
ndaniel7 | 18:ac354cf138dd | 499 | wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 500 | cmdStr = "GET /fire?playerNum="; |
ndaniel7 | 18:ac354cf138dd | 501 | cmdStr += pm; |
ndaniel7 | 18:ac354cf138dd | 502 | cmdStr += "&gameNum="; |
ndaniel7 | 18:ac354cf138dd | 503 | cmdStr += gameID; |
ndaniel7 | 18:ac354cf138dd | 504 | cmdStr += "&x="; |
ndaniel7 | 18:ac354cf138dd | 505 | char buf[10]; |
ndaniel7 | 18:ac354cf138dd | 506 | sprintf(buf,"%d",cx); |
ndaniel7 | 18:ac354cf138dd | 507 | cmdStr.append(buf); |
ndaniel7 | 18:ac354cf138dd | 508 | cmdStr += "&y="; |
ndaniel7 | 18:ac354cf138dd | 509 | char buf2[10]; |
ndaniel7 | 18:ac354cf138dd | 510 | sprintf(buf2,"%d",cy); |
ndaniel7 | 18:ac354cf138dd | 511 | cmdStr.append(buf2); |
ndaniel7 | 18:ac354cf138dd | 512 | cmdStr += " HTTP/1.0\n\n"; |
ndaniel7 | 18:ac354cf138dd | 513 | //strcpy(http_cmd, "GET /fire?playerNum=1&gameNum=144&x=1&y=0 HTTP/1.0\n\n"); |
ndaniel7 | 18:ac354cf138dd | 514 | strcpy(http_cmd, cmdStr.c_str()); |
ndaniel7 | 18:ac354cf138dd | 515 | pc.printf("Command is %s", http_cmd); |
ndaniel7 | 18:ac354cf138dd | 516 | sock.send_all(http_cmd, sizeof(http_cmd)-1); |
ndaniel7 | 18:ac354cf138dd | 517 | resultStr = ""; |
ndaniel7 | 18:ac354cf138dd | 518 | while (true) { |
ndaniel7 | 18:ac354cf138dd | 519 | ret = sock.receive(buffer, sizeof(buffer)-1); |
ndaniel7 | 18:ac354cf138dd | 520 | if (ret <= 0) |
ndaniel7 | 18:ac354cf138dd | 521 | break; |
ndaniel7 | 18:ac354cf138dd | 522 | buffer[ret] = '\0'; |
ndaniel7 | 18:ac354cf138dd | 523 | string conv(buffer); |
ndaniel7 | 18:ac354cf138dd | 524 | resultStr = resultStr + conv; |
ndaniel7 | 18:ac354cf138dd | 525 | } |
ndaniel7 | 18:ac354cf138dd | 526 | found = resultStr.find("You win"); |
ndaniel7 | 18:ac354cf138dd | 527 | pc.printf("%s",resultStr); |
ndaniel7 | 18:ac354cf138dd | 528 | if(found!=std::string::npos){ |
ndaniel7 | 18:ac354cf138dd | 529 | wait(1.5); |
ndaniel7 | 18:ac354cf138dd | 530 | sock.close(); |
ndaniel7 | 18:ac354cf138dd | 531 | wait(0.2); |
ndaniel7 | 18:ac354cf138dd | 532 | lcd.cls(); |
ndaniel7 | 18:ac354cf138dd | 533 | drawTargetBoard(); |
ndaniel7 | 18:ac354cf138dd | 534 | drawMyBoard(); |
ndaniel7 | 18:ac354cf138dd | 535 | lcd.locate(12,5); |
ndaniel7 | 18:ac354cf138dd | 536 | lcd.printf("You"); |
ndaniel7 | 18:ac354cf138dd | 537 | lcd.locate(12,9); |
ndaniel7 | 18:ac354cf138dd | 538 | lcd.printf("Win!"); |
ndaniel7 | 18:ac354cf138dd | 539 | return; |
ndaniel7 | 18:ac354cf138dd | 540 | } |
ndaniel7 | 18:ac354cf138dd | 541 | sock.close(); |
ndaniel7 | 18:ac354cf138dd | 542 | wait(0.5); |
rquinn7 | 15:7a9850866be9 | 543 | } |
rquinn7 | 15:7a9850866be9 | 544 | |
donatien | 0:bb128f0e952f | 545 | } |