bool DDLIndexPopulator::checkConstraints( const IdxTuple& data, const erydbSystemCatalog::ColType& ctype, int i, int column) { switch( fConstraint ) { case DDL_INVALID_CONSTRAINT: return true; case DDL_UNIQUE: case DDL_PRIMARY_KEY: if ((size_t)column + 1 < fColNames.size() ) return true; return checkUnique( i, ctype ); case DDL_NOT_NULL: return checkNotNull( data, ctype ); case DDL_CHECK: return checkCheck( data, ctype ); default: return true; //? } }
void Board::rmbad(int x, int y) { if(check==0)return; set<int>::iterator it; set<int> tempmoves = poss; it = tempmoves.begin(); while(it != tempmoves.end()) { //cout << (*it) << endl; int i = (*it)/10; int j = (*it)%10; //move for each cout << "testing: " << x << ", " << y << ", " << i << ", " << j << endl; movePiece(x, y, i, j); if(checkCheck()) { tempmoves.erase(it); it=tempmoves.begin(); cout << "failed" << endl; } else cout << "isgood" << endl; undo(); if(it != tempmoves.begin()) it++; //if(it++ == tempmoves.end()) break; } poss = tempmoves; }
void t_chessCli::run() { for (;;) { t_message message; { boost::unique_lock<boost::mutex> lock(sharedData.gameMutex); if (sharedData.gameBuffer.empty()) { sharedData.gameCondition.wait(lock); } message = sharedData.gameBuffer.back(); sharedData.gameBuffer.pop_back(); } std::cout<<"I have recieved a message"<<std::endl; switch (message.id) { case BOARD_CLICKED: { t_myVector2 pos = message.boardClicked.pos; std::cout<<"It was clicked at "<<pos<<std::endl; t_message newMessage; newMessage.id = HIGHLIGHT_SPACE; if (selected) { if (pos == selectedPos) { selected = 0; newMessage.highlightSpace.pos = selectedPos; newMessage.highlightSpace.color = 0; { boost::unique_lock<boost::mutex> lock(sharedData.clientMutex); sharedData.clientBuffer.push_front(newMessage); for (auto iter = move.begin(); iter != move.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = hit.begin(); iter != hit.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = castle.begin(); iter != castle.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } } move.clear(); hit.clear(); castle.clear(); } else if (std::find(move.begin(), move.end(), pos) != move.end()) { if (checkCheck(pos,selectedPos)) { std::cout<<"I am in check"<<std::endl; break; } if (turn == 0) { whitePieces.erase(selectedPos); whitePieces.insert(pos); } else { blackPieces.erase(selectedPos); blackPieces.insert(pos); } removeCastle(pos,selectedPos); selected = 0; newMessage.highlightSpace.pos = selectedPos; newMessage.highlightSpace.color = 0; { boost::unique_lock<boost::mutex> lock(sharedData.clientMutex); sharedData.clientBuffer.push_front(newMessage); for (auto iter = move.begin(); iter != move.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = hit.begin(); iter != hit.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = castle.begin(); iter != castle.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } newMessage.id = MOVE_PIECE; newMessage.movePiece.pos = pos; newMessage.movePiece.oldPos = selectedPos; sharedData.clientBuffer.push_front(newMessage); } move.clear(); hit.clear(); castle.clear(); board[pos.y][pos.x] = board[selectedPos.y][selectedPos.x]; board[selectedPos.y][selectedPos.x] = 0; turn = !turn; if (checkCheckmate()) { std::cout<<"I win"<<std::endl; } } else if (std::find(hit.begin(), hit.end(), pos) != hit.end()) { if (checkCheck(pos,selectedPos)) { std::cout<<"I am in check"<<std::endl; break; } if (turn == 0) { whitePieces.erase(selectedPos); whitePieces.insert(pos); blackPieces.erase(pos); } else { blackPieces.erase(selectedPos); blackPieces.insert(pos); whitePieces.erase(pos); } removeCastle(pos,selectedPos); selected = 0; newMessage.highlightSpace.pos = selectedPos; newMessage.highlightSpace.color = 0; { boost::unique_lock<boost::mutex> lock(sharedData.clientMutex); sharedData.clientBuffer.push_front(newMessage); for (auto iter = move.begin(); iter != move.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = hit.begin(); iter != hit.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = castle.begin(); iter != castle.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } newMessage.id = CAPTURE_PIECE; newMessage.movePiece.pos = pos; newMessage.movePiece.oldPos = selectedPos; sharedData.clientBuffer.push_front(newMessage); } move.clear(); hit.clear(); castle.clear(); board[pos.y][pos.x] = board[selectedPos.y][selectedPos.x]; board[selectedPos.y][selectedPos.x] = 0; turn = !turn; if (checkCheckmate()) { std::cout<<"I win"<<std::endl; } } else if (std::find(castle.begin(), castle.end(), pos) != castle.end()) { if (checkCheck(pos,selectedPos)) { std::cout<<"I am in check"<<std::endl; break; } if (turn == 0) { whitePieces.erase(selectedPos); whitePieces.insert(pos); } else { blackPieces.erase(selectedPos); blackPieces.insert(pos); } removeCastle(pos,selectedPos); selected = 0; newMessage.highlightSpace.pos = selectedPos; newMessage.highlightSpace.color = 0; { boost::unique_lock<boost::mutex> lock(sharedData.clientMutex); sharedData.clientBuffer.push_front(newMessage); for (auto iter = move.begin(); iter != move.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = hit.begin(); iter != hit.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = castle.begin(); iter != castle.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 0; sharedData.clientBuffer.push_front(newMessage); } newMessage.id = MOVE_PIECE; newMessage.movePiece.pos = pos; newMessage.movePiece.oldPos = selectedPos; sharedData.clientBuffer.push_front(newMessage); if (pos.x == 2) //left castle { newMessage.movePiece.pos.x = 3; newMessage.movePiece.oldPos.x = 0; } else { newMessage.movePiece.pos.x = 5; newMessage.movePiece.oldPos.x = 7; } sharedData.clientBuffer.push_front(newMessage); } move.clear(); hit.clear(); castle.clear(); board[pos.y][pos.x] = board[selectedPos.y][selectedPos.x]; board[selectedPos.y][selectedPos.x] = 0; if (pos.x == 2) //left { pos.x = 3; selectedPos.x = 0; board[pos.y][3] = board[selectedPos.y][0]; board[selectedPos.y][0] = 0; } else { pos.x = 5; selectedPos.x = 7; board[pos.y][5] = board[selectedPos.y][7]; board[selectedPos.y][7] = 0; } if (turn == 0) { whitePieces.erase(selectedPos); whitePieces.insert(pos); } else { blackPieces.erase(selectedPos); blackPieces.insert(pos); } turn = !turn; if (checkCheckmate()) { std::cout<<"I win"<<std::endl; } } } else if (board[pos.y][pos.x] && board[pos.y][pos.x]/8 == turn) { selected = 1; selectedPos = pos; newMessage.highlightSpace.pos = pos; newMessage.highlightSpace.color = 1; generateMoves(pos); { boost::unique_lock<boost::mutex> lock(sharedData.clientMutex); sharedData.clientBuffer.push_front(newMessage); for (auto iter = move.begin(); iter != move.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 2; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = hit.begin(); iter != hit.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 3; sharedData.clientBuffer.push_front(newMessage); } for (auto iter = castle.begin(); iter != castle.end(); iter++) { newMessage.highlightSpace.pos = *iter; newMessage.highlightSpace.color = 4; sharedData.clientBuffer.push_front(newMessage); } } } break; } case QUIT_MESSAGE: std::cout<<"It told me to quit"<<std::endl; return; default: std::cout<<"And I do not know what it was"<<std::endl; } } }
double ChessAI::findBestMove(bool playIt, int iter) { PieceColor color=colorToMove; Square s, e; MoveHolder moves(settings.checkWidth); if (checkForBoringTie()) { //err << "\n\n\n BORING TIE FOUND\n\n\n" << err; return 0.5; } for (int i=((color==WHITE)?0:16); i<((color==WHITE)?16:32); ++i) { if (pieces[i].alive) { s=pieces[i].square; for (e.y=0; e.y<8; ++e.y) { for (e.x=0; e.x<8; ++e.x) { bool path=checkMovePath(s, e); bool check=checkCheck(colorToMove, s, e); if (path && check) { forceMove(s, e); moves.add(MoveData(s, e, eval(color))); undo(); checkBoard(); } } } } } if (moves.size()<1) { if (checkCheck(color, kings[color]->square, kings[color]->square)) return 0.5; else return 0.0; } MoveData bestMove; bestMove.score=-1; for (auto i=moves.begin(); i!=moves.end(); ++i) { for (int j=settings.checkDepth; j>iter; --j) err << " "; err << pieceColor2Name(color) << " " << pieceType2Name(board((*i).s)->type) << " from " << (*i).s.str() << " to " << (*i).e.str() << err; forceMove((*i).s, (*i).e); double score=0; if (iter<=0) { score=eval(color); } else { score=1-findBestMove(false, iter-1); } undo(); for (int j=settings.checkDepth+1; j>iter; --j) err << " "; err << "best score for " << pieceColor2Name(myColor) << ": " << ((myColor==color)?score:1-score) << err; if (score>bestMove.score) { bestMove.s=(*i).s; bestMove.e=(*i).e; bestMove.score=score; } } if (playIt) { return game->playMove(bestMove.s, bestMove.e); } else { return bestMove.score; } }