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
main.cpp@4:427dbdf3ccd5, 2015-04-30 (annotated)
- 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?
User | Revision | Line number | New 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 |