change to final_test

Dependencies:   4DGL-uLCD-SE EthernetInterface HTTPClient mbed-rtos mbed

Fork of Fianl_test by Hongyao Shi

Committer:
jderiso2
Date:
Fri May 01 02:39:55 2015 +0000
Revision:
4:e928ee72a948
Parent:
3:b834ab4a53d1
Update for losing player to exit main loop and display winner

Who changed what in which revision?

UserRevisionLine numberNew contents of line
honelight 0:28f8ba171e86 1 #include "mbed.h"
honelight 0:28f8ba171e86 2 #include "uLCD_4DGL.h"
honelight 0:28f8ba171e86 3 #include "board.h"
honelight 0:28f8ba171e86 4 #include "rtos.h"
honelight 0:28f8ba171e86 5 #include "EthernetInterface.h"
honelight 0:28f8ba171e86 6 #include "HTTPClient.h"
jderiso2 1:4e629f9ac9e8 7 #include <sstream>
jderiso2 1:4e629f9ac9e8 8 #include <string>
jderiso2 1:4e629f9ac9e8 9 #include <iostream>
honelight 0:28f8ba171e86 10
honelight 0:28f8ba171e86 11 uLCD_4DGL lcd(p28,p27,p30); // serial tx, serial rx, reset pin;
jderiso2 1:4e629f9ac9e8 12 Serial pc(USBTX, USBRX);
honelight 0:28f8ba171e86 13 DigitalIn in0(p11);
honelight 0:28f8ba171e86 14 DigitalIn in1(p12);
honelight 0:28f8ba171e86 15 DigitalIn in2(p13);
honelight 0:28f8ba171e86 16 DigitalIn in3(p14);
honelight 0:28f8ba171e86 17 DigitalIn in4(p15);
honelight 0:28f8ba171e86 18 DigitalIn in5(p16);
honelight 0:28f8ba171e86 19 DigitalIn in6(p17);
honelight 0:28f8ba171e86 20 DigitalIn in7(p18);
honelight 0:28f8ba171e86 21 DigitalIn in8(p19);
honelight 0:28f8ba171e86 22
honelight 0:28f8ba171e86 23
honelight 0:28f8ba171e86 24
honelight 0:28f8ba171e86 25
honelight 0:28f8ba171e86 26 int player1=1;
honelight 0:28f8ba171e86 27 int player2=2;
honelight 0:28f8ba171e86 28 int turn =1;
honelight 0:28f8ba171e86 29 int printout = 0;
honelight 0:28f8ba171e86 30
honelight 0:28f8ba171e86 31
honelight 0:28f8ba171e86 32 void printBoard(int ** board)
honelight 0:28f8ba171e86 33 {
honelight 0:28f8ba171e86 34 lcd.cls();
honelight 0:28f8ba171e86 35 lcd.line(0, 42 , 127, 42 , 0xFF0000);
honelight 0:28f8ba171e86 36 lcd.line(0, 84 , 127, 84 , 0xFF0000);
honelight 0:28f8ba171e86 37 lcd.line(42, 0 , 42, 127, 0xFF0000);
honelight 0:28f8ba171e86 38 lcd.line(84, 0, 84, 127, 0xFF0000);
jderiso2 1:4e629f9ac9e8 39 for(int i=0; i<3; i++) {
jderiso2 1:4e629f9ac9e8 40 for(int j=0; j<3; j++) {
jderiso2 1:4e629f9ac9e8 41 if(board[i][j] == 0) {
honelight 0:28f8ba171e86 42 lcd.line( j*42+2 , i*42 + 2 ,(j+1)*42-2 , (i+1)*42-2 , GREEN);
honelight 0:28f8ba171e86 43 lcd.line( j*42+2 , (i+1)*42 - 2 ,(j+1)*42-2 , (i)*42+2 , GREEN);
jderiso2 1:4e629f9ac9e8 44 } else if(board[i][j] == 1) {
honelight 0:28f8ba171e86 45 lcd.circle(42*j+21, 42*i+21, 19, BLUE);
honelight 0:28f8ba171e86 46 }
honelight 0:28f8ba171e86 47 }
honelight 0:28f8ba171e86 48 }
honelight 0:28f8ba171e86 49 }
jderiso2 1:4e629f9ac9e8 50 typedef enum GAME_STATE {
jderiso2 1:4e629f9ac9e8 51 STARTING, PLAYING, OVER, RETURN_ERROR = -1
jderiso2 1:4e629f9ac9e8 52 } GAME_STATE;
jderiso2 1:4e629f9ac9e8 53 HTTPClient http;
jderiso2 1:4e629f9ac9e8 54 EthernetInterface eth;
jderiso2 3:b834ab4a53d1 55 char str[1024];
jderiso2 1:4e629f9ac9e8 56 int StartNewGame()
jderiso2 1:4e629f9ac9e8 57 {
jderiso2 3:b834ab4a53d1 58 char* url = "http://4180.azurewebsites.net/api/TicTacToeGames/New\0";
jderiso2 3:b834ab4a53d1 59 HTTPResult ret = http.get(url, str, 1024);
jderiso2 1:4e629f9ac9e8 60 if (ret > 0) {
jderiso2 1:4e629f9ac9e8 61 pc.printf("HTTP Error return in StartNewGame\n");
jderiso2 1:4e629f9ac9e8 62 return -1;
jderiso2 1:4e629f9ac9e8 63 }
jderiso2 1:4e629f9ac9e8 64 return atoi(str);
jderiso2 1:4e629f9ac9e8 65 }
jderiso2 1:4e629f9ac9e8 66 int JoinGame()
jderiso2 1:4e629f9ac9e8 67 {
jderiso2 3:b834ab4a53d1 68 char* url = "http://4180.azurewebsites.net/api/TicTacToeGames/Join\0";
jderiso2 3:b834ab4a53d1 69 HTTPResult ret = http.get(url, str, 1024);
jderiso2 1:4e629f9ac9e8 70 if (ret > 0) {
jderiso2 1:4e629f9ac9e8 71 pc.printf("HTTP Error return in JoinGame\n");
jderiso2 1:4e629f9ac9e8 72 return -1;
jderiso2 1:4e629f9ac9e8 73 }
jderiso2 1:4e629f9ac9e8 74 return atoi(str);
jderiso2 1:4e629f9ac9e8 75 }
jderiso2 1:4e629f9ac9e8 76 GAME_STATE GetGameState(int gameId)
jderiso2 1:4e629f9ac9e8 77 {
jderiso2 3:b834ab4a53d1 78 string s;
jderiso2 3:b834ab4a53d1 79 stringstream host;
jderiso2 1:4e629f9ac9e8 80 host.clear();
jderiso2 1:4e629f9ac9e8 81 host << "http://4180.azurewebsites.net/odata/TicTacToeGames(" << gameId << ")?$select=GameState";
jderiso2 3:b834ab4a53d1 82 //printf("**** HOST IS %s\n", host.str().c_str());
jderiso2 3:b834ab4a53d1 83
jderiso2 3:b834ab4a53d1 84 HTTPResult ret = http.get(host.str().c_str(), str, 1024, 15000);
jderiso2 1:4e629f9ac9e8 85 if (ret > 0) {
jderiso2 1:4e629f9ac9e8 86 pc.printf("HTTP Error return in GetGameState\n");
jderiso2 1:4e629f9ac9e8 87 return (GAME_STATE)-1;
jderiso2 1:4e629f9ac9e8 88 }
jderiso2 1:4e629f9ac9e8 89 s = string(str);
jderiso2 1:4e629f9ac9e8 90 if (s.find("\"GameState\":\"STARTING\"") != string::npos)
jderiso2 1:4e629f9ac9e8 91 return STARTING;
jderiso2 1:4e629f9ac9e8 92 else if(s.find("\"GameState\":\"PLAYING\"") != string::npos)
jderiso2 1:4e629f9ac9e8 93 return PLAYING;
jderiso2 1:4e629f9ac9e8 94 else if(s.find("\"GameState\":\"OVER\"") != string::npos)
jderiso2 1:4e629f9ac9e8 95 return OVER;
jderiso2 1:4e629f9ac9e8 96 else
jderiso2 1:4e629f9ac9e8 97 return RETURN_ERROR;
honelight 0:28f8ba171e86 98
jderiso2 3:b834ab4a53d1 99 // return (GAME_STATE)atoi(str);
jderiso2 1:4e629f9ac9e8 100 }
jderiso2 1:4e629f9ac9e8 101 void ParseBoard(string str, int** board)
jderiso2 1:4e629f9ac9e8 102 {
jderiso2 3:b834ab4a53d1 103
jderiso2 3:b834ab4a53d1 104 // printf("Entering ParseBoard, got %s\n", str.c_str());
jderiso2 3:b834ab4a53d1 105 for (int i = 0; i < str.length(); i++) {
jderiso2 1:4e629f9ac9e8 106 if (str[i] == '[' || str[i] == ']' || str[i] == ',' || str[i] == '"')
jderiso2 3:b834ab4a53d1 107 str[i] = ' ';
jderiso2 1:4e629f9ac9e8 108 }
jderiso2 1:4e629f9ac9e8 109 string temp;
jderiso2 3:b834ab4a53d1 110 for (int i = 0; i < str.length() - 1; i++) {
jderiso2 3:b834ab4a53d1 111 if (!(str[i] == ' ' && str[i+1] == ' ')) {
jderiso2 1:4e629f9ac9e8 112 temp += str[i];
jderiso2 1:4e629f9ac9e8 113 }
jderiso2 1:4e629f9ac9e8 114
jderiso2 1:4e629f9ac9e8 115 }
jderiso2 3:b834ab4a53d1 116
jderiso2 1:4e629f9ac9e8 117 str = temp;
jderiso2 3:b834ab4a53d1 118 // printf("With changed delimiters %s\n", str.c_str());
jderiso2 1:4e629f9ac9e8 119 stringstream stream(str);
jderiso2 1:4e629f9ac9e8 120 int t = 0;
jderiso2 3:b834ab4a53d1 121 for (int i = 0; i < 3; i++) {
jderiso2 3:b834ab4a53d1 122 for (int j = 0; j < 3; j++) {
jderiso2 3:b834ab4a53d1 123 stream >> board[i][j];
jderiso2 3:b834ab4a53d1 124 //printf("%d\n", board[i][j]);
jderiso2 3:b834ab4a53d1 125 }
jderiso2 1:4e629f9ac9e8 126 }
jderiso2 3:b834ab4a53d1 127
jderiso2 3:b834ab4a53d1 128 /* for (int i = 0; i < 3; i++) {
jderiso2 1:4e629f9ac9e8 129 printf("\n[");
jderiso2 1:4e629f9ac9e8 130 for (int j = 0; j < 3; j++)
jderiso2 1:4e629f9ac9e8 131 printf("%d ", board[i][j]);
jderiso2 1:4e629f9ac9e8 132 printf("]");
jderiso2 1:4e629f9ac9e8 133 }*/
jderiso2 1:4e629f9ac9e8 134 }
jderiso2 3:b834ab4a53d1 135 int PostMove(int playerId,int gameId, int x, int y)
jderiso2 3:b834ab4a53d1 136 {
jderiso2 3:b834ab4a53d1 137 stringstream host;
jderiso2 3:b834ab4a53d1 138 host << "http://4180.azurewebsites.net/api/TicTacToeGames?gameId=" << gameId << "&playerId=" << playerId << "&moveX=" << x << "&moveY=" << y;
jderiso2 3:b834ab4a53d1 139 string s = host.str();
jderiso2 3:b834ab4a53d1 140 HTTPText datain("");
jderiso2 3:b834ab4a53d1 141 HTTPMap dataout;
jderiso2 3:b834ab4a53d1 142 HTTPResult ret = http.post(s.c_str(), dataout, &datain, 10000);
jderiso2 3:b834ab4a53d1 143 if (ret > 0) {
jderiso2 3:b834ab4a53d1 144 pc.printf("HTTP Error in PostMove");
jderiso2 3:b834ab4a53d1 145 return -1;
jderiso2 3:b834ab4a53d1 146 }
jderiso2 3:b834ab4a53d1 147 return 0;
jderiso2 3:b834ab4a53d1 148
jderiso2 3:b834ab4a53d1 149 }
jderiso2 3:b834ab4a53d1 150 int GetCurrentPlayer(int gameId)
jderiso2 3:b834ab4a53d1 151 {
jderiso2 3:b834ab4a53d1 152
jderiso2 3:b834ab4a53d1 153 stringstream host;
jderiso2 3:b834ab4a53d1 154 host << "http://4180.azurewebsites.net/odata/TicTacToeGames(" << gameId << ")?$select=CurrentPlayer";
jderiso2 3:b834ab4a53d1 155 string s = host.str();
jderiso2 3:b834ab4a53d1 156 int retry_count = 5;
jderiso2 3:b834ab4a53d1 157 HTTPResult ret = (HTTPResult)1;
jderiso2 3:b834ab4a53d1 158 while (ret > 0 & retry_count-- > 0)
jderiso2 3:b834ab4a53d1 159 ret = http.get(s.c_str(), str, 1024);
jderiso2 3:b834ab4a53d1 160 if (ret > 0) {
jderiso2 3:b834ab4a53d1 161 pc.printf("HTTP Error return in GetCurrentPlayer\n");
jderiso2 3:b834ab4a53d1 162 return -1;
jderiso2 3:b834ab4a53d1 163 }
jderiso2 3:b834ab4a53d1 164 s = string(str);
jderiso2 3:b834ab4a53d1 165 int pos = s.find("\"CurrentPlayer\":");
jderiso2 3:b834ab4a53d1 166 if (pos == string::npos)
jderiso2 3:b834ab4a53d1 167 return -1;
jderiso2 3:b834ab4a53d1 168 return s[pos+16] - '0';
jderiso2 3:b834ab4a53d1 169 }
jderiso2 3:b834ab4a53d1 170 int GetWinner(int gameId)
jderiso2 3:b834ab4a53d1 171 {
jderiso2 3:b834ab4a53d1 172
jderiso2 3:b834ab4a53d1 173 stringstream host;
jderiso2 3:b834ab4a53d1 174 host << "http://4180.azurewebsites.net/odata/TicTacToeGames(" << gameId << ")?$select=Winner";
jderiso2 3:b834ab4a53d1 175 string s = host.str();
jderiso2 3:b834ab4a53d1 176 int retry_count = 5;
jderiso2 3:b834ab4a53d1 177 HTTPResult ret = (HTTPResult)1;
jderiso2 3:b834ab4a53d1 178 while (ret > 0 & retry_count-- > 0)
jderiso2 3:b834ab4a53d1 179 ret = http.get(s.c_str(), str, 1024);
jderiso2 3:b834ab4a53d1 180 if (ret > 0) {
jderiso2 3:b834ab4a53d1 181 pc.printf("HTTP Error return in GetWinner\n");
jderiso2 3:b834ab4a53d1 182 return -1;
jderiso2 3:b834ab4a53d1 183 }
jderiso2 3:b834ab4a53d1 184 s = string(str);
jderiso2 3:b834ab4a53d1 185 int pos = s.find("\"Winner\":");
jderiso2 3:b834ab4a53d1 186 if (pos == string::npos)
jderiso2 3:b834ab4a53d1 187 return -1;
jderiso2 3:b834ab4a53d1 188 return s[pos+9] - '0';
jderiso2 3:b834ab4a53d1 189 }
jderiso2 1:4e629f9ac9e8 190 int GetBoardState(int gameId, int** board)
jderiso2 1:4e629f9ac9e8 191 {
jderiso2 3:b834ab4a53d1 192 stringstream host;
jderiso2 1:4e629f9ac9e8 193 host << "http://4180.azurewebsites.net/odata/TicTacToeGames(" << gameId << ")?$select=BoardState";
jderiso2 1:4e629f9ac9e8 194 string s = host.str();
jderiso2 3:b834ab4a53d1 195 int retry_count = 5;
jderiso2 3:b834ab4a53d1 196 HTTPResult ret = (HTTPResult)1;
jderiso2 3:b834ab4a53d1 197 while (ret > 0 & retry_count-- > 0)
jderiso2 3:b834ab4a53d1 198 ret = http.get(s.c_str(), str, 1024);
jderiso2 1:4e629f9ac9e8 199 if (ret > 0) {
jderiso2 1:4e629f9ac9e8 200 pc.printf("HTTP Error return in GetBoardState\n");
jderiso2 1:4e629f9ac9e8 201 return -1;
jderiso2 1:4e629f9ac9e8 202 }
jderiso2 1:4e629f9ac9e8 203 s = string(str);
jderiso2 1:4e629f9ac9e8 204 int pos = s.find("\"BoardState\":");
jderiso2 1:4e629f9ac9e8 205 if (pos == string::npos)
jderiso2 1:4e629f9ac9e8 206 return -1;
jderiso2 1:4e629f9ac9e8 207
jderiso2 1:4e629f9ac9e8 208 ParseBoard(s.substr(pos +13, string::npos), board);
jderiso2 1:4e629f9ac9e8 209 return 0;
jderiso2 1:4e629f9ac9e8 210 }
jderiso2 1:4e629f9ac9e8 211 string GameStateToString(GAME_STATE state)
jderiso2 1:4e629f9ac9e8 212 {
jderiso2 1:4e629f9ac9e8 213 switch(state) {
jderiso2 1:4e629f9ac9e8 214 case STARTING:
jderiso2 1:4e629f9ac9e8 215 return "STARTING";
jderiso2 1:4e629f9ac9e8 216 case PLAYING:
jderiso2 1:4e629f9ac9e8 217 return "PLAYING";
jderiso2 1:4e629f9ac9e8 218 case OVER:
jderiso2 1:4e629f9ac9e8 219 return "OVER";
jderiso2 1:4e629f9ac9e8 220 default:
jderiso2 1:4e629f9ac9e8 221 case RETURN_ERROR:
jderiso2 1:4e629f9ac9e8 222 return "ERROR";
jderiso2 1:4e629f9ac9e8 223 }
jderiso2 1:4e629f9ac9e8 224 }
jderiso2 3:b834ab4a53d1 225 int GetSerialInput()
jderiso2 3:b834ab4a53d1 226 {
jderiso2 3:b834ab4a53d1 227 return pc.getc() - '0';
jderiso2 3:b834ab4a53d1 228 }
jderiso2 3:b834ab4a53d1 229 void ScanForMove(int* x, int* y, int** board)
jderiso2 3:b834ab4a53d1 230 {
jderiso2 3:b834ab4a53d1 231 // the following commented section can be used to input moves over pc terminal by pressing 00 for move at location [0,0]
jderiso2 3:b834ab4a53d1 232 /*
jderiso2 3:b834ab4a53d1 233 pc.printf("Entering scan\n");
jderiso2 3:b834ab4a53d1 234 *x = GetSerialInput();
jderiso2 3:b834ab4a53d1 235 *y = GetSerialInput();
jderiso2 3:b834ab4a53d1 236 return;
jderiso2 3:b834ab4a53d1 237 */
jderiso2 3:b834ab4a53d1 238
jderiso2 3:b834ab4a53d1 239 while(1) {
jderiso2 3:b834ab4a53d1 240 if (!in0 && board[0][0]== -1) {
jderiso2 3:b834ab4a53d1 241 *x = 0;
jderiso2 3:b834ab4a53d1 242 *y = 0;
jderiso2 3:b834ab4a53d1 243 return;
jderiso2 3:b834ab4a53d1 244 } else if (!in1 && board[0][1] == -1) {
jderiso2 3:b834ab4a53d1 245 *x = 0;
jderiso2 3:b834ab4a53d1 246 *y = 1;
jderiso2 3:b834ab4a53d1 247 return;
jderiso2 3:b834ab4a53d1 248 } else if (!in2 && board[0][2] == -1) {
jderiso2 3:b834ab4a53d1 249 *x = 0;
jderiso2 3:b834ab4a53d1 250 *y = 2;
jderiso2 3:b834ab4a53d1 251 return;
jderiso2 3:b834ab4a53d1 252 } else if (!in3 && board[1][0] == -1) {
jderiso2 3:b834ab4a53d1 253 *x = 1;
jderiso2 3:b834ab4a53d1 254 *y = 0;
jderiso2 3:b834ab4a53d1 255 return;
jderiso2 3:b834ab4a53d1 256 } else if (!in4 && board[1][1] == -1) {
jderiso2 3:b834ab4a53d1 257 *x = 1;
jderiso2 3:b834ab4a53d1 258 *y = 1;
jderiso2 3:b834ab4a53d1 259 return;
jderiso2 3:b834ab4a53d1 260 } else if (!in5 && board[1][2] == -1) {
jderiso2 3:b834ab4a53d1 261 *x = 1;
jderiso2 3:b834ab4a53d1 262 *y = 2;
jderiso2 3:b834ab4a53d1 263 return;
jderiso2 3:b834ab4a53d1 264 } else if (!in6 && board[2][0] == -1) {
jderiso2 3:b834ab4a53d1 265 *x = 2;
jderiso2 3:b834ab4a53d1 266 *y = 0;
jderiso2 3:b834ab4a53d1 267 return;
jderiso2 3:b834ab4a53d1 268 } else if (!in7 && board[2][1] == -1) {
jderiso2 3:b834ab4a53d1 269 *x = 2;
jderiso2 3:b834ab4a53d1 270 *y = 1;
jderiso2 3:b834ab4a53d1 271 return;
jderiso2 3:b834ab4a53d1 272 } else if (!in8 && board[2][2] == -1) {
jderiso2 3:b834ab4a53d1 273 *x = 2;
jderiso2 3:b834ab4a53d1 274 *y = 2;
jderiso2 3:b834ab4a53d1 275 return;
jderiso2 3:b834ab4a53d1 276 }
jderiso2 3:b834ab4a53d1 277 wait(0.2);
jderiso2 3:b834ab4a53d1 278 }
jderiso2 3:b834ab4a53d1 279 }
jderiso2 1:4e629f9ac9e8 280 int main()
jderiso2 1:4e629f9ac9e8 281 {
jderiso2 1:4e629f9ac9e8 282 pc.printf("Ethernet connecting...\n");
honelight 0:28f8ba171e86 283 eth.init(); //Use DHCP
honelight 0:28f8ba171e86 284 eth.connect();
jderiso2 1:4e629f9ac9e8 285 pc.printf("IP Address is %s\n", eth.getIPAddress());
jderiso2 3:b834ab4a53d1 286
jderiso2 3:b834ab4a53d1 287 in0.mode(PullUp);
jderiso2 3:b834ab4a53d1 288 in1.mode(PullUp);
jderiso2 3:b834ab4a53d1 289 in2.mode(PullUp);
jderiso2 3:b834ab4a53d1 290 in3.mode(PullUp);
jderiso2 3:b834ab4a53d1 291 in4.mode(PullUp);
jderiso2 3:b834ab4a53d1 292 in5.mode(PullUp);
jderiso2 3:b834ab4a53d1 293 in6.mode(PullUp);
jderiso2 3:b834ab4a53d1 294 in7.mode(PullUp);
jderiso2 3:b834ab4a53d1 295 in8.mode(PullUp);
jderiso2 3:b834ab4a53d1 296 lcd.baudrate(3000000);
jderiso2 3:b834ab4a53d1 297
jderiso2 3:b834ab4a53d1 298 // START GAME OR JOIN GAME
jderiso2 3:b834ab4a53d1 299 // FORMAT THIS TO LOOK PRETTY ON LCD
jderiso2 3:b834ab4a53d1 300 int gameId = -1;
jderiso2 3:b834ab4a53d1 301 int playerId = -1;
jderiso2 3:b834ab4a53d1 302 bool reprint = true;
jderiso2 3:b834ab4a53d1 303 do {
jderiso2 3:b834ab4a53d1 304 if (reprint) {
jderiso2 3:b834ab4a53d1 305 lcd.cls();
jderiso2 3:b834ab4a53d1 306 lcd.printf("Button 0: Start New Game\nButton 1: Join Existing Game");
jderiso2 3:b834ab4a53d1 307 reprint = false;
jderiso2 3:b834ab4a53d1 308 }
jderiso2 3:b834ab4a53d1 309 // I'm assuming by looking at the code that
jderiso2 3:b834ab4a53d1 310 // you guys made the buttons active low so inverting the read
jderiso2 3:b834ab4a53d1 311 if (!in0 /*|| true*/) {
jderiso2 3:b834ab4a53d1 312 // Start Game
jderiso2 3:b834ab4a53d1 313 gameId = StartNewGame();
jderiso2 3:b834ab4a53d1 314 if (gameId < 1) { // fail
jderiso2 3:b834ab4a53d1 315 lcd.printf("Failed to start a new game!\n");
jderiso2 3:b834ab4a53d1 316 wait(1.5);
jderiso2 3:b834ab4a53d1 317 reprint = true;
jderiso2 3:b834ab4a53d1 318 } else
jderiso2 3:b834ab4a53d1 319 playerId = 0;
jderiso2 3:b834ab4a53d1 320
jderiso2 3:b834ab4a53d1 321 } else if(!in1) {
jderiso2 3:b834ab4a53d1 322 gameId = JoinGame();
jderiso2 3:b834ab4a53d1 323 if (gameId < 1) { // fail
jderiso2 3:b834ab4a53d1 324 lcd.printf("Failed to join game, try making one!\n");
jderiso2 3:b834ab4a53d1 325 wait(1.5);
jderiso2 3:b834ab4a53d1 326 reprint = true;
jderiso2 3:b834ab4a53d1 327 } else
jderiso2 3:b834ab4a53d1 328 playerId = 1;
jderiso2 3:b834ab4a53d1 329 }
jderiso2 3:b834ab4a53d1 330 } while (gameId < 1);
jderiso2 3:b834ab4a53d1 331 lcd.cls();
jderiso2 3:b834ab4a53d1 332
jderiso2 3:b834ab4a53d1 333 if (playerId == 1){
jderiso2 3:b834ab4a53d1 334 pc.printf("Successfully joined game %d!\n", gameId);
jderiso2 3:b834ab4a53d1 335 lcd.printf("Successfully joined game %d!\n", gameId);
jderiso2 3:b834ab4a53d1 336 }
jderiso2 3:b834ab4a53d1 337 else{
jderiso2 3:b834ab4a53d1 338 pc.printf("Successfully started game %d!\n", gameId);
jderiso2 3:b834ab4a53d1 339 lcd.printf("Successfully started game %d!\n", gameId);
jderiso2 3:b834ab4a53d1 340 }
jderiso2 3:b834ab4a53d1 341
jderiso2 3:b834ab4a53d1 342 wait(1.5);
jderiso2 3:b834ab4a53d1 343
jderiso2 3:b834ab4a53d1 344 Board board;
jderiso2 3:b834ab4a53d1 345 lcd.cls();
jderiso2 3:b834ab4a53d1 346 lcd.printf("Waiting for game to start...\n");
jderiso2 3:b834ab4a53d1 347 // wait for game to start
jderiso2 3:b834ab4a53d1 348 while(GetGameState(gameId) != PLAYING) {
jderiso2 3:b834ab4a53d1 349 wait(2);
jderiso2 3:b834ab4a53d1 350 }
jderiso2 3:b834ab4a53d1 351
jderiso2 3:b834ab4a53d1 352 // Main Game Loop
jderiso2 3:b834ab4a53d1 353 lcd.cls();
jderiso2 3:b834ab4a53d1 354
jderiso2 3:b834ab4a53d1 355 while(1) {
jderiso2 3:b834ab4a53d1 356 GAME_STATE state = GetGameState(gameId);
jderiso2 3:b834ab4a53d1 357 if (state == OVER)
jderiso2 3:b834ab4a53d1 358 break; // game over
jderiso2 3:b834ab4a53d1 359 // wait for turn
jderiso2 3:b834ab4a53d1 360 while(GetCurrentPlayer(gameId) != playerId){ wait(1.5); }
jderiso2 3:b834ab4a53d1 361 GetBoardState(gameId, board.get_board());
jderiso2 3:b834ab4a53d1 362 printBoard(board.get_board());
jderiso2 4:e928ee72a948 363
jderiso2 4:e928ee72a948 364 state = GetGameState(gameId);
jderiso2 4:e928ee72a948 365 if (state == OVER)
jderiso2 4:e928ee72a948 366 break;
jderiso2 3:b834ab4a53d1 367 int moveX, moveY;
jderiso2 3:b834ab4a53d1 368 ScanForMove(&moveX,&moveY, board.get_board());
jderiso2 3:b834ab4a53d1 369 PostMove(playerId, gameId, moveX, moveY);
jderiso2 3:b834ab4a53d1 370 GetBoardState(gameId, board.get_board());
jderiso2 3:b834ab4a53d1 371 printBoard(board.get_board());
jderiso2 3:b834ab4a53d1 372 wait(2);
jderiso2 3:b834ab4a53d1 373 }
jderiso2 3:b834ab4a53d1 374 int winner = GetWinner(gameId);
jderiso2 3:b834ab4a53d1 375 pc.printf("Player %d Won!\n", winner);
jderiso2 3:b834ab4a53d1 376 lcd.printf("Player %d Won!\n", winner);
jderiso2 3:b834ab4a53d1 377 /* lcd.line(0, 42 , 127, 42 , 0xFF0000);
jderiso2 3:b834ab4a53d1 378 lcd.line(0, 84 , 127, 84 , 0xFF0000);
jderiso2 3:b834ab4a53d1 379 lcd.line(42, 0 , 42, 127, 0xFF0000);
jderiso2 3:b834ab4a53d1 380 lcd.line(84, 0, 84, 127, 0xFF0000);*/
jderiso2 3:b834ab4a53d1 381 /*
jderiso2 3:b834ab4a53d1 382 while (true) {
jderiso2 3:b834ab4a53d1 383 if(!in0)
jderiso2 3:b834ab4a53d1 384 printout = 1;
jderiso2 3:b834ab4a53d1 385 else if(!in1)
jderiso2 3:b834ab4a53d1 386 printout = 2;
jderiso2 3:b834ab4a53d1 387 else if(!in2)
jderiso2 3:b834ab4a53d1 388 printout = 3;
jderiso2 3:b834ab4a53d1 389 else if(!in3)
jderiso2 3:b834ab4a53d1 390 printout = 4;
jderiso2 3:b834ab4a53d1 391 else if(!in4)
jderiso2 3:b834ab4a53d1 392 printout = 5;
jderiso2 3:b834ab4a53d1 393 else if(!in5)
jderiso2 3:b834ab4a53d1 394 printout = 6;
jderiso2 3:b834ab4a53d1 395 else if(!in6)
jderiso2 3:b834ab4a53d1 396 printout = 7;
jderiso2 3:b834ab4a53d1 397 else if(!in7)
jderiso2 3:b834ab4a53d1 398 printout = 8;
jderiso2 3:b834ab4a53d1 399 else if(!in8)
jderiso2 3:b834ab4a53d1 400 printout = 9;
jderiso2 3:b834ab4a53d1 401 else
jderiso2 3:b834ab4a53d1 402 printout = 0;
jderiso2 3:b834ab4a53d1 403
jderiso2 3:b834ab4a53d1 404
jderiso2 3:b834ab4a53d1 405 if(printout>0) {
jderiso2 3:b834ab4a53d1 406 bool valid = board.updateBoard(turn, printout-1);
jderiso2 3:b834ab4a53d1 407
jderiso2 3:b834ab4a53d1 408 if(valid) {
jderiso2 3:b834ab4a53d1 409 output = board.get_board();
jderiso2 3:b834ab4a53d1 410 printBoard(output);
jderiso2 3:b834ab4a53d1 411 printout=0;
jderiso2 3:b834ab4a53d1 412 int victory = board.check_victory(turn);
jderiso2 3:b834ab4a53d1 413 if(victory ==1) {
jderiso2 3:b834ab4a53d1 414 lcd.cls();
jderiso2 3:b834ab4a53d1 415 lcd.printf("player 1 win!");
jderiso2 3:b834ab4a53d1 416 return 0;
jderiso2 3:b834ab4a53d1 417 } else if(victory == 2) {
jderiso2 3:b834ab4a53d1 418 lcd.cls();
jderiso2 3:b834ab4a53d1 419 lcd.printf("player 2 win!");
jderiso2 3:b834ab4a53d1 420 return 0;
jderiso2 3:b834ab4a53d1 421 }
jderiso2 3:b834ab4a53d1 422 if(turn ==1)
jderiso2 3:b834ab4a53d1 423 turn =2;
jderiso2 3:b834ab4a53d1 424 else
jderiso2 3:b834ab4a53d1 425 turn =1;
jderiso2 3:b834ab4a53d1 426 }
jderiso2 3:b834ab4a53d1 427 }
jderiso2 3:b834ab4a53d1 428 Thread::wait(400);
jderiso2 3:b834ab4a53d1 429 }
jderiso2 3:b834ab4a53d1 430 */
jderiso2 3:b834ab4a53d1 431
jderiso2 3:b834ab4a53d1 432 }
jderiso2 3:b834ab4a53d1 433
jderiso2 3:b834ab4a53d1 434
jderiso2 3:b834ab4a53d1 435
jderiso2 3:b834ab4a53d1 436 int TEST_FN()
jderiso2 3:b834ab4a53d1 437 {
jderiso2 1:4e629f9ac9e8 438 pc.printf("Trying Start New Game...\n");
jderiso2 1:4e629f9ac9e8 439 int game = StartNewGame();
jderiso2 1:4e629f9ac9e8 440 wait(1);
jderiso2 3:b834ab4a53d1 441 while (JoinGame() != game) {
jderiso2 3:b834ab4a53d1 442 wait(0.5);
jderiso2 3:b834ab4a53d1 443 }
jderiso2 3:b834ab4a53d1 444 int player = 0;
jderiso2 3:b834ab4a53d1 445 Board b;
jderiso2 3:b834ab4a53d1 446 printf("Joined Game %d\n", game);
jderiso2 3:b834ab4a53d1 447 bool sentinel = true;
jderiso2 3:b834ab4a53d1 448 while (sentinel) {
jderiso2 3:b834ab4a53d1 449 GetBoardState(game, b.get_board());
jderiso2 3:b834ab4a53d1 450 printBoard(b.get_board());
jderiso2 3:b834ab4a53d1 451 if (player == 0) {
jderiso2 3:b834ab4a53d1 452 PostMove(player, game, 0, 0);
jderiso2 3:b834ab4a53d1 453 pc.printf("Exited first post move\n");
jderiso2 3:b834ab4a53d1 454 player = 1;
jderiso2 3:b834ab4a53d1 455 } else {
jderiso2 3:b834ab4a53d1 456 PostMove(1, game, 1, 1);
jderiso2 3:b834ab4a53d1 457 sentinel = false;
jderiso2 3:b834ab4a53d1 458 }
jderiso2 3:b834ab4a53d1 459 wait(0.5);
jderiso2 3:b834ab4a53d1 460 }
jderiso2 3:b834ab4a53d1 461 pc.printf("Done with move\n");
jderiso2 3:b834ab4a53d1 462 wait(0.5);
jderiso2 3:b834ab4a53d1 463 GetBoardState(game, b.get_board());
jderiso2 3:b834ab4a53d1 464 printBoard(b.get_board());
jderiso2 3:b834ab4a53d1 465
jderiso2 1:4e629f9ac9e8 466 pc.printf("Got: %d\n\n", game);
jderiso2 1:4e629f9ac9e8 467 pc.printf("Trying GetGameState for Game %d...\n", game);
jderiso2 1:4e629f9ac9e8 468 pc.printf("Got: %s\n\n", GameStateToString(GetGameState(game)).c_str());
jderiso2 1:4e629f9ac9e8 469 pc.printf("Trying Join Game...\n");
jderiso2 1:4e629f9ac9e8 470 game = JoinGame();
jderiso2 1:4e629f9ac9e8 471 wait(1);
jderiso2 1:4e629f9ac9e8 472 pc.printf("Got: %d\n\n", game);
jderiso2 1:4e629f9ac9e8 473 //pc.printf("Trying GetGameState for Game %d...\n", game);
jderiso2 1:4e629f9ac9e8 474 //pc.printf("Got: %s\n\n", GameStateToString(GetGameState(game)).c_str());
jderiso2 1:4e629f9ac9e8 475 pc.printf("Trying GetBoardState for Game %d...\n", game);
jderiso2 3:b834ab4a53d1 476 // Board b;
jderiso2 1:4e629f9ac9e8 477 wait(1);
jderiso2 1:4e629f9ac9e8 478 pc.printf("Got: %d\n\n", GetBoardState(game, b.get_board()));
jderiso2 1:4e629f9ac9e8 479 pc.printf("Testing over****\n");
jderiso2 1:4e629f9ac9e8 480 /*pc.printf("%d\n", sizeof(str));
jderiso2 1:4e629f9ac9e8 481 HTTPResult ret = http.get("http://4180.azurewebsites.net/api/TicTacToeGames/New", str, 4096);//http.get("http://4180.azurewebsites.net/", str, 4096);
jderiso2 1:4e629f9ac9e8 482 if (ret > 0)
jderiso2 1:4e629f9ac9e8 483 pc.printf("Return error\n");
jderiso2 1:4e629f9ac9e8 484 for (int i = 0; i < 4096;i++){
jderiso2 1:4e629f9ac9e8 485 if (str[i] == '1'|| str[i] == '2' || str[i] == '3' || str[i] == '4')
jderiso2 1:4e629f9ac9e8 486 pc.printf("HERE %d\n", i);
jderiso2 1:4e629f9ac9e8 487 pc.putc(str[i]);
jderiso2 1:4e629f9ac9e8 488 pc.printf("\n");
jderiso2 1:4e629f9ac9e8 489 }*/
jderiso2 1:4e629f9ac9e8 490 return 0;
jderiso2 1:4e629f9ac9e8 491 TCPSocketConnection socket;
jderiso2 1:4e629f9ac9e8 492
jderiso2 1:4e629f9ac9e8 493
jderiso2 1:4e629f9ac9e8 494 int r = socket.connect("4180.azurewebsites.net", 80);
jderiso2 1:4e629f9ac9e8 495 if (r != 0)
jderiso2 1:4e629f9ac9e8 496 pc.printf("Failed to connect to 4180.azurewebsites.net:80!\r\n");
jderiso2 1:4e629f9ac9e8 497 char http_cmd[] = "GET / HTTP/1.0\n\n";
jderiso2 1:4e629f9ac9e8 498 socket.send_all(http_cmd, sizeof(http_cmd)-1);
jderiso2 1:4e629f9ac9e8 499
jderiso2 1:4e629f9ac9e8 500 char buff[300];
jderiso2 1:4e629f9ac9e8 501 int rtn;
jderiso2 1:4e629f9ac9e8 502 while (true) {
jderiso2 1:4e629f9ac9e8 503 rtn = socket.receive(buff, sizeof(buff)-1);
jderiso2 1:4e629f9ac9e8 504 if (rtn <= 0)
jderiso2 1:4e629f9ac9e8 505 break;
jderiso2 1:4e629f9ac9e8 506 buff[rtn] = '\0';
jderiso2 1:4e629f9ac9e8 507 pc.printf("Received %d chars from server:\n%s\n", rtn, buff);
jderiso2 1:4e629f9ac9e8 508 }
jderiso2 1:4e629f9ac9e8 509 pc.printf("Closing socket...\n");
jderiso2 1:4e629f9ac9e8 510 socket.close();
jderiso2 1:4e629f9ac9e8 511 eth.disconnect();
honelight 0:28f8ba171e86 512 }
honelight 0:28f8ba171e86 513