Increase color for the board and clear screen for winning message

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

Fork of Final_test by Jonathon Deriso

Committer:
honelight
Date:
Thu Apr 30 01:27:56 2015 +0000
Revision:
4:427dbdf3ccd5
Parent:
3:b834ab4a53d1
ECE4180 Final Project TicTacToe Version 2

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