#include "SimplePlayer.H"
string myDtoa (double n)
{
string ret;
strstream tmp;
tmp << n << ends;
ret = tmp.str ();
tmp.rdbuf()->freeze(0);
return ret;
}
SimplePlayer::SimplePlayer(const string & server, int port){
if (sock.init(server,port) == -1){
cerr << "Could not open socket to " << server << ":" << port << endl;
exit(1);
}
};
void SimplePlayer::init(){
string msg = "(init " + team + ")";
sock.sendMessage(msg);
string imsg;
if (sock.receiveMessageBlock(imsg) == 1){
msg = "(move -20 0)";
sock.sendMessage(msg);
}
};
void SimplePlayer::run(const string & teamname){
team = teamname;
init();
string msg;
string mode = "before_kickoff";
while (1) {
if (sock.receiveMessageBlock(msg) == 1){
List m;
m.parse(msg);
cout << "DATA is: " << endl;
cout << m << endl;
List first = m.getFirst();
if (!first.isAtom()) {
cerr << "ERROR: bad message " << m << endl;
continue;
}
string f = first.getValue();
m.eraseFirst();
string time = m.getFirstAndErase().getValue();
if (f == "hear") {
string sender = m.getFirst().getValue();
m.eraseFirst();
if (sender == "referee") {
mode = m.getFirst().getValue();
}
cout << "mode is now " << mode << endl;
}
else if (f == "see") {
if ((mode == "kick_off_l") || (mode == "kick_off_r")) { for (List item = m.getFirstAndErase(); !item.isNull(); item = m.getFirstAndErase()){
List objectList = item.getFirstAndErase(); string obj = objectList.getFirstAndErase().getValue(); string distanceS;
double distance;
string directionS;
double direction;
if (obj == "ball") {
distanceS = item.getFirstAndErase().getValue();
distance = atof(distanceS.c_str());
directionS = item.getFirstAndErase().getValue();
direction = atof(directionS.c_str());
if (fabs(direction) > 15 ) { string outm = "(turn " + directionS + ")";
sock.sendMessage(outm);
}
else { string outm = "(dash 100)";
sock.sendMessage(outm);
}
}
}
}
}
msg = "";
};
};
};