示例#1
0
        /*
         * Simulates a move being made and updates _board_history, _pass_count, and current_player
         * If the move is illegal, throws an exception adn updates _victors
         */
        public void Play(string point)
        {
            try
            {
                RuleCheckerWrapper.Play(_current_player.GetStone(), point, GetBoardHistory());
            }
            catch (RuleCheckerException)
            {
                if (_current_player == _player1)
                {
                    _victors.Add(_player2);
                }
                else
                {
                    _victors.Add(_player1);
                }
                throw new RefereeException("Invalid Play in Referee: an illegal move has been made");
            }

            //update _board_history
            BoardWrapper b = new BoardWrapper(_board_history[0].GetBoard(), _board_history[0].GetSize());

            b.PlaceStone(_current_player.GetStone(), point);
            b.RemoveDeadStones();
            _board_history.Insert(0, b);
            if (_board_history.Count == 4)
            {
                _board_history.RemoveAt(3);
            }

            _pass_count     = 0;
            _current_player = _current_player == _player1 ? _player2 : _player1;
        }