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"); }
/// <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(); }
/// <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; }