int main() { #ifdef _DEBUG _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF ); _CrtDumpMemoryLeaks(); #endif CChessKing King(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(7, 4)); CChessKnight Knight(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(2, 1)); CChessKing King2(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(0, 0)); CChessKnight Knight2(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(2, 1)); CChessKnight Knight3(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(99, 19)); CChessBaseFigure *pFigures[32]; pFigures[0] = &King; pFigures[1] = &Knight; CChessKing WKing(CChessBaseFigure::FIGURE_WHITE, DirectX::XMINT2(0, 3)); /* // check CChessKing BKing(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(4, 7)); CChessRook BRook(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(2, 6)); CChessKing WKing(CChessBaseFigure::FIGURE_WHITE, DirectX::XMINT2(2, 2)); */ /* // checkmate CChessKing BKing(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(3, 2)); CChessRook BRook(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(6, 0)); CChessKing WKing(CChessBaseFigure::FIGURE_WHITE, DirectX::XMINT2(3, 0)); */ /* // stalemate CChessKing BKing(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(2, 3)); CChessQuenn BQuenn(CChessBaseFigure::FIGURE_BLACK, DirectX::XMINT2(2, 1)); CChessKing WKing(CChessBaseFigure::FIGURE_WHITE, DirectX::XMINT2(0, 2)); */ CChessBoard::GetInstance()->Draw(); printf(CChessBoard::GetInstance()->GetState(&WKing).c_str()); CChessBoard::GetInstance()->Clear(); ClearFiguresData(); _getch(); return 0; }
void CChessGUI::DrawPiece(CPiece piece) { gl::Piece pieceType = decodePiece(piece); switch(pieceType) { case gl::Rook: Rook(piece); break; case gl::Biship: Biship(piece); break; case gl::Knight: Knight(piece); break; case gl::King: King(piece); break; case gl::Queen: Queen(piece); break; case gl::Pawn: Pawn(piece); break; }; //for now, just draw squares /* GLfloat glX1 = tileNumber.x*.09375+.125+.03; GLfloat glY1 = tileNumber.y*.09375+.125+.03; GLfloat glX2 = tileNumber.x*.09375+.125+.09375-.03; GLfloat glY2 = tileNumber.y*.09375+.125+.09375-.03; glColor3f(200, 10, 0); glBegin(GL_QUADS); glVertex2f(glX1,glY1); glVertex2f(glX2,glY1); glVertex2f(glX2,glY2); glVertex2f(glX1,glY2); glEnd();*/ }
void Play() { CurrentBoardPosition=-1; MoveClassification=0; MoveAlreadyMadeFlag=0; Error=0; PieceError=0; if(MoveCycleNumber==1) { WhitePawnEnPassantFlag=0; BlackPawnEnPassantFlag=0; } while(Error==0) { PlayInputTranslate(); Castle(); Whitepawn(); ErrorSignal(); CHECKERROR BlackPawn(); ErrorSignal(); CHECKERROR PawnToQueen(); Rook(); ErrorSignal(); CHECKERROR Knight(); ErrorSignal(); CHECKERROR Bishop(); ErrorSignal(); CHECKERROR Queen(); ErrorSignal(); CHECKERROR King(); ErrorSignal(); CHECKERROR Etc(); ErrorSignal(); break; } }
std::vector<Position> King::moves(const Board& board) const { std::vector<Position> validPosition; Position tempPosition; //Check the space around the king for default moves for (int i = 0; i < 3; i++) { tempPosition.x = this->position.x - 1 + i; for (int j = 0; j < 3; j++) { tempPosition.y = this->position.y - 1 + j; //if the space is valid and not occupied by an ally it is a legal move if (tempPosition.valid() && ( ( board.getPiece(tempPosition) == nullptr ) || (board.getPiece(tempPosition)->isWhite() != this->isWhite()) ) ) validPosition.push_back(tempPosition); } } // Check for valid castling if (!_hasMoved && !isChecked(board)) { Rook* leftRook = dynamic_cast<Rook *>(board.getPiece(Position(0, position.y))); Rook* rightRook = dynamic_cast<Rook *>(board.getPiece(Position(7, position.y))); bool leftCastling = true; bool rightCastling = true; King castlingKing = King(position,isWhite()); for (int l = -1; l < 2; l += 2) { //Check if the spaces (2) between king and rook is un-occupied if (board.getPiece(Position(position.x + 1 * l, position.y)) == nullptr && board.getPiece(Position(position.x + 2 * l, position.y)) == nullptr) { for (int k = 1; k < 3; k++) { Position tempPosition = position; tempPosition.x += k*l; castlingKing.position = tempPosition; //Check if the extra space between left rook and king is occupied (and remaining casling conditions) if (l == -1) { if (board.getPiece(Position(position.x + 3 * l, position.y)) != nullptr || leftRook == nullptr || leftRook->hasMoved() || castlingKing.isChecked(board)) { leftCastling = false; } //Check remaining castling conditions for right rook castling } else if (l == 1) { if (rightRook == nullptr || rightRook->hasMoved() || castlingKing.isChecked(board)) { rightCastling = false; } } } } else { if (l == 1) { rightCastling = false; } else if (l == -1) { leftCastling = false; } } } //if castling is valid push the position (+ or -) 2 on the x-axis as legal. if (leftCastling) validPosition.push_back(Position(position.x - 2, position.y)); if (rightCastling) validPosition.push_back(Position(position.x + 2, position.y)); } return validPosition; }