示例#1
0
        public IMoveResult DoMove(Position @from, Position destination)
        {
            if (!_moveManager.VerifyPositionInBoundaries(from) || !_moveManager.VerifyPositionInBoundaries(destination))
            {
                return(new InvalidMoveResult("Position out of board"));
            }

            if (!_moveManager.IsAllyAtPosition(from, _currentMovingTeam))
            {
                return(new InvalidMoveResult($"Your figure is not in the given position"));
            }

            var moveManagerValidation = _moveManager.CanMove(from, destination);

            if (!moveManagerValidation.Item1)
            {
                return(new InvalidMoveResult(moveManagerValidation.Item2));
            }

            var result = _moveManager.Move(from, destination);

            AddNewSmashed(result.Item4);
            var moveResult = new ValidMoveResult(result.Item1, result.Item2, result.Item3, result.Item4, _smashed);

            SwitchTeam();
            _isCheckMate = moveResult.IsCheckMate(_currentMovingTeam);
            return(moveResult);
        }
        public void Serialize_NextDeserialize_NullObject()
        {
            // arrange
            var        board       = new OrdinaryChessBoard();
            var        validator   = new OrdinaryBoardMoveValidator(board);
            var        verifier    = new OrdinaryBoardCheckVerifier(board, validator);
            var        moveResult  = new ValidMoveResult(board, verifier, validator, null, null);
            const bool isGameEnded = false;
            TeamColor  currentTeam = TeamColor.Black;

            const string filePath = "Test_Serialize_NextDeserialize_NullObject.bin";

            ChessGameState gameState =
                new ChessGameState(moveResult, isGameEnded, null, currentTeam, PlayerMode.TwoPlayers, 0);

            // act
            ChessGameSerializer.SaveInFile(filePath, gameState);
            ChessGameState fromFile = ChessGameSerializer.ReadFromFile <ChessGameState>(filePath);

            // assert
            Assert.AreEqual(fromFile.IsEnded, isGameEnded);
            Assert.AreEqual(fromFile.CurrentMovingTeam, currentTeam);

            // clear
            Assert.True(ChessGameSerializer.ClearFile(filePath));
        }
        public void Serialize_NextDeserialize_AlreadyWrittenFile()
        {
            // arrange
            var board     = new OrdinaryChessBoard();
            var validator = new OrdinaryBoardMoveValidator(board);
            var verifier  = new OrdinaryBoardCheckVerifier(board, validator);
            LastMoveViewModel lastMoveVm = new LastMoveViewModel(new King(new Position(1, 2), TeamColor.Black),
                                                                 new Position(1, 2), new Position(2, 3), null);
            var        moveResult  = new ValidMoveResult(board, verifier, validator, lastMoveVm, null);
            const bool isGameEnded = false;
            TeamColor  currentTeam = TeamColor.Black;

            const string filePath = "Serialize_NextDeserialize_AlreadyWrittenFile.bin";

            ChessGameState gameState =
                new ChessGameState(moveResult, isGameEnded, null, currentTeam, PlayerMode.TwoPlayers, 0);

            // act
            ChessGameSerializer.SaveInFile(filePath, gameState);
            ChessGameSerializer.SaveInFile(filePath, gameState);
            ChessGameState fromFile = ChessGameSerializer.ReadFromFile <ChessGameState>(filePath);

            // assert
            Assert.AreEqual(fromFile.IsEnded, isGameEnded);
            Assert.AreEqual(fromFile.CurrentMovingTeam, currentTeam);
            Assert.AreEqual(fromFile.LastGameMoveResult.LastMoveFigureAndPositionFromAndDest().Item2,
                            moveResult.LastMoveFigureAndPositionFromAndDest().Item2);

            // clear
            Assert.True(ChessGameSerializer.ClearFile(filePath));
        }
示例#4
0
        public void IsCheckMate_NotCheck_ShouldReturnFalse()
        {
            // arrange
            var board = new OrdinaryChessBoard();

            var pawnStartPosition = new Position(1, 0);
            var pawnEndPosition   = new Position(2, 0);

            var pawn = board.RemoveFigure(pawnStartPosition);

            pawn.Move(pawnEndPosition);
            board.SetFigure(pawn, pawnEndPosition);

            var validator  = new OrdinaryBoardMoveValidator(board);
            var verifier   = new OrdinaryBoardCheckVerifier(board, validator);
            var lastMoveVm = new LastMoveViewModel(pawn, pawnStartPosition, pawnEndPosition, null);
            var moveResult =
                new ValidMoveResult(board, verifier, validator, lastMoveVm, null);

            var team1 = TeamColor.Black;
            var team2 = TeamColor.White;
            // act

            var result1 = moveResult.IsCheck(team1);
            var result2 = moveResult.IsCheck(team2);
            var result3 = moveResult.IsCheckMate(team1);
            var result4 = moveResult.IsCheckMate(team2);

            // assert
            Assert.False(result1);
            Assert.False(result2);
            Assert.False(result3);
            Assert.False(result4);
        }
示例#5
0
        public void IsLastMoveSmash_NotSmash_ShouldReturnFalse()
        {
            // arrange
            var board = new OrdinaryChessBoard();
            var startBlackPawnPosition  = new Position(1, 5);
            var oneHopBlackPawnPosition = new Position(3, 5);
            var startWhitePawnPosition  = new Position(6, 4);
            var oneHopWhitePawnPosition = new Position(4, 4);

            var blackPawn = board.RemoveFigure(startBlackPawnPosition);

            blackPawn.Move(oneHopBlackPawnPosition);
            board.SetFigure(blackPawn, oneHopBlackPawnPosition);

            var whitePawn = board.RemoveFigure(startWhitePawnPosition);

            whitePawn.Move(oneHopWhitePawnPosition);
            board.SetFigure(whitePawn, oneHopWhitePawnPosition);

            var validator  = new OrdinaryBoardMoveValidator(board);
            var verifier   = new OrdinaryBoardCheckVerifier(board, validator);
            var lastMoveVm = new LastMoveViewModel(whitePawn, startWhitePawnPosition, oneHopWhitePawnPosition, null);
            var moveResult = new ValidMoveResult(board, verifier, null, lastMoveVm, null);

            // act
            var result = moveResult.IsLastMoveSmash();

            // assert
            Assert.False(result);
        }
示例#6
0
        public void GetScore_AfterMovementBlack_BottomLeftPawnTwoFieldUp_WhiteTeam_ShouldBe_Minus1()
        {
            // arrange
            var       startingBoard     = new OrdinaryChessBoard();
            TeamColor team              = TeamColor.White;
            var       startPawnPosition = new Position(1, 0);
            var       endPawnPosition   = new Position(3, 0);

            var pawn = startingBoard.RemoveFigure(startPawnPosition);

            startingBoard.SetFigure(pawn, endPawnPosition);
            pawn.Move(endPawnPosition);
            var validator  = new OrdinaryBoardMoveValidator(startingBoard);
            var verifier   = new OrdinaryBoardCheckVerifier(startingBoard, validator);
            var lastMoveVm = new LastMoveViewModel(pawn, startPawnPosition, endPawnPosition, null);
            var moveResult =
                new ValidMoveResult(startingBoard, verifier, null, lastMoveVm, null);

            int expectedScore = -1;
            // act
            var result = moveResult.GetScore(team);

            // assert
            Assert.AreEqual(expectedScore, result);
        }
示例#7
0
        public void IsCheckMate_OnlyCheck_CulpritMayBeKilled_ShouldReturnFalse()
        {
            // arrange
            var board = new OrdinaryChessBoard();

            var blackPawnStartPosition  = new Position(1, 7);
            var blackPawnMiddlePosition = new Position(2, 7);
            var blackPawnEndPosition    = new Position(3, 7);

            var whiteKnightStartPosition     = new Position(7, 1);
            var whiteKnightFirstHopPosition  = new Position(5, 2);
            var whiteKnightSecondHopPosition = new Position(3, 3);
            var whiteKnightEndPosition       = new Position(2, 5);

            var blackPawn = board.RemoveFigure(blackPawnStartPosition);

            blackPawn.Move(blackPawnMiddlePosition);
            board.SetFigure(blackPawn, blackPawnMiddlePosition);
            board.RemoveFigure(blackPawnMiddlePosition);
            blackPawn.Move(blackPawnEndPosition);
            board.SetFigure(blackPawn, blackPawnEndPosition);
            var whiteKnight = board.RemoveFigure(whiteKnightStartPosition);

            whiteKnight.Move(whiteKnightFirstHopPosition);
            board.SetFigure(whiteKnight, whiteKnightFirstHopPosition);
            board.RemoveFigure(whiteKnightFirstHopPosition);
            whiteKnight.Move(whiteKnightSecondHopPosition);
            board.SetFigure(whiteKnight, whiteKnightSecondHopPosition);
            board.RemoveFigure(whiteKnightSecondHopPosition);
            whiteKnight.Move(whiteKnightEndPosition);
            board.SetFigure(whiteKnight, whiteKnightEndPosition);

            var validator  = new OrdinaryBoardMoveValidator(board);
            var verifier   = new OrdinaryBoardCheckVerifier(board, validator);
            var lastMoveVm =
                new LastMoveViewModel(whiteKnight, whiteKnightSecondHopPosition, whiteKnightEndPosition, null);
            var moveResult =
                new ValidMoveResult(board, verifier, validator, lastMoveVm, null);

            var team1 = TeamColor.White;
            var team2 = TeamColor.Black;
            // act

            var result1 = moveResult.IsCheck(team1);
            var result2 = moveResult.IsCheck(team2);
            var result3 = moveResult.IsCheckMate(team1);
            var result4 = moveResult.IsCheckMate(team2);

            // assert
            Assert.True(result1);
            Assert.False(result2);
            Assert.False(result3);
            Assert.False(result4);
        }
示例#8
0
        public void IsCheckMate_CheckMateWhiteTeam()
        {
            // arrange
            var board = new OrdinaryChessBoard();

            var whitePawn1StartPosition = new Position(6, 5);
            var whitePawn1EndPosition   = new Position(5, 5);
            var whitePawn2StartPosition = new Position(6, 6);
            var whitePawn2EndPosition   = new Position(4, 6);
            var blackPawnStartPosition  = new Position(1, 4);
            var blackPawnEndPosition    = new Position(3, 4);
            var blackQueenStartPosition = new Position(0, 3);
            var blackQueenEndPosition   = new Position(4, 7);

            var whitePawn1 = board.RemoveFigure(whitePawn1StartPosition);

            whitePawn1.Move(whitePawn1EndPosition);
            board.SetFigure(whitePawn1, whitePawn1EndPosition);
            var blackPawn = board.RemoveFigure(blackPawnStartPosition);

            blackPawn.Move(blackPawnEndPosition);
            board.SetFigure(blackPawn, blackPawnEndPosition);
            var whitePawn2 = board.RemoveFigure(whitePawn2StartPosition);

            whitePawn2.Move(whitePawn2EndPosition);
            board.SetFigure(whitePawn2, whitePawn2EndPosition);
            var blackQueen = board.RemoveFigure(blackQueenStartPosition);

            blackQueen.Move(blackQueenEndPosition);
            board.SetFigure(blackQueen, blackQueenEndPosition);

            var validator  = new OrdinaryBoardMoveValidator(board);
            var verifier   = new OrdinaryBoardCheckVerifier(board, validator);
            var lastMoveVm = new LastMoveViewModel(blackQueen, blackQueenStartPosition, blackPawnEndPosition, null);
            var moveResult =
                new ValidMoveResult(board, verifier, validator, lastMoveVm, null);

            var team1 = TeamColor.White;
            var team2 = TeamColor.Black;
            // act

            var result1 = moveResult.IsCheck(team1);
            var result2 = moveResult.IsCheck(team2);
            var result3 = moveResult.IsCheckMate(team1);
            var result4 = moveResult.IsCheckMate(team2);

            // assert
            Assert.False(result1);
            Assert.True(result2);
            Assert.False(result3);
            Assert.True(result4);
        }
示例#9
0
        public void IsCheckMate_OnlyCheck_PathMayBeBlocked_ShouldReturnFalse()
        {
            // arrange
            var board = new OrdinaryChessBoard();

            var blackPawnStartPosition  = new Position(1, 3);
            var blackPawnEndPosition    = new Position(2, 3);
            var whitePawnStartPosition  = new Position(6, 2);
            var whitePawnEndPosition    = new Position(5, 2);
            var whiteQueenStartPosition = new Position(7, 3);
            var whiteQueenEndPosition   = new Position(4, 0);


            var blackPawn1 = board.RemoveFigure(blackPawnStartPosition);

            blackPawn1.Move(blackPawnEndPosition);
            board.SetFigure(blackPawn1, blackPawnEndPosition);
            var whitePawn = board.RemoveFigure(whitePawnStartPosition);

            whitePawn.Move(whitePawnEndPosition);
            board.SetFigure(whitePawn, whitePawnEndPosition);
            var whiteQueen = board.RemoveFigure(whiteQueenStartPosition);

            whiteQueen.Move(whiteQueenEndPosition);
            board.SetFigure(whiteQueen, whiteQueenEndPosition);

            var validator  = new OrdinaryBoardMoveValidator(board);
            var verifier   = new OrdinaryBoardCheckVerifier(board, validator);
            var lastMoveVm = new LastMoveViewModel(whiteQueen, whiteQueenStartPosition, whitePawnEndPosition, null);
            var moveResult =
                new ValidMoveResult(board, verifier, validator, lastMoveVm, null);

            var team1 = TeamColor.White;
            var team2 = TeamColor.Black;
            // act

            var result1 = moveResult.IsCheck(team1);
            var result2 = moveResult.IsCheck(team2);
            var result3 = moveResult.IsCheckMate(team1);
            var result4 = moveResult.IsCheckMate(team2);

            // assert
            Assert.True(result1);
            Assert.False(result2);
            Assert.False(result3);
            Assert.False(result4);
        }
示例#10
0
        public void LastMoveFigureAndPositionFromAndDest_Smash()
        {
            // arrange
            var board = new OrdinaryChessBoard();
            var startBlackPawnPosition  = new Position(1, 5);
            var oneHopBlackPawnPosition = new Position(3, 5);
            var startWhitePawnPosition  = new Position(6, 4);
            var oneHopWhitePawnPosition = new Position(4, 4);

            var blackPawn = board.RemoveFigure(startBlackPawnPosition);

            blackPawn.Move(oneHopBlackPawnPosition);
            board.SetFigure(blackPawn, oneHopBlackPawnPosition);

            var whitePawn = board.RemoveFigure(startWhitePawnPosition);

            whitePawn.Move(oneHopWhitePawnPosition);
            board.SetFigure(whitePawn, oneHopWhitePawnPosition);

            board.RemoveFigure(oneHopWhitePawnPosition);
            blackPawn = board.RemoveFigure(oneHopBlackPawnPosition);
            blackPawn.Move(oneHopWhitePawnPosition);
            board.SetFigure(blackPawn, oneHopWhitePawnPosition);

            var validator  = new OrdinaryBoardMoveValidator(board);
            var verifier   = new OrdinaryBoardCheckVerifier(board, validator);
            var lastMoveVm =
                new LastMoveViewModel(blackPawn, oneHopBlackPawnPosition, oneHopWhitePawnPosition, whitePawn);
            var moveResult = new ValidMoveResult(board, verifier, null, lastMoveVm, null);

            var expectedLastMoveFigure       = blackPawn;
            var expectedLastMovePositionFrom = oneHopBlackPawnPosition;
            var expectedLastMovePositionDest = oneHopWhitePawnPosition;

            // act
            var result = moveResult.LastMoveFigureAndPositionFromAndDest();

            // assert
            Assert.AreEqual(expectedLastMoveFigure, result.Item1);
            Assert.AreEqual(expectedLastMovePositionFrom, result.Item2);
            Assert.AreEqual(expectedLastMovePositionDest, result.Item3);
        }
示例#11
0
        public void SmashedFigure_SmashedWhitePawn_ShouldThisFigure()
        {
            // arrange
            var board = new OrdinaryChessBoard();
            var startBlackPawnPosition  = new Position(1, 5);
            var oneHopBlackPawnPosition = new Position(3, 5);
            var startWhitePawnPosition  = new Position(6, 4);
            var oneHopWhitePawnPosition = new Position(4, 4);

            var blackPawn = board.RemoveFigure(startBlackPawnPosition);

            blackPawn.Move(oneHopBlackPawnPosition);
            board.SetFigure(blackPawn, oneHopBlackPawnPosition);

            var whitePawn = board.RemoveFigure(startWhitePawnPosition);

            whitePawn.Move(oneHopWhitePawnPosition);
            board.SetFigure(whitePawn, oneHopWhitePawnPosition);

            board.RemoveFigure(oneHopWhitePawnPosition);
            blackPawn = board.RemoveFigure(oneHopBlackPawnPosition);
            blackPawn.Move(oneHopWhitePawnPosition);
            board.SetFigure(blackPawn, oneHopWhitePawnPosition);

            var validator  = new OrdinaryBoardMoveValidator(board);
            var verifier   = new OrdinaryBoardCheckVerifier(board, validator);
            var lastMoveVm =
                new LastMoveViewModel(blackPawn, oneHopBlackPawnPosition, oneHopWhitePawnPosition, whitePawn);
            var moveResult = new ValidMoveResult(board, verifier, null, lastMoveVm, null);

            var expected = whitePawn;

            // act
            var isSmash = moveResult.IsLastMoveSmash();
            var result  = moveResult.SmashedFigure();

            // assert
            Assert.True(isSmash);
            Assert.AreEqual(expected, result);
        }
示例#12
0
        public void GetScore_AfterKilledWhite_BlackTeam_ShouldBe_Minus19()
        {
            // arrange
            var       board = new OrdinaryChessBoard();
            TeamColor team  = TeamColor.Black;
            var       startBlackPawnPosition  = new Position(1, 5);
            var       oneHopBlackPawnPosition = new Position(3, 5);
            var       startWhitePawnPosition  = new Position(6, 4);
            var       oneHopWhitePawnPosition = new Position(4, 4);

            var blackPawn = board.RemoveFigure(startBlackPawnPosition);

            blackPawn.Move(oneHopBlackPawnPosition);
            board.SetFigure(blackPawn, oneHopBlackPawnPosition);

            var whitePawn = board.RemoveFigure(startWhitePawnPosition);

            whitePawn.Move(oneHopWhitePawnPosition);
            board.SetFigure(whitePawn, oneHopWhitePawnPosition);

            board.RemoveFigure(oneHopWhitePawnPosition);
            blackPawn = board.RemoveFigure(oneHopBlackPawnPosition);
            blackPawn.Move(oneHopWhitePawnPosition);
            board.SetFigure(blackPawn, oneHopWhitePawnPosition);

            var validator = new OrdinaryBoardMoveValidator(board);
            var verifier  = new OrdinaryBoardCheckVerifier(board, validator);

            var lastMoveVm =
                new LastMoveViewModel(blackPawn, oneHopBlackPawnPosition, oneHopWhitePawnPosition, whitePawn);
            var moveResult = new ValidMoveResult(board, verifier, null, lastMoveVm, null);

            int expectedScore = -19;

            // act
            var result = moveResult.GetScore(team);

            // assert
            Assert.AreEqual(expectedScore, result);
        }