string Game::checkandAdd(int player, int id) { vector<int> resultado; if(player==1) { resultado.push_back(122); resultado.push_back(124); resultado.push_back(126); int size=gameBoard->getJogador1Size(); for(int i=0;i<size;i++) { if(gameBoard->getJogador1PodAt(i)->getX() == 2 && (gameBoard->getJogador1PodAt(i)->getY()==2 || gameBoard->getJogador1PodAt(i)->getY()==4 || gameBoard->getJogador1PodAt(i)->getY()==6)) { for(int z=0;z<resultado.size();z++) { if(resultado[i] == 100+(gameBoard->getJogador1PodAt(i)->getX()*10)+gameBoard->getJogador1PodAt(i)->getY()) { resultado.erase(resultado.begin()+i); } } } } } else { resultado.push_back(162); resultado.push_back(164); resultado.push_back(166); int size=gameBoard->getJogador2Size(); for(int i=0;i<size;i++) { if(gameBoard->getJogador2PodAt(i)->getX() == 2 && (gameBoard->getJogador2PodAt(i)->getY()==2 || gameBoard->getJogador2PodAt(i)->getY()==4 || gameBoard->getJogador2PodAt(i)->getY()==6)) { for(int z=0;z<resultado.size();z++) { if(resultado[i] == 100+(gameBoard->getJogador2PodAt(i)->getX()*10)+gameBoard->getJogador2PodAt(i)->getY()) { resultado.erase(resultado.begin()+i); } } } } } if(resultado.size() > 0){ return criastring(resultado); } else{ return "-1"; } }
string Game::checkProngs(int player, string dir) { vector<int> res; if(player==1) { for(int i=0;i<gameBoard->getJogador1Size();i++) { Pod* aux=gameBoard->getJogador1PodAt(i); bool encontra=false; for(int j=0;j<aux->getDirsSize();j++) { if(aux->getDirsAt(j)->getDir()==dir) { encontra=true; break; } } if(!encontra) { res.push_back(aux->getId()+10); } } } else { for(int i=0;i<gameBoard->getJogador2Size();i++) { Pod* aux=gameBoard->getJogador2PodAt(i); bool encontra=false; for(int j=0;j<aux->getDirsSize();j++) { if(aux->getDirsAt(j)->getDir()==dir) { encontra=true; break; } } if(!encontra) { res.push_back(aux->getId()+20); } } } if(res.size() > 0){ return criastring(res); } else{ return "-1"; } }
int main() { criarSocket(); Game g1=Game(); g1.createBoard(); char* recebido; vector<int> valoresRecebidos; recebido=leMensagem(); cout << "P: " << recebido << endl; int dificuldade; if(strcmp(recebido,"PP")==0) { dificuldade = -1; enviaMensagem("recebidopp"); } else if(strcmp(recebido,"PC")==0) { enviaMensagem("recebidopc"); srand ((int)(time(NULL))); recebido=leMensagem(); cout << "DIFICULDADE: " << recebido << endl; dificuldade=divideStringEmInt(recebido)[0]; enviaMensagem("recebidodif"); } bool entrou = false; int count=0; while(1) { //char recebido2[256]; //fgets(recebido2, sizeof(recebido2), stdin); recebido = leMensagem(); cout << "RECEBEU : '" << recebido << endl; valoresRecebidos = divideStringEmInt(recebido); string aEnviar = g1.executaOperacao(valoresRecebidos); //g1.displayBoard(); if(g1.getBoard()->checkend() && valoresRecebidos[0]==2) { aEnviar="666"; g1=Game(); g1.createBoard(); entrou = true; } cout<<aEnviar<<endl; enviaMensagem(aEnviar.c_str()); cout << "Enviou '" << aEnviar << "'"<< endl; aEnviar.clear(); string toSend; //TODO: nao possibilidade if(dificuldade != -1 && (valoresRecebidos[0] == 1 || valoresRecebidos[0] == 2 || valoresRecebidos[0] == 3) && !entrou){ char* recebido2=leMensagem(); cout << "PRIMEIRA RECECAO: " << recebido2 << endl; bool one=g1.checkcomprong(); bool two=g1.checkcommove(); bool three=g1.checkcomadd(); vector<int>possibilidades; if(one==true) { possibilidades.push_back(1); } if(two==true) { possibilidades.push_back(2); } if(three==true) { possibilidades.push_back(3); } int first=geraRandom(possibilidades); int second; int third; //int x; //int y; vector<int> possibilidades2; vector<int> possibilidades3; vector<int> resultados; resultados.push_back(first); switch(first) { case 1: possibilidades2 = g1.getPodsToAddProng(); second=geraRandom(possibilidades2); resultados.push_back(second+20); possibilidades3 = g1.getDirsToAddProng(second); third=geraRandom(possibilidades3); resultados.push_back(third); toSend=criastring(resultados); break; case 2: //pode move pod || IDPECA(2) X Y possibilidades2 = g1.getPodsWithProng(); second=geraRandom(possibilidades2); possibilidades3 = g1.getHousesToMove(second); resultados.push_back(second+20); third=geraRandom(possibilidades3); resultados.push_back(third/10); resultados.push_back(third%10); toSend=criastring(resultados); break; case 3: //pod adicionar pod || IDPECA(2) X Y possibilidades2 = g1.getPodsToAdd(); second=geraRandom(possibilidades2); resultados.push_back(second+20); possibilidades3 = g1.getOctiPlaces(); third=geraRandom(possibilidades3); resultados.push_back(third/10); resultados.push_back(third%10); toSend=criastring(resultados); break; } //system("cls"); enviaMensagem(toSend.c_str()); cout<<"O COM SUGERE:"<<toSend.c_str()<<endl; if(first==2){ string aEnviar2 = ""; if(g1.getBoard()->checkend()) { aEnviar2="666"; g1=Game(); g1.createBoard(); entrou = false; } enviaMensagem(aEnviar2.c_str()); } valoresRecebidos = divideStringEmInt(toSend.c_str()); aEnviar = g1.executaOperacao(valoresRecebidos); } //g1.displayBoard(); //count++; } system("pause"); return 0; }
string Game::checkMovimentos(int player,int id) { string res; vector<int> resultados; int number=0; if(player==1) { bool podfound=false; int size=gameBoard->getJogador1Size(); for(int i=0;i<size;i++) { Pod * aux=gameBoard->getJogador1PodAt(i); if(aux->getId()==id) { podfound=true; int sizedir= aux->getDirsSize(); for(int j=0;j<sizedir;j++) { if(aux->getDirsAt(j)->getDir()=="n") { if(aux->getX()<=6) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()+1 && aux->getY()==gameBoard->getJogador1PodAt(z)->getY()) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()+1 && aux->getY()==gameBoard->getJogador2PodAt(z)->getY()) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()+1)*10)+aux->getY()); } } } else if(aux->getDirsAt(j)->getDir()=="s") { if(aux->getX()>=2) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()-1 && aux->getY()==gameBoard->getJogador1PodAt(z)->getY()) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()-1 && aux->getY()==gameBoard->getJogador2PodAt(z)->getY()) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()-1)*10)+aux->getY()); } } } else if(aux->getDirsAt(j)->getDir()=="e") { if(aux->getY()>=2) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getY()==aux->getY()-1 && aux->getX()==gameBoard->getJogador1PodAt(z)->getX()) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getY()==aux->getY()-1 && aux->getX()==gameBoard->getJogador2PodAt(z)->getX()) { encontra=true; } } if(!encontra) { resultados.push_back(100+(aux->getX()*10)+(aux->getY()-1)); } } } else if(aux->getDirsAt(j)->getDir()=="o") { if(aux->getY()<=6) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getY()==aux->getY()+1 && aux->getX()==gameBoard->getJogador1PodAt(z)->getX()) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getY()==aux->getY()+1 && aux->getX()==gameBoard->getJogador2PodAt(z)->getX()) { encontra=true; } } if(!encontra) { resultados.push_back(100+(aux->getX()*10)+(aux->getY()+1)); } } } else if(aux->getDirsAt(j)->getDir()=="ne") { if(aux->getX()<=6 && aux->getY()>=2) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()+1 && gameBoard->getJogador1PodAt(z)->getY()==aux->getY()-1) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()+1 && gameBoard->getJogador2PodAt(z)->getY()==aux->getY()-1) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()+1)*10)+(aux->getY()-1)); } } } else if(aux->getDirsAt(j)->getDir()=="no") { if(aux->getX()<=6 && aux->getY()<=6) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()+1 && gameBoard->getJogador1PodAt(z)->getY()==aux->getY()+1) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()+1 && gameBoard->getJogador2PodAt(z)->getY()==aux->getY()+1) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()+1)*10)+(aux->getY()+1)); } } } else if(aux->getDirsAt(j)->getDir()=="se") { if(aux->getX()>=2 && aux->getY()>=2) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()-1 && gameBoard->getJogador1PodAt(z)->getY()==aux->getY()-1) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()-1 && gameBoard->getJogador2PodAt(z)->getY()==aux->getY()-1) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()-1)*10)+(aux->getY()-1)); } } } else if(aux->getDirsAt(j)->getDir()=="so") { if(aux->getX()>=2 && aux->getY()<=6) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()-1 && gameBoard->getJogador1PodAt(z)->getY()==aux->getY()+1) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()-1 && gameBoard->getJogador2PodAt(z)->getY()==aux->getY()+1) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()-1)*10)+(aux->getY()+1)); } } } } break; } } if(!podfound) { cout<<"NAO ENCONTROU TURNO 1"<<endl; bool encontra1=false; bool encontra2=false; bool encontra3=false; int sizeJogador1=gameBoard->getJogador1Size(); for(int i=0;i<sizeJogador1;i++) { if(gameBoard->getJogador1PodAt(i)->getX()==2) { if(gameBoard->getJogador1PodAt(i)->getY()==2) { encontra1=true; } else if(gameBoard->getJogador1PodAt(i)->getY()==4) { encontra2=true; } else if(gameBoard->getJogador1PodAt(i)->getY()==6) { encontra3=true; } } } if(!encontra1) { resultados.push_back(100+2*10+2); } if(!encontra2) { resultados.push_back(100+2*10+4); } if(!encontra3) { resultados.push_back(100+2*10+6); } } } else { bool podfound=false; int size=gameBoard->getJogador2Size(); for(int i=0;i<size;i++) { Pod * aux=gameBoard->getJogador2PodAt(i); if(aux->getId()==id) { podfound=true; int sizedir= aux->getDirsSize(); for(int j=0;j<sizedir;j++) { if(aux->getDirsAt(j)->getDir()=="n") { if(aux->getX()>=2) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()-1 && aux->getY()==gameBoard->getJogador1PodAt(z)->getY()) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()-1 && aux->getY()==gameBoard->getJogador2PodAt(z)->getY()) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()-1)*10)+(aux->getY())); } } } else if(aux->getDirsAt(j)->getDir()=="s") { if(aux->getX()<=6) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()+1 && aux->getY()==gameBoard->getJogador1PodAt(z)->getY()) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()+1 && aux->getY()==gameBoard->getJogador2PodAt(z)->getY()) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()+1)*10)+aux->getY()); } } } else if(aux->getDirsAt(j)->getDir()=="e") { if(aux->getY()<=6) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getY()==aux->getY()+1 && aux->getX()==gameBoard->getJogador1PodAt(z)->getX()) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getY()==aux->getY()+1 && aux->getX()==gameBoard->getJogador2PodAt(z)->getX()) { encontra=true; } } if(!encontra) { resultados.push_back(100+(aux->getX()*10)+(aux->getY()+1)); } } } else if(aux->getDirsAt(j)->getDir()=="o") { if(aux->getY()>=2) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getY()==aux->getY()-1 && aux->getX()==gameBoard->getJogador1PodAt(z)->getX()) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getY()==aux->getY()-1 && aux->getX()==gameBoard->getJogador2PodAt(z)->getX()) { encontra=true; } } if(!encontra) { resultados.push_back(100+(aux->getX()*10)+(aux->getY()-1)); } } } else if(aux->getDirsAt(j)->getDir()=="ne") { if(aux->getX()>=2 && aux->getY()<=6) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()-1 && gameBoard->getJogador1PodAt(z)->getY()==aux->getY()+1) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()-1 && gameBoard->getJogador2PodAt(z)->getY()==aux->getY()+1) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()-1)*10)+(aux->getY()+1)); } } } else if(aux->getDirsAt(j)->getDir()=="no") { if(aux->getX()>=2 && aux->getY()>=2) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()-1 && gameBoard->getJogador1PodAt(z)->getY()==aux->getY()-1) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()-1 && gameBoard->getJogador2PodAt(z)->getY()==aux->getY()-1) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()-1)*10)+(aux->getY()-1)); } } } else if(aux->getDirsAt(j)->getDir()=="se") { if(aux->getX()<=6 && aux->getY()<=6) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()+1 && gameBoard->getJogador1PodAt(z)->getY()==aux->getY()+1) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()+1 && gameBoard->getJogador2PodAt(z)->getY()==aux->getY()+1) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()+1)*10)+(aux->getY()+1)); } } } else if(aux->getDirsAt(j)->getDir()=="so") { if(aux->getX()<=6 && aux->getY()>=2) { int size2=gameBoard->getJogador1Size(); int size3=gameBoard->getJogador2Size(); //Pecas do 1 bool encontra=false; for(int z=0;z<size2;z++) { if(gameBoard->getJogador1PodAt(z)->getX()==aux->getX()+1 && gameBoard->getJogador1PodAt(z)->getY()==aux->getY()-1) { encontra=true; } } //Pecas do 2 for(int z=0;z<size3;z++) { if(gameBoard->getJogador2PodAt(z)->getX()==aux->getX()+1 && gameBoard->getJogador2PodAt(z)->getY()==aux->getY()-1) { encontra=true; } } if(!encontra) { resultados.push_back(100+((aux->getX()+1)*10)+(aux->getY()-1)); } } } } break; } } if(!podfound) { cout<<"NAO ENCONTROU TURNO 2"<<endl; bool encontra1=false; bool encontra2=false; bool encontra3=false; int sizeJogador2=gameBoard->getJogador2Size(); for(int i=0;i<sizeJogador2;i++) { if(gameBoard->getJogador2PodAt(i)->getX()==6) { if(gameBoard->getJogador2PodAt(i)->getY()==2) { encontra1=true; } else if(gameBoard->getJogador2PodAt(i)->getY()==4) { encontra2=true; } else if(gameBoard->getJogador2PodAt(i)->getY()==6) { encontra3=true; } } } if(!encontra1) { resultados.push_back(100+6*10+2); } if(!encontra2) { resultados.push_back(100+6*10+4); } if(!encontra3) { resultados.push_back(100+6*10+6); } } } if(resultados.size()>0) return criastring(resultados); else return "-1"; }