// Start is called before the first frame update
 void Start()
 {
     //Assign the script attached to the same gameObject
     pieceFactroy = gameObject.GetComponent <ChessPieceFactory>();
     CreateChessPieces();
     whiteTurn = true;
 }
Esempio n. 2
0
        public void CheckMovies_Few_Possible_Movies_Test()
        {
            //Arrange
            var chessboard   = new ChessboardModel(new ChessMovie());
            var pieceFactory = new ChessPieceFactory();

            chessboard["b3"].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Pawn);
            chessboard["a4"].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Pawn);
            chessboard["d5"].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Pawn);
            chessboard["d1"].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Pawn);
            chessboard["b5"].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Pawn);
            chessboard["b1"].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Pawn);
            chessboard["e3"].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Pawn);

            //Act
            var receivedMovies = chessboard["b3"].Piece.CheckStrategy.CheckMovies(new Position("b3"), chessboard);
            var expectedMovies = new List <string>()
            {
                "a4", "b4"
            };
            var commonMovies = receivedMovies.Intersect(expectedMovies);

            //Assert
            Assert.AreEqual(expectedMovies.Count(), commonMovies.Count());
        }
Esempio n. 3
0
        public void Given_a_dto_with_unknown_type_and_called_create_then_exception_is_thrown3()
        {
            var rookDto = new ChessPiece
            {
                Type = "foo"
            };
            ChessPieceFactory unitundertest = new ChessPieceFactory();

            Assert.Throws <InvalidEnumArgumentException>(() => unitundertest.Create(rookDto));
        }
Esempio n. 4
0
 /// <summary>
 /// Called in MovePiece. If a promoting move was made, the pawn is removed from the board and replaced with the selected pawn promotion.
 /// </summary>
 /// <param name="mover">Moving pawn.</param>
 /// <returns></returns>
 protected virtual ChessPiece CheckPawnPromotion(Pawn mover)
 {
     if (mover.GetRelativeBoardCoord(0, 1).y < WHITE_BACKROW || mover.GetRelativeBoardCoord(0, 1).y > BLACK_BACKROW)
     {
         RemovePieceFromBoard(mover);
         RemovePieceFromActiveTeam(mover);
         return(AddPieceToBoard(ChessPieceFactory.Create(selectedPawnPromotion, mover.GetTeam(), mover.GetBoardPosition())));
     }
     return(null);
 }
 protected override ChessPiece CheckPawnPromotion(Pawn mover)
 {
     if (promotionSquares.Contains(mover.GetBoardPosition()))
     {
         RemovePieceFromBoard(mover);
         RemovePieceFromActiveTeam(mover);
         return(AddPieceToBoard(ChessPieceFactory.Create(selectedPawnPromotion, mover.GetTeam(), mover.GetBoardPosition())));
     }
     return(null);
 }
Esempio n. 6
0
 public ChessPiece(Alliance alliance, Texture2D texture, IEnumerable <IPieceBehaviour> pieceBehaviours, int row, int column, bool hasmoved, int materialValue, ChessPieceFactory factory)
 {
     Row             = row;
     Column          = column;
     Alliance        = alliance;
     Texture         = texture;
     PieceBehaviours = pieceBehaviours;
     HasMoved        = hasmoved;
     MaterialValue   = materialValue;
     Factory         = factory;
 }
Esempio n. 7
0
        public void Given_a_dto_and_called_create_then_return_correct_object(string inputType, ChessPieceEnum expectedType)
        {
            var rookDto = new ChessPiece
            {
                Type = inputType
            };

            ChessPieceFactory unitundertest = new ChessPieceFactory();
            var result = unitundertest.Create(rookDto);

            Assert.That(result.Type, Is.EqualTo(expectedType));
        }
Esempio n. 8
0
    public Walker(string pieceName, DialLayout layout)
    {
        originalAdjacency = ChessPieceFactory.
                            GetChessPieceByName(pieceName).
                            GenerateAdjacencyMatrix(layout);

        applyAdjacency = (int[, ])originalAdjacency.Clone();
        walkResult     = MatrixExt.IdentityMatrix(originalAdjacency.GetLength(0));

        _currentStep = 0;

        this.layout = layout;
        rules       = new List <IWalkRule> ();
    }
Esempio n. 9
0
        public IBoard Create(TypeOfGame kind)
        {
            IPieceFactory pieceFactory = new ChessPieceFactory();

            switch (kind)
            {
            case TypeOfGame.Chess:

                IBoard chessboard = new ChessboardModel(new ChessMovie());

                //a1 - h1
                chessboard.Fields[0, 0].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Rook);
                chessboard.Fields[1, 0].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Knight);
                chessboard.Fields[2, 0].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Bishop);
                chessboard.Fields[3, 0].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Queen);
                chessboard.Fields[4, 0].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.King);
                chessboard.Fields[5, 0].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Bishop);
                chessboard.Fields[6, 0].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Knight);
                chessboard.Fields[7, 0].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Rook);
                //a2 - h2
                for (int i = 0; i < 8; i++)
                {
                    chessboard.Fields[i, 1].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Pawn);
                }
                //a7 - h7
                for (int i = 0; i < 8; i++)
                {
                    chessboard.Fields[i, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Pawn);
                }
                //a8 - h8
                chessboard.Fields[0, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Rook);
                chessboard.Fields[1, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Knight);
                chessboard.Fields[2, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Bishop);
                chessboard.Fields[3, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Queen);
                chessboard.Fields[4, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.King);
                chessboard.Fields[5, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Bishop);
                chessboard.Fields[6, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Knight);
                chessboard.Fields[7, 6].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Rook);

                return(chessboard);

            case TypeOfGame.Checkers:
                return(null);

            default:
                return(null);
            }
        }
Esempio n. 10
0
 /// <summary>
 /// Performs the castling move. Should be called within TryPerformCastlingRookMoves.
 /// </summary>
 /// <param name="castlingPiece">Piece to castle with.</param>
 /// <param name="castlingPieceNewPos">Castling piece's final position.</param>
 /// <returns></returns>
 protected virtual ChessPiece PerformCastle(ChessPiece castlingPiece, BoardCoord castlingPieceNewPos)
 {
     if (AssertContainsCoord(castlingPieceNewPos))
     {
         if (castlingPiece != null)
         {
             RemovePieceFromBoard(castlingPiece);
             RemovePieceFromActiveTeam(castlingPiece);
             return(AddPieceToBoard(ChessPieceFactory.Create(castlingPiece.GetPieceType(), castlingPiece.GetTeam(), castlingPieceNewPos)));
         }
         else
         {
             Debug.LogError("Reference to the castling piece should not be null! Ensure references were made when the piece was first created.");
         }
     }
     return(null);
 }
Esempio n. 11
0
        public void CheckMovies_Short_Castling_Occupied_Field()
        {
            //Arrange
            var chessboard   = new ChessboardModel(new ChessMovie());
            var pieceFactory = new ChessPieceFactory();

            chessboard["e1"].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.King);
            chessboard["h1"].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Rook);
            chessboard["a6"].Piece = pieceFactory.Create(ColourOfPiece.Black, KindOfPiece.Bishop);
            var castling = new Castling();
            //Act

            var receivedMovies = castling.CheckMovies(new Position("e1"), chessboard);

            //Assert
            Assert.AreEqual(receivedMovies.Count(), 0);
        }
Esempio n. 12
0
        public void CanKnightTakePieces()
        {
            //Arrange
            var knight = ChessPieceFactory.BuildChessPiece(ChessPieceColor.White, ChessPieceType.Knight, new Position(0, 0));
            var other1 = ChessPieceFactory.BuildChessPiece(ChessPieceColor.Black, ChessPieceType.Rook, new Position(2, 1));
            var other2 = ChessPieceFactory.BuildChessPiece(ChessPieceColor.Black, ChessPieceType.Rook, new Position(5, 5));

            var pieces = new List <ChessPiece> {
                knight, other1, other2
            };

            //Act
            var inRangeOfKnight = knight.PiecesCanTake(pieces).ToList();

            //Assert
            Assert.Contains(other1, inRangeOfKnight);
            Assert.DoesNotContain(other2, inRangeOfKnight);
            Assert.DoesNotContain(knight, inRangeOfKnight);
            Assert.Single(inRangeOfKnight);
        }
Esempio n. 13
0
        public void CheckMovies_Short_Castling_Movie_Possible()
        {
            //Arrange
            var chessboard   = new ChessboardModel(new ChessMovie());
            var pieceFactory = new ChessPieceFactory();

            chessboard["e1"].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.King);
            chessboard["h1"].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Rook);
            chessboard["a6"].Piece = pieceFactory.Create(ColourOfPiece.White, KindOfPiece.Bishop);
            var castling = new Castling();
            //Act

            var receivedMovies = castling.CheckMovies(new Position("e1"), chessboard);
            var expectedMovies = new List <string>()
            {
                "g1"
            };
            var commonMovies = receivedMovies.Intersect(expectedMovies);

            //Assert
            Assert.AreEqual(expectedMovies.Count(), commonMovies.Count());
        }
        public override bool MovePiece(ChessPiece mover, BoardCoord destination)
        {
            int currentCaptures = mover.CaptureCount;

            if (base.MovePiece(mover, destination))
            {
                if (((mover is King) == false) && mover.CaptureCount != currentCaptures)
                {
                    RemovePieceFromBoard(mover);
                    RemovePieceFromActiveTeam(mover);
                    if (mover is Pawn)
                    {
                        AddPieceToBoard(new Pawn(mover.GetOpposingTeam(), destination, initialMoveLimit: 1));
                    }
                    else
                    {
                        AddPieceToBoard(ChessPieceFactory.Create(mover.GetPieceType(), mover.GetOpposingTeam(), destination));
                    }
                }
                return(true);
            }
            return(false);
        }
Esempio n. 15
0
        public override void PopulateBoard()
        {
            int SPseed = Random.Range(0, 960);

            Piece[] randomPieceOrder = GetStartingPosition(SPseed);
            Debug.Log(SPseed);

            for (int x = 0; x < BOARD_WIDTH; x++)
            {
                AddPieceToBoard(new Pawn(Team.WHITE, new BoardCoord(x, WHITE_PAWNROW)));
                AddPieceToBoard(new Pawn(Team.BLACK, new BoardCoord(x, BLACK_PAWNROW)));

                if (randomPieceOrder[x] == Piece.King)
                {
                    currentRoyalPiece  = (King)AddPieceToBoard(ChessPieceFactory.Create(randomPieceOrder[x], Team.WHITE, new BoardCoord(x, WHITE_BACKROW)));
                    opposingRoyalPiece = (King)AddPieceToBoard(ChessPieceFactory.Create(randomPieceOrder[x], Team.BLACK, new BoardCoord(x, BLACK_BACKROW)));
                }
                else
                {
                    AddPieceToBoard(ChessPieceFactory.Create(randomPieceOrder[x], Team.WHITE, new BoardCoord(x, WHITE_BACKROW)));
                    AddPieceToBoard(ChessPieceFactory.Create(randomPieceOrder[x], Team.BLACK, new BoardCoord(x, BLACK_BACKROW)));
                }
            }
        }
Esempio n. 16
0
File: Rook.cs Progetto: Beeboh/Chess
 public Rook(Alliance alliance, Texture2D texture, IEnumerable <IPieceBehaviour> pieceBehaviours, bool hasMoved, int materialValue, ChessPieceFactory factory) : base(alliance, texture, pieceBehaviours, hasMoved, materialValue, factory)
 {
 }
Esempio n. 17
0
 public PawnPromotionTile(int row, int column, TileColor tileColor, Texture2D texture, IEnumerable <Alliance> alliancesToPromote, ChessPieceFactory promotionFactory) : base(row, column, tileColor, texture)
 {
     AlliancesToPromote = new List <Alliance>(alliancesToPromote).AsReadOnly();
     PromotionFactory   = promotionFactory;
 }
Esempio n. 18
0
File: King.cs Progetto: Beeboh/Chess
 public King(Alliance alliance, Texture2D texture, IEnumerable <IPieceBehaviour> pieceBehaviours, int row, int column, bool hasMoved, int materialValue, ChessPieceFactory factory) : base(alliance, texture, pieceBehaviours, row, column, hasMoved, materialValue, factory)
 {
 }
Esempio n. 19
0
File: Pawn.cs Progetto: Beeboh/Chess
 public Pawn(Alliance alliance, Texture2D texture, IEnumerable <IPieceBehaviour> pieceBehaviours, int row, int column, bool currentlyenpassantable, bool hasMoved, int materialValue, ChessPieceFactory factory) : base(alliance, texture, pieceBehaviours, row, column, hasMoved, materialValue, factory)
 {
     CurrentlyEnPassantable = currentlyenpassantable;
 }