change to final_test
Dependencies: 4DGL-uLCD-SE EthernetInterface HTTPClient mbed-rtos mbed
Fork of Fianl_test by
main.cpp@4:e928ee72a948, 2015-05-01 (annotated)
- 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?
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 | |
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 |