public void NoCheckmate3() { var field = new VirtualField(VirtualFieldUtils.CreateEmptyField()); var factory = new PieceMasterFactory(); field[7, 0] = ChessPiece.WhiteRook; field[6, 4] = ChessPiece.WhiteRook; field[1, 1] = ChessPiece.BlackKing; field[6, 7] = ChessPiece.WhiteKing; bool isCheck; Assert.IsFalse(CheckMateLogic.IsCheckMate(PlayerColor.White, field, factory, out isCheck)); Assert.IsFalse(isCheck); }
public void Checkmate3() { var field = new VirtualField(VirtualFieldUtils.CreateEmptyField()); var factory = new PieceMasterFactory(); field[0, 0] = ChessPiece.WhiteKing; field[1, 2] = ChessPiece.BlackKing; field[7, 0] = ChessPiece.BlackQueen; bool isCheck; Assert.IsTrue(CheckMateLogic.IsCheckMate(PlayerColor.Black, field, factory, out isCheck)); Assert.IsTrue(isCheck); }
public void NoCheckmate2() { var field = new VirtualField(VirtualFieldUtils.CreateEmptyField()); var factory = new PieceMasterFactory(); field[1, 1] = ChessPiece.WhiteKing; field[5, 6] = ChessPiece.BlackKing; field[7, 0] = ChessPiece.BlackRook; field[0, 7] = ChessPiece.BlackRook; // Eat for no checkmate field[2, 2] = ChessPiece.BlackQueen; bool isCheck; Assert.IsFalse(CheckMateLogic.IsCheckMate(PlayerColor.Black, field, factory, out isCheck)); Assert.IsTrue(isCheck); }
/// <inheritdoc/> public void Move(string sessionId, ChessPoint from, ChessPoint to) { if (!_isInitialized) { throw new InvalidOperationException("Game isn't initialized"); } // Who makes a movement var initiator = GetPlayer(sessionId); // His opponent var opponent = Player1 == initiator ? Player2 : Player1; var piece = _virtualField[from.X, from.Y]; // Check for hacker movements CheaterCheck(initiator, from, to); ThreadPool.QueueUserWorkItem( obj => { _virtualField[to.X, to.Y] = piece; _virtualField[from.X, from.Y] = ChessPiece.Empty; bool isCheck; var isCheckMate = CheckMateLogic.IsCheckMate( initiator.PlayerColor, _virtualField, _masterFactory, out isCheck); _checkedPlayer = isCheck ? opponent.PlayerColor : (PlayerColor?)null; if (isCheckMate) { NotifyAboutCheckMate(initiator, opponent, from, to); } else { NotifyFieldChanged(initiator, opponent, from, to); } }); }