public void PawnPass() { //Setup var board = new Board() { Top = Side.White, Bottom = Side.Black }; var grid = BoardHelper.GetEmptyBoard(); var row1 = BoardHelper.GetEmptyRow(); var pawn = new Peice { Type = PeiceType.Pawn, Side = Side.White, X = 0, Y = 0 }; row1[0] = pawn; grid[0] = row1; board.SetGrid(grid); Assert.True(Pawn.CanMove(board, pawn, 0, 1).Success); Assert.True(Pawn.CanMove(board, pawn, 0, 2).Success); }
public void PawnBackwardsFail() { //Setup var board = new Board { Top = Side.White, Bottom = Side.Black }; var grid = BoardHelper.GetEmptyBoard(); var row1 = BoardHelper.GetEmptyRow(); var pawn = new Peice { Type = PeiceType.Pawn, Side = Side.White, X = 0, Y = 0, HasMoved = true }; row1[1] = pawn; grid[0] = row1; board.SetGrid(grid); Assert.False(Pawn.CanMove(board, pawn, 0, -1).Success); }
public static IPeice[] GetSinglePeiceRow(Peice peice, int y) { var row = new IPeice[8]; row[y] = peice; return(row); }
public void CastleMoveFail() { //Setup var board = new Board { Top = Side.White, Bottom = Side.Black }; var grid = BoardHelper.GetEmptyBoard(); var row1 = BoardHelper.GetEmptyRow(); var rook = new Peice { Type = PeiceType.Castle, X = 0, Y = 0 }; row1[0] = rook; grid[0] = row1; board.SetGrid(grid); Assert.False(Castle.CanMove(board, rook, 0, 0)); Assert.False(Castle.CanMove(board, rook, -1, 0)); Assert.False(Castle.CanMove(board, rook, 8, 0)); Assert.False(Castle.CanMove(board, rook, 7, 1)); Assert.False(Castle.CanMove(board, rook, 0, -1)); Assert.False(Castle.CanMove(board, rook, 0, 8)); }
void Start() { for (int i = 0; i < boardState.GetLength(0); i++) { for (int j = 0; j < boardState.GetLength(1); j++) { boardState[j, i] = new Peice(); boardState[j, i].Spawn(j, i, peicesPrefab, this.GetComponent <Transform>()); } } //Getting the edges of the board sprite in Viewport Point boardMaxBounds = Camera.main.WorldToViewportPoint(boardSprite.bounds.max); boardMinBounds = Camera.main.WorldToViewportPoint(boardSprite.bounds.min); }
public void PawnEnPassantPass() { //Setup var board = new Board { Top = Side.White, Bottom = Side.Black }; var grid = BoardHelper.GetEmptyBoard(); var row1 = BoardHelper.GetEmptyRow(); var row2 = BoardHelper.GetEmptyRow(); var pawn = new Peice { Type = PeiceType.Pawn, Side = Side.White, X = 0, Y = 4 }; var enPassantPrev = new Peice { Type = PeiceType.Pawn, Side = Side.Black, X = 1, Y = 2, HasMoved = true }; var enPassant = new Peice { Type = PeiceType.Pawn, Side = Side.Black, X = 1, Y = 4, HasMoved = true }; row1[4] = pawn; row2[4] = enPassant; grid[0] = row1; grid[1] = row2; board.SetGrid(grid); board.RecordMove(enPassantPrev, enPassant); Assert.True(Pawn.CanMove(board, pawn, 1, 1).Success); }
public void CastleMoveCastlePass() { //Setup var board = new Board() { Top = Side.White, Bottom = Side.Black }; var grid = BoardHelper.GetEmptyBoard(); var firstRow = BoardHelper.GetEmptyRow(); var kingRow = BoardHelper.GetEmptyRow(); var lastRow = BoardHelper.GetEmptyRow(); var leftRook = new Peice { Type = PeiceType.Castle, X = 0, Y = 0 }; var rightRook = new Peice { Type = PeiceType.Castle, X = 7, Y = 0 }; var king = new Peice { Type = PeiceType.King, X = 5, Y = 0 }; firstRow[0] = leftRook; kingRow[0] = king; lastRow[0] = rightRook; grid[0] = firstRow; grid[5] = kingRow; grid[7] = lastRow; board.SetGrid(grid); Assert.True(Castle.CanMove(board, leftRook, 3, 0)); Assert.True(Castle.CanMove(board, rightRook, -2, 0)); }
public void CastleMoveBlockedFail() { //Setup var grid = BoardHelper.GetEmptyBoard(); var row1 = BoardHelper.GetEmptyRow(); var row2 = BoardHelper.GetEmptyRow(); var rook = new Peice { Type = PeiceType.Castle, X = 0, Y = 0 }; var verticalBlock = new Peice { Type = PeiceType.Pawn, X = 0, Y = 1 }; var horizontalBlock = new Peice { Type = PeiceType.Pawn, X = 1, Y = 0 }; row1[0] = rook; row1[1] = verticalBlock; row2[0] = horizontalBlock; grid[0] = row1; grid[1] = row2; var board = new Board() { Top = Side.White, Bottom = Side.Black }; board.SetGrid(grid); Assert.False(Castle.CanMove(board, rook, 0, 7)); Assert.False(Castle.CanMove(board, rook, 7, 0)); }
public void PawnEnPassantImmediateFail() { //Setup var board = new Board { Top = Side.White, Bottom = Side.Black }; IPeice[][] grid = BoardHelper.GetEmptyBoard(); var row1 = BoardHelper.GetEmptyRow(); var row2 = BoardHelper.GetEmptyRow(); var pawn = new Peice { Type = PeiceType.Pawn, Side = Side.White, X = 0, Y = 4 }; var pawn2 = new Peice { Type = PeiceType.Pawn, Side = Side.Black, X = 1, Y = 4, HasMoved = true }; row1[4] = pawn; row2[4] = pawn2; grid[0] = row1; grid[1] = row2; board.SetGrid(grid); var execute = Pawn.CanMove(board, pawn, 1, 1); Assert.False(execute.Success); }
public void UpdateChessBoard() { ClearChessboard(); for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { Peice piece = game.GetPeice(new Point(i, j)); if (piece != null) { var coordinates = ToCord(new Point(i, j)); var worldCoordinates = transform.TransformPoint(coordinates.Item1, 0, coordinates.Item2); var rotation = piece.MySide == PSide.White ? Quaternion.Euler(-90, 0, 0) : Quaternion.Euler(-90, 180, 0); GameObject p = Instantiate(GetPiecePrefab(piece), worldCoordinates, rotation, transform); p.layer = piecesLayer; pieces.Add(p); } } } }
internal static void movePeice(Peice[,] board, Point fromPoint, Move toMove) { Peice movpeice = board[fromPoint.X, fromPoint.Y]; board[fromPoint.X, fromPoint.Y] = null; board[toMove.movPoint.X, toMove.movPoint.Y] = movpeice; switch (toMove.moveType) { case MoveTypes.enpass: { board[toMove.ensidePoint.X, toMove.ensidePoint.Y] = null; break; } case MoveTypes.castle: { Peice rookPeice = board[toMove.rookPoint.X, toMove.rookPoint.Y]; board[toMove.rookPoint.X, toMove.rookPoint.Y] = null; board[toMove.newrookPoint.X, toMove.newrookPoint.Y] = rookPeice; break; } } }
} //Draw game public bool MakeMove(Point toPoint) { if (selectedpiece == null) { return(false); } if (selectedpiece.myMoves.Any(mov => mov.movPoint == toPoint)) //Is selected move for peice valid? { bool activemove = false; //Move from chosen point Move mov = GetMove(toPoint).Value; //Move piece Peice lastoccup; if (mov.moveType == MoveTypes.enpass) { lastoccup = GetPeice(mov.ensidePoint); } else { lastoccup = Gameboard[toPoint.X, toPoint.Y]; } movePeice(Gameboard, selectedpiece.MyLocation, mov); //Transform pawn if (selectedpiece.MyType == PType.Pawn) { activemove = true; if (PAWNTRANFORM && (int)altSide(turn) * 7 == toPoint.Y) { selectedpiece.ChangeType(GetPieceTransform()); } } //Move events if (OnPieceMove != null) { OnPieceMove(new Tuple <Peice, Point>(selectedpiece, toPoint)); } //Take events if (lastoccup != null) { PieceList.Remove(lastoccup); TakenList.Add(lastoccup); activemove = true; if (OnPieceTaken != null) { OnPieceTaken(lastoccup); } } //Aftermove update for piece selectedpiece.AfterMove(); //Update inactive move counter if (!activemove) { inactive_count++; } else { inactive_count = 0; } } else { return(false); } turn_count++; ischecked = new bool[2]; inattacksquares[(int)turn].Clear(); //Update for next turn, calculate possible moves turn = altSide(turn); int movecount = 0; foreach (Peice peice in getPeices(Gameboard, turn)) { movecount += peice.UpdateMoves(); } //Display endgame messege if (ischecked[(int)turn] && movecount != 0) //Checked { if (OnCheck != null) { OnCheck(turn, EndGames.Check); } } else if (ischecked[(int)turn] && movecount == 0) //Chekmated { if (OnEndGame != null) { OnEndGame(turn, EndGames.Checkmate); } ; active = false; } else if (!ischecked[(int)turn] && movecount == 0) //Stalemated { if (OnEndGame != null) { OnEndGame(turn, EndGames.Stalemate); } active = false; } //Game continues for next turn selectedpiece = null; return(true); } //Play turn, move to point
public void OnTake(Peice peice) { PlaySound(Sounds.take); PBoxWhite.Invalidate(); PBoxBlack.Invalidate(); }
public static CommandResult Move(Peice peice, int dX, int dY) { throw new NotImplementedException(); }
public static CommandResult Move(Peice peice, int dX, int dY) { return(CommandResult.GetSuccess("")); }
public static bool CanMove(Board board, Peice peice, int dX, int dY) { if ((dX != 0 && dY != 0) || (dX + dY) == 0) { return(false); } if (peice.X + dX < 0 | peice.X + dX > 7) { return(false); } if (peice.Y + dY < 0 | peice.Y + dY > 7) { return(false); } List <Peice> blockingPeices = new List <Peice>(); if (dX != 0) { var dir = dX < 0 ? -1 : 1; var cursor = peice.X; while (cursor != peice.X + dX) { cursor += dir; var bPeice = board.GetPeice(cursor, peice.Y) as Peice; if (bPeice != null) { blockingPeices.Add(bPeice); } } } else { var dir = dY < 0 ? -1 : 1; var cursor = peice.Y; while (cursor != peice.Y + dY) { cursor += dir; var bPeice = board.GetPeice(peice.X, cursor) as Peice; if (bPeice != null) { blockingPeices.Add(bPeice); } } } if (!blockingPeices.Any()) { return(true); } var king = blockingPeices.FirstOrDefault(x => x.Type.Equals(PeiceType.King) && x.Side.Equals(peice.Side)); var isCastle = king != null && !king.IsChecked && !king.HasMoved && !peice.HasMoved && dY == 0; if (isCastle) { if (dX == 4) { return(King.CanMove(board, king, -3, 0)); } if (dX == -2) { return(King.CanMove(board, king, 2, 0)); } } return(false); }