示例#1
0
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;
}
示例#2
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();*/
}
示例#3
0
文件: Play.c 项目: NYAMNYAM3/chess
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;
    }
}
示例#4
0
	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;
	}