public void TransitionTest()
        {
            var market = new Market();
            _control.PlaceTile(market, _control.GetPlacableSpaces().First());

            Selection actual = market.Transition(null);
            Assert.AreEqual(Selection.Opponent, actual);

            var player = new Player("Player 2", Color.Blue, ColorName.Blue);
            actual = market.Transition(player);
            Assert.AreEqual(Selection.None, actual);
        }
        /// <summary>
        ///   Constructor for the controller
        /// </summary>
        /// <param name = "deck"></param>
        /// <param name = "players"></param>
        private Controller(Deck deck, Player[] players)
        {
            Deck = deck;
            Board = new Board();
            _players = players;

            Score = new Dictionary<IPlayer, int>();

            TilePlacementRules = new RuleSet<TileMovementArguments>(RuleTypes.TilePlacement);
            TileRemovalRules = new RuleSet<TileMovementArguments>(RuleTypes.TileRemoval);
            TokenPlacementRules = new RuleSet<TokenMovementArguments>(RuleTypes.TokenPlacement);
            TokenRemovalRules = new RuleSet<TokenMovementArguments>(RuleTypes.TokenRemoval);
            Selection = Selection.TileFromHand;

            Board[0, 0].Tile = Deck.Pop();
            Board[1, 0].Tile = Deck.Pop();
            Board[0, -1].Tile = Deck.Pop();

            // Each player starts with 5 tiles
            foreach (Player player in players)
            {
                Score[player] = 0;
                for (int i = 0; i<5; i++)
                    player.AddToHand(Deck.Pop());
            }
            ActivePlayerIndex = 0;
            ActivePlayer = players[ActivePlayerIndex];
            Message = "Select a tile from your hand";
            Selection = Selection.TileFromHand;

            TileQueue = new List<Tile>();

            MaxTokens = 45;
            MaxSanctums = 10;
            SmallestScoringGroup = 3;
        }
        private void CheckEndGame()
        {
            if (ActivePlayer.Tokens>=MaxTokens && !_lastRound)
            {
                _lastRound = true;
                _lastPlayer = ActivePlayer;
            }
            else if (_lastRound)
                if (ActivePlayer == _lastPlayer)
                    throw new EndGameException("Game Over");

            if (Board.Tiles.Where(t => t.Building == "Sanctum").Count() == MaxSanctums)
                throw new EndGameException("Game Over");
        }
 /// <summary>
 ///   Gets the singleton controller using provided players
 /// </summary>
 public static Controller CustomInstance(Player[] players)
 {
     _instance = new Controller(new InfiniteDeck(), players);
     return _instance;
 }
        internal override Selection Transition(object input)
        {
            Controller control = Controller.DefaultInstance;

            if (input == null && _state == -1)
                return States[++_state];

            Exception ex = TryValidateInput(input);
            if (ex != null)
                throw ex;

            switch (_state)
            {
                case 0:
                    _player = (Player)input;
                    if (_player != null)
                        control.TileSet = _player.Hand.ToList();
                    return States[++_state];
                case 1:
                    _tile = input as Tile;
                    _player.RemoveFromHand(_tile);
                    _player.AddToHand(control.Deck.Pop());

                    return States[++_state];
                case 2:
                    var space = input as Space;
                    control.PlaceTile(_tile, space, Authority);
                    ++_state;
                    return Controller.DefaultInstance.Activate(_tile);
            }
            throw new UnknownTransitionException("Thieves Guild");
        }
Exemplo n.º 6
0
        /// <summary>
        ///   Initialize a new game if new controllers/models/views are necessary. This is usually done 
        ///   when Options changes some settings and various objects need to be reinitialized.
        /// </summary>
        /// <param name = "players">Players playing the game</param>
        private void InitializeNewGame(Player[] players)
        {
            IsMouseVisible = true;
            _camera = new Camera(_graphics);

            // Why is the board starting at (1600,1100)? No one knows....
            _camera.PointTo(new Vector2(1600, 1100));

            _controller = Controller.CustomInstance(players);

            _selectionManager = _controller;

            _oldKeyboardState = Keyboard.GetState();

            _boardViewLayer = new BoardViewLayer(_graphics, _controller);

            _handViewLayer = new HandViewLayer(_graphics, _controller) {IsCustom = false};

            _customViewLayer = new HandViewLayer(_graphics, _controller) {IsCustom = true};

            // a blank tile for each player, colors get added later
            _playerSelection = new Tile[_controller.Players.Count()];
            for (int i = 0; i<_controller.Players.Count(); i++)
                _playerSelection[i] = new Blank {Owner = _controller.Players.ElementAt(i), Space = new Space()};
            _selectionPoint = new Point(0, 0);

            _moveCamera = true;

            _oldColor = Color.Wheat;

            _displayHelp = false;

            _endGame = false;

            base.Initialize();
        }
Exemplo n.º 7
0
 /// <summary>
 ///   Swaps the hands of two players.
 /// </summary>
 public static void SwapHands(Player playerA, Player playerB)
 {
     LinkedList<Tile> buffer = playerA._hand;
     playerA._hand = playerB._hand;
     playerB._hand = buffer;
 }