Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        public static IPeice[] GetSinglePeiceRow(Peice peice, int y)
        {
            var row = new IPeice[8];

            row[y] = peice;
            return(row);
        }
Esempio n. 4
0
        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));
        }
Esempio n. 5
0
 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);
 }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
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));
        }
Esempio n. 9
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);
        }
Esempio n. 10
0
 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);
             }
         }
     }
 }
Esempio n. 11
0
        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;
            }
            }
        }
Esempio n. 12
0
        } //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
Esempio n. 13
0
 public void OnTake(Peice peice)
 {
     PlaySound(Sounds.take); PBoxWhite.Invalidate(); PBoxBlack.Invalidate();
 }
Esempio n. 14
0
 public static CommandResult Move(Peice peice, int dX, int dY)
 {
     throw new NotImplementedException();
 }
Esempio n. 15
0
 public static CommandResult Move(Peice peice, int dX, int dY)
 {
     return(CommandResult.GetSuccess(""));
 }
Esempio n. 16
0
        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);
        }