Exemplo n.º 1
0
        public void Pawn()
        {
            ChessBoard b = new ChessBoard();

            b.Set("a2", new ChessPiece() { Player = PlayerTypeEnum.White, Type = PieceTypeEnum.Pawn });
            b.Set("a7", new ChessPiece() { Player = PlayerTypeEnum.White, Type = PieceTypeEnum.Pawn });
            b.Set("e7", new ChessPiece() { Player = PlayerTypeEnum.Black, Type = PieceTypeEnum.Pawn });
            b.Set("g4", new ChessPiece() { Player = PlayerTypeEnum.White, Type = PieceTypeEnum.Pawn });
            b.Set("h5", new ChessPiece() { Player = PlayerTypeEnum.Black, Type = PieceTypeEnum.Pawn });

            TraditionalRulesOfChess rules = new TraditionalRulesOfChess();

            // basic move

            var move = rules.CanMove(b, "a2a3", PlayerTypeEnum.White, null);
            Assert.IsTrue(move.Success, move.Message);

            // move two squares on first move

            move = rules.CanMove(b, "a2a4", PlayerTypeEnum.White, null);
            Assert.IsTrue(move.Success, move.Message);

            // can't move two squares on subsequent moves

            move = rules.CanMove(b, "a2a5", PlayerTypeEnum.White, null);
            Assert.IsFalse(move.Success, move.Message);

            // can't move backwards

            move = rules.CanMove(b, "a2a1", PlayerTypeEnum.White, null);
            Assert.IsFalse(move.Success, move.Message);

            // piece does not exist

            move = rules.CanMove(b, "h2g3", PlayerTypeEnum.White, null);
            Assert.IsFalse(move.Success, move.Message);

            // g4 pawn over-take h5 pawn

            move = rules.CanMove(b, "g4h5", PlayerTypeEnum.White, null);
            Assert.IsTrue(move.Success, move.Message);

            b.RecordMoves(new[] { "a2a3" }, null, null);

            move = rules.CanMove(b, "a3a5", PlayerTypeEnum.White, null);
            Assert.IsFalse(move.Success, move.Message);

            move = rules.CanMove(b, "a3a4", PlayerTypeEnum.White, null);
            Assert.IsTrue(move.Success, move.Message);

            move = rules.CanMove(b, "a7a8", PlayerTypeEnum.White, null);
            Assert.IsTrue(move.Success, move.Message);

            move = rules.CanMove(b, "e7e6", PlayerTypeEnum.Black, null);
            Assert.IsTrue(move.Success, move.Message);

            move = rules.CanMove(b, "e7e8", PlayerTypeEnum.Black, null);
            Assert.IsFalse(move.Success, move.Message);
        }
Exemplo n.º 2
0
        public void Overtake()
        {
            ChessBoard b = new ChessBoard();
            b.Set("g4", new ChessPiece() { Player = PlayerTypeEnum.White, Type = PieceTypeEnum.Pawn });
            b.Set("h5", new ChessPiece() { Player = PlayerTypeEnum.Black, Type = PieceTypeEnum.Pawn });

            TraditionalRulesOfChess rules = new TraditionalRulesOfChess();

            ChessGame chessGame = new ChessGame(
                b,
                PlayerTypeEnum.White,
                null);

            var move = chessGame.PlayerMove(PlayerTypeEnum.White, "g4h5");

            Assert.IsTrue(move.Success, move.Error);
            Assert.IsNotNull(move.Taken);
            Assert.AreEqual(chessGame.GetTakenPiecesByPlayer(PlayerTypeEnum.White).Length, 1);
            Assert.AreEqual(chessGame.GetTakenPiecesByPlayer(PlayerTypeEnum.White)[0].Player, PlayerTypeEnum.Black);
        }
Exemplo n.º 3
0
        public void EnPassant()
        {
            ChessBoard b = new ChessBoard();
            (new EnPassantTestingBoardStager()).Stage(b);

            var rules = new TraditionalRulesOfChess();
            var moveResult = rules.CanMove(
                b, "a2a4", PlayerTypeEnum.White, null);

            Assert.IsTrue(moveResult.Success);

            b.RecordMoves(new[] { "a2a4" }, null, null);

            moveResult = rules.CanMove(
                b, "b4a3", PlayerTypeEnum.Black, "a2a4");

            Assert.IsTrue(moveResult.Success);
            Assert.AreEqual("a4", moveResult.TakenPiece, true);
        }