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 Ryan Quinn

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?

UserRevisionLine numberNew 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 }