コード例 #1
0
ファイル: CheckMateTests.cs プロジェクト: devowl/networkchess
        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);
        }
コード例 #2
0
ファイル: CheckMateTests.cs プロジェクト: devowl/networkchess
        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);
        }
コード例 #3
0
ファイル: CheckMateTests.cs プロジェクト: devowl/networkchess
        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);
        }
コード例 #4
0
ファイル: Game.cs プロジェクト: devowl/networkchess
        /// <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);
                }
            });
        }