public ChessGame( IBoardEngineProvider <ChessPieceEntity> boardEngineProvider, ICheckDetectionService checkDetectionService, IBoardSetup <ChessPieceEntity> setup, Colours whoseTurn = Colours.White) { _engine = boardEngineProvider.Provide(setup, (int)whoseTurn); _checkDetectionService = checkDetectionService; _engine.CurrentPlayer = (int)whoseTurn; CheckState = _checkDetectionService.Check(BoardState); }
private string PlayValidMove(BoardMove move) { ClearPawnTwoStepState(); var preMove = _engine.BoardState.ToTextBoard(); _engine.Move(move); if (preMove == _engine.BoardState.ToTextBoard()) { Debugger.Break(); } _engine.CurrentPlayer = (int)NextPlayer(); CheckState = _checkDetectionService.Check(BoardState); return(CheckState != GameCheckState.None ? CheckState.ToString() : ""); }
public void Check_returns_valid_check_states(PlayerState whiteState, PlayerState blackState, GameCheckState expectedGameState) { var service = new CheckDetectionService( _playerStateServiceMock.Object, ChessFactory.BoardMoveService(ChessFactory.ChessBoardActionProvider()), ChessFactory.FindAttackPaths(), ChessFactory.PathsValidator() ); if (expectedGameState != GameCheckState.BlackCheckmated && expectedGameState != GameCheckState.WhiteCheckmated) { // give the king a get out move var kingPaths = new Paths(); kingPaths.Add(new Path { new BoardMove(BoardLocation.At(1, 1), BoardLocation.At(1, 2), 1) }); _kingItem.UpdatePaths(kingPaths); } SetupCheckState(whiteState, Colours.White); SetupCheckState(blackState, Colours.Black); service.Check(_boardStateMock.Object).ShouldBe(expectedGameState); }