//checks if same colour public bool isSameColour(Piece P) { if (P.getColour() == this.colour) return true; else return false; }
//checks if same colour public bool isSameColour(Piece P) { if (P.getColour() == this.colour) { return(true); } else { return(false); } }
public override List <Tuple <uint, uint> > getPossibleMoves(Board.QueryFunc QF) { List <Tuple <uint, uint> > moves = new List <Tuple <uint, uint> >(); // Check down moves int x = (int)getX(); int y = (int)getY(); for (int i = -1; i <= 1; i++) { for (int j = -1; j <= 1; j++) { int nx = x + i; int ny = y + j; if (withinBoard(nx, ny)) { Square s = QF((uint)nx, (uint)ny); if ((getColour() == "white" && s.getBlackCover() == 0) || (getColour() == "black" && s.getWhiteCover() == 0)) { Piece p = s.getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)nx, (uint)ny)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)nx, (uint)ny)); } } } } } } // Done, all moves found return(moves); }
// Get all moves of a specific colour. private List <Tuple <uint, uint, uint, uint> > getMoves(string col) { List <Tuple <uint, uint, uint, uint> > moves = new List <Tuple <uint, uint, uint, uint> >(); for (uint y = 0; y < BOARD_SIZE_Y; y++) { for (uint x = 0; x < BOARD_SIZE_X; x++) { Piece p = getPieceAt(x, y); if (p != null && p.getColour() == col) { List <Tuple <uint, uint> > newMoves = p.getPossibleMoves(getSquareAt); foreach (Tuple <uint, uint> t in newMoves) { moves.Add(new Tuple <uint, uint, uint, uint>(x, y, t.Item1, t.Item2)); } } } } return(moves); }
public override List <Tuple <uint, uint> > getPossibleMoves(Board.QueryFunc QF) { List <Tuple <uint, uint> > moves = new List <Tuple <uint, uint> >(); // Check down moves int x = (int)getX(); int y = (int)getY(); while (true) { y--; if (!withinBoard(x, y)) { break; } Piece p = QF((uint)x, (uint)y).getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); break; } else { break; } } } // Check up moves x = (int)getX(); y = (int)getY(); while (true) { y++; if (!withinBoard(x, y)) { break; } Piece p = QF((uint)x, (uint)y).getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); break; } else { break; } } } // Check right moves x = (int)getX(); y = (int)getY(); while (true) { x++; if (!withinBoard(x, y)) { break; } Piece p = QF((uint)x, (uint)y).getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); break; } else { break; } } } // Check left moves x = (int)getX(); y = (int)getY(); while (true) { x--; if (!withinBoard(x, y)) { break; } Piece p = QF((uint)x, (uint)y).getPiece(); if (p == null) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); } else { if (p.getColour() != getColour()) { moves.Add(new Tuple <uint, uint>((uint)x, (uint)y)); break; } else { break; } } } // Done, all moves found return(moves); }
// --- Constructor --- public Board() { // Create squares for (uint y = 0; y < BOARD_SIZE_Y; y++) { for (uint x = 0; x < BOARD_SIZE_X; x++) { squares[x, y] = new Square(x, y, reward[x, y]); } } // Create white pieces squares[0, 0].setPiece(new Rook(0, 0, COLOUR_WHITE)); squares[1, 0].setPiece(new Knight(1, 0, COLOUR_WHITE)); squares[2, 0].setPiece(new Bishop(2, 0, COLOUR_WHITE)); squares[3, 0].setPiece(new Queen(3, 0, COLOUR_WHITE)); squares[4, 0].setPiece(new King(4, 0, COLOUR_WHITE)); squares[5, 0].setPiece(new Bishop(5, 0, COLOUR_WHITE)); squares[6, 0].setPiece(new Knight(6, 0, COLOUR_WHITE)); squares[7, 0].setPiece(new Rook(7, 0, COLOUR_WHITE)); for (uint x = 0; x < BOARD_SIZE_X; x++) { squares[x, 1].setPiece(new Pawn(x, 0, COLOUR_WHITE)); } // Create black pieces squares[0, BOARD_SIZE_Y - 1].setPiece(new Rook(0, BOARD_SIZE_Y - 1, COLOUR_BLACK)); squares[1, BOARD_SIZE_Y - 1].setPiece(new Knight(1, BOARD_SIZE_Y - 1, COLOUR_BLACK)); squares[2, BOARD_SIZE_Y - 1].setPiece(new Bishop(2, BOARD_SIZE_Y - 1, COLOUR_BLACK)); squares[3, BOARD_SIZE_Y - 1].setPiece(new Queen(3, BOARD_SIZE_Y - 1, COLOUR_BLACK)); squares[4, BOARD_SIZE_Y - 1].setPiece(new King(4, BOARD_SIZE_Y - 1, COLOUR_BLACK)); squares[5, BOARD_SIZE_Y - 1].setPiece(new Bishop(5, BOARD_SIZE_Y - 1, COLOUR_BLACK)); squares[6, BOARD_SIZE_Y - 1].setPiece(new Knight(6, BOARD_SIZE_Y - 1, COLOUR_BLACK)); squares[7, BOARD_SIZE_Y - 1].setPiece(new Rook(7, BOARD_SIZE_Y - 1, COLOUR_BLACK)); for (uint x = 0; x < BOARD_SIZE_X; x++) { squares[x, BOARD_SIZE_Y - 2].setPiece(new Pawn(x, BOARD_SIZE_Y - 2, COLOUR_BLACK)); } // Add cover QueryFunc qf = getSquareAt; foreach (Square s in squares) { Piece p = s.getPiece(); if (p != null) { List <Tuple <uint, uint> > cover = p.getPossibleMoves(qf); foreach (Tuple <uint, uint> t in cover) { if (p.getColour() == COLOUR_WHITE) { squares[t.Item1, t.Item2].addWhiteCover(); } else { squares[t.Item1, t.Item2].addBlackCover(); } } } } }
public bool makeMove(string col, uint x1, uint y1, uint x2, uint y2) { Piece p = getPieceAt(x1, y1); Square s1 = getSquareAt(x1, y1); Square s2 = getSquareAt(x2, y2); // Check if squares are ok. if (s1 == null || s2 == null) { return(false); } // Check if piece is ok. if (p == null) { return(false); } if (p.getColour() != col) { return(false); } if (!p.movePossible(x2, y2, getSquareAt)) { return(false); } // Move is legal // If there is a piece at x2,y2 then remove its cover. Piece p2 = s2.getPiece(); if (p2 != null) { foreach (Tuple <uint, uint> t in p2.getPossibleMoves(getSquareAt)) { // If moving piece is white, remove black cover, and vc.v. if (col == COLOUR_WHITE) { getSquareAt(t.Item1, t.Item2).removeBlackCover(); } else { getSquareAt(t.Item1, t.Item2).removeWhiteCover(); } } } // Remove from old position s1.removePiece(); foreach (Tuple <uint, uint> t in p.getPossibleMoves(getSquareAt)) { // If moving piece is white, remove white cover, and vc.v. if (col == COLOUR_WHITE) { getSquareAt(t.Item1, t.Item2).removeWhiteCover(); } else { getSquareAt(t.Item1, t.Item2).removeBlackCover(); } } // Add to new position getSquareAt(x2, y2).setPiece(p); p.move(x2, y2); foreach (Tuple <uint, uint> t in p.getPossibleMoves(getSquareAt)) { // If moving piece is white, add white cover, and vc.v. if (col == COLOUR_WHITE) { getSquareAt(t.Item1, t.Item2).addWhiteCover(); } else { getSquareAt(t.Item1, t.Item2).addBlackCover(); } } return(true); }
// Check if black piece at x, y public bool isBlack(uint x, uint y) { Piece p = getPieceAt(x, y); return(p != null && p.getColour() == COLOUR_BLACK); }
// Check if white piece at x, y public bool isWhite(uint x, uint y) { Piece p = getPieceAt(x, y); return(p != null && p.getColour() == COLOUR_WHITE); }