Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE EthernetInterface HTTPClient mbed-rtos mbed
Fork of Final_test by
main.cpp
- Committer:
- jderiso2
- Date:
- 2015-04-22
- Revision:
- 1:4e629f9ac9e8
- Parent:
- 0:28f8ba171e86
- Child:
- 3:b834ab4a53d1
File content as of revision 1:4e629f9ac9e8:
#include "mbed.h"
#include "uLCD_4DGL.h"
#include "board.h"
#include "rtos.h"
#include "EthernetInterface.h"
#include "HTTPClient.h"
#include <sstream>
#include <string>
#include <iostream>
uLCD_4DGL lcd(p28,p27,p30); // serial tx, serial rx, reset pin;
Serial pc(USBTX, USBRX);
DigitalIn in0(p11);
DigitalIn in1(p12);
DigitalIn in2(p13);
DigitalIn in3(p14);
DigitalIn in4(p15);
DigitalIn in5(p16);
DigitalIn in6(p17);
DigitalIn in7(p18);
DigitalIn in8(p19);
Mutex stdio_mutex;
int player1=1;
int player2=2;
int turn =1;
int printout = 0;
void printBoard(int ** board)
{
lcd.cls();
lcd.line(0, 42 , 127, 42 , 0xFF0000);
lcd.line(0, 84 , 127, 84 , 0xFF0000);
lcd.line(42, 0 , 42, 127, 0xFF0000);
lcd.line(84, 0, 84, 127, 0xFF0000);
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(board[i][j] == 0) {
lcd.line( j*42+2 , i*42 + 2 ,(j+1)*42-2 , (i+1)*42-2 , GREEN);
lcd.line( j*42+2 , (i+1)*42 - 2 ,(j+1)*42-2 , (i)*42+2 , GREEN);
} else if(board[i][j] == 1) {
lcd.circle(42*j+21, 42*i+21, 19, BLUE);
}
}
}
}
typedef enum GAME_STATE {
STARTING, PLAYING, OVER, RETURN_ERROR = -1
} GAME_STATE;
HTTPClient http;
EthernetInterface eth;
char str[4096];
int StartNewGame()
{
HTTPResult ret = http.get("http://4180.azurewebsites.net/api/TicTacToeGames/New", str, 4096);
if (ret > 0) {
pc.printf("HTTP Error return in StartNewGame\n");
return -1;
}
return atoi(str);
}
int JoinGame()
{
HTTPResult ret = http.get("http://4180.azurewebsites.net/api/TicTacToeGames/Join", str, 4096);
if (ret > 0) {
pc.printf("HTTP Error return in JoinGame\n");
return -1;
}
return atoi(str);
}
ostringstream host;
string s;
const char* cstr;
GAME_STATE GetGameState(int gameId)
{
//ostringstream host;
host.clear();
host << "http://4180.azurewebsites.net/odata/TicTacToeGames(" << gameId << ")?$select=GameState";
s = host.str();
cstr = s.c_str();
printf("**** HOST IS %s\n", cstr);
HTTPResult ret = http.get(cstr, str, 4096);
if (ret > 0) {
pc.printf("HTTP Error return in GetGameState\n");
return (GAME_STATE)-1;
}
s = string(str);
if (s.find("\"GameState\":\"STARTING\"") != string::npos)
return STARTING;
else if(s.find("\"GameState\":\"PLAYING\"") != string::npos)
return PLAYING;
else if(s.find("\"GameState\":\"OVER\"") != string::npos)
return OVER;
else
return RETURN_ERROR;
return (GAME_STATE)atoi(str);
}
void ParseBoard(string str, int** board)
{
// printf("Entering ParseBoard, got %s\n", str.c_str());
for (int i = 0; i < str.length(); i++){
if (str[i] == '[' || str[i] == ']' || str[i] == ',' || str[i] == '"')
str[i] = ' ';
}
string temp;
for (int i = 0; i < str.length() - 1; i++){
if (!(str[i] == ' ' && str[i+1] == ' ')){
temp += str[i];
}
}
str = temp;
// printf("With changed delimiters %s\n", str.c_str());
stringstream stream(str);
int t = 0;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
while(t < str.length() && str[t] == ' ')
t++;
board[i][j] = (int)(str[t] - '0');
//stream >> board[i][j];
}
}
/* char c;
stream >> c; // eat [
for (int i = 0; i < 3; i++) {
stream >> c; // eat [
for (int j = 0; j < 2; j++) {
stream >> board[i][j];
stream >> c ;// eat ,
}
stream >> board[i][2];
stream >> c ;// eat ]
if (i != 2)
stream >> c; // eat ,
}*/
/* for (int i = 0; i < 3; i++) {
printf("\n[");
for (int j = 0; j < 3; j++)
printf("%d ", board[i][j]);
printf("]");
}*/
}
int GetBoardState(int gameId, int** board)
{
ostringstream host;
host << "http://4180.azurewebsites.net/odata/TicTacToeGames(" << gameId << ")?$select=BoardState";
string s = host.str();
HTTPResult ret = http.get(s.c_str(), str, 4096);
if (ret > 0) {
pc.printf("HTTP Error return in GetBoardState\n");
return -1;
}
s = string(str);
int pos = s.find("\"BoardState\":");
if (pos == string::npos)
return -1;
ParseBoard(s.substr(pos +13, string::npos), board);
return 0;
}
string GameStateToString(GAME_STATE state)
{
switch(state) {
case STARTING:
return "STARTING";
case PLAYING:
return "PLAYING";
case OVER:
return "OVER";
default:
case RETURN_ERROR:
return "ERROR";
}
}
int main()
{
pc.printf("Ethernet connecting...\n");
eth.init(); //Use DHCP
eth.connect();
pc.printf("IP Address is %s\n", eth.getIPAddress());
pc.printf("Trying Start New Game...\n");
int game = StartNewGame();
wait(1);
pc.printf("Got: %d\n\n", game);
pc.printf("Trying GetGameState for Game %d...\n", game);
pc.printf("Got: %s\n\n", GameStateToString(GetGameState(game)).c_str());
pc.printf("Trying Join Game...\n");
game = JoinGame();
wait(1);
pc.printf("Got: %d\n\n", game);
//pc.printf("Trying GetGameState for Game %d...\n", game);
//pc.printf("Got: %s\n\n", GameStateToString(GetGameState(game)).c_str());
pc.printf("Trying GetBoardState for Game %d...\n", game);
Board b;
wait(1);
pc.printf("Got: %d\n\n", GetBoardState(game, b.get_board()));
pc.printf("Testing over****\n");
/*pc.printf("%d\n", sizeof(str));
HTTPResult ret = http.get("http://4180.azurewebsites.net/api/TicTacToeGames/New", str, 4096);//http.get("http://4180.azurewebsites.net/", str, 4096);
if (ret > 0)
pc.printf("Return error\n");
for (int i = 0; i < 4096;i++){
if (str[i] == '1'|| str[i] == '2' || str[i] == '3' || str[i] == '4')
pc.printf("HERE %d\n", i);
pc.putc(str[i]);
pc.printf("\n");
}*/
return 0;
TCPSocketConnection socket;
int r = socket.connect("4180.azurewebsites.net", 80);
if (r != 0)
pc.printf("Failed to connect to 4180.azurewebsites.net:80!\r\n");
char http_cmd[] = "GET / HTTP/1.0\n\n";
socket.send_all(http_cmd, sizeof(http_cmd)-1);
char buff[300];
int rtn;
while (true) {
rtn = socket.receive(buff, sizeof(buff)-1);
if (rtn <= 0)
break;
buff[rtn] = '\0';
pc.printf("Received %d chars from server:\n%s\n", rtn, buff);
}
pc.printf("Closing socket...\n");
socket.close();
eth.disconnect();
/* int ret = http.get("http://ece4180mbedonlinegaming.azurewebsites.net/odata/TicTacToeGames(1)?$select=BoardState", str, 2048);
printf("%d\n",ret);
printf("Result: %s\n", str);*/
/*
in0.mode(PullUp);
in1.mode(PullUp);
in2.mode(PullUp);
in3.mode(PullUp);
in4.mode(PullUp);
in5.mode(PullUp);
in6.mode(PullUp);
in7.mode(PullUp);
in8.mode(PullUp);
Board board;
int ** output = board.get_board();
printBoard(output);
lcd.baudrate(3000000);
lcd.line(0, 42 , 127, 42 , 0xFF0000);
lcd.line(0, 84 , 127, 84 , 0xFF0000);
lcd.line(42, 0 , 42, 127, 0xFF0000);
lcd.line(84, 0, 84, 127, 0xFF0000);
while (true) {
if(!in0)
printout = 1;
else if(!in1)
printout = 2;
else if(!in2)
printout = 3;
else if(!in3)
printout = 4;
else if(!in4)
printout = 5;
else if(!in5)
printout = 6;
else if(!in6)
printout = 7;
else if(!in7)
printout = 8;
else if(!in8)
printout = 9;
else
printout = 0;
if(printout>0)
{
bool valid = board.updateBoard(turn, printout-1);
if(valid)
{
output = board.get_board();
printBoard(output);
printout=0;
int victory = board.check_victory(turn);
if(victory ==1)
{
lcd.cls();
lcd.printf("player 1 win!");
return 0;
}
else if(victory == 2)
{
lcd.cls();
lcd.printf("player 2 win!");
return 0;
}
if(turn ==1)
turn =2;
else
turn =1;
}
}
Thread::wait(400);
}
*/
}
