Example #1
0
        public void StartGame()
        {
            CurrentTurn = new Turn();

            // Have the initial arrangement rendered.
            if (MoveMade != null)
            {
                MoveMade(this, EventArgs.Empty);
            }

            HookTurnEvents();
            CurrentTurn.GenerateMoves();

            PlayerType playerType = _playerTypes[CurrentTurn.PlayingColour];

            switch (playerType)
            {
            case PlayerType.Chimp:
                CurrentTurn.MakeRandomMove();
                return;

            case PlayerType.Computer:
                MakeBestMove();
                return;

            default:
                return;
            }
        }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            turnables.Shuffle();
            TurnList.OnListUpdate(turnables);
        }

        if (Input.GetButtonDown("Fire2"))
        {
            int randomIndex2 = Random.Range(0, turnables.Count);
            int randomIndex1 = Random.Range(0, turnables.Count);

            ITurn swapped1 = turnables[randomIndex1];
            ITurn swapped2 = turnables[randomIndex2];

            turnables[randomIndex1] = swapped2;
            turnables[randomIndex2] = swapped1;

            TurnList.OnListUpdate(turnables);
        }

        if (Input.GetButtonDown("Jump"))
        {
            ITurn first = turnables[0];
            turnables.RemoveAt(0);
            turnables.Add(first);

            TurnList.OnListUpdate(turnables);
        }
    }
Example #3
0
 public static Turn New(ITurn turnObject)
 {
     return(new Turn()
     {
         _turnObject = turnObject
     });
 }
Example #4
0
 public void Construct(
     IGameMap gameMap,
     ITurn turn)
 {
     _gameMap = gameMap;
     _turn    = turn;
 }
 /// <summary>
 /// Raises the turn ready event. Implementing classes should call this
 /// when they have a turn ready to play
 /// </summary>
 /// <param name="turn">Turn.</param>
 protected virtual void OnTurnReady(ITurn turn)
 {
     if (TurnReadyEvent != null)
     {
         TurnReadyEvent(turn);
     }
 }
Example #6
0
    public static void NextTurn()
    {
        int index = 0;

        // Find which index we are

        for (int i = 0; i < arrayOfUserUids.Length; i++)
        {
            if (arrayOfUserUids[i] == turnUid)
            {
                index = i;
                break;
            }
        }

        // Find new uid
        index++;
        if (index > 1)
        {
            index = 0;
        }

        string newTurnUid = arrayOfUserUids[index];

        Debug.Log("new uid before post: " + newTurnUid);
        ITurn newTurn = new ITurn();

        newTurn.uid = newTurnUid;
        // post new turn
        FirebaseDatabase.PostJSON("turn/uid", newTurnUid, "ServerManager", "ProccedNextTurn", "ErrorNextTurn");
    }
Example #7
0
File: Game.cs Project: Corne/VOC
 private void CurrentTurn_Ended(object sender, EventArgs e)
 {
     currentTurn.Ended -= CurrentTurn_Ended;
     currentTurn = provider.GetNext();
     currentTurn.Ended += CurrentTurn_Ended;
     TurnStarted?.Invoke(this, currentTurn);
 }
    /// <summary>
    /// Passes the turn ready event up from the TurnEngine
    /// </summary>
    /// <param name="bestTurn">Best turn.</param>
    void HandleTurnReadyEvent(ITurn bestTurn)
    {
        Debug.Log(System.Enum.GetName(typeof(ConnectKPiece), player) + " : " + engine.Stats.ToString());
        OnTurnReady(bestTurn);

        engine.ResetStatisticsLog();
    }
Example #9
0
    void ReceiveTurn(ITurn turn)
    {
        //Apply the turn and redraw the board
        board = turn.ApplyTurn(board) as ConnectKBoard;
        DrawBoard();
        //check to see if the game is over
        if (board.IsTerminal())
        {
            ConnectKPiece winner;
            if (board.player == ConnectKPiece.P1)
            {
                winner = ConnectKPiece.P2;
            }
            else
            {
                winner = ConnectKPiece.P1;
            }
            Line winLine = board.GetWinningLine();
            if (winLine != null)
            {
                DrawVictory(winLine, winner);
            }
            Debug.Log("Game over");
            gameEnd = true;

            p1.TurnReadyEvent -= ReceiveTurn;
            p2.TurnReadyEvent -= ReceiveTurn;
        }
        else
        {
            PlayTurn();
        }
    }
Example #10
0
 public void AddTurn(ITurn newTurnObject)
 {
     onTurnStart += newTurnObject.onTurnStart;
     //if (turnBasedElementList.Find(n => n.turnIndex == newTurnObject.turnIndex) == null) {
     turnBasedElementList.Add(newTurnObject);
     //}
 }
Example #11
0
File: Game.cs Project: Corne/VOC
 private void SetGameFinished()
 {
     currentTurn.Ended -= CurrentTurn_Ended;
     var player = currentTurn.Player;
     currentTurn = null;
     Finished?.Invoke(this, player);
 }
Example #12
0
 public OldBattle(IOldMap map, IObjective objective, ITurn turnState, IActionProber actionProber)
 {
     _map          = map;
     _objective    = objective;
     _turnState    = turnState;
     _actionProber = actionProber;
 }
        protected internal override IEnumerable<IMove> GetStrategyAvailableMoves(IBoard board, ITurn turn, IGameRuleStrategyContext context)
        {
            if (this.NeedToMovePiece(board, turn.Player))
                yield break;

            var playerName = turn.Player;
            var dice = this.GetAvailableDice(turn.Dice).OrderByDescending(x => x.Value).ToList();
            var firstPiece = false;
            for (var i = (board.Lanes.Count * 3) / 4; i < board.Lanes.Count; i++)
            {
                var lane = board.Lanes[i];
                if (lane.Count == 0 || lane[0].Player != playerName)
                    continue;

                foreach (var die in dice)
                {
                    if (i + die.Value == board.Lanes.Count ||
                        (i + die.Value > board.Lanes.Count && !firstPiece))
                    {
                        yield return new DefaultMove(board.Lanes[i], i, die);
                        firstPiece = true;
                    }
                }

                firstPiece = true;
            }
        }
Example #14
0
    public static int Register(ITurn new_turnable)
    {
        if (Instance == null)
        {
            return(0);
        }

        if (Instance.Turnables == null)
        {
            Instance.Turnables = new List <ITurn>();
        }

        if (!Instance.Turnables.Contains(new_turnable))
        {
            MDebug.Log("^turnSystem TURNABLE: register " + new_turnable.GetID());
            Instance.Turnables.Add(new_turnable);
            // Instance.NormalizeList();
            Instance.SortListByTime();
            Instance.OnListUpdated.AttemptCall(Instance.Turnables);

            return(Instance.Turnables.Count);
        }

        Instance.SortListByTime();
        return(-1);
    }
Example #15
0
File: Game.cs Project: Corne/VOC
        public void Start()
        {
            if (currentTurn != null) return;

            currentTurn = provider.GetNext();
            currentTurn.Ended += CurrentTurn_Ended;
            TurnStarted?.Invoke(this, currentTurn);
        }
 public Monopoly(IBoard board, IDice dice, ITurn turn, ILoggerFactory loggerFactory = null)
 {
     Board   = board;
     Dice    = dice;
     Turn    = turn;
     Players = new List <Player>();
     _logger = loggerFactory?.CreateLogger <Monopoly>();
 }
Example #17
0
    public void OnValueChanged(string uidObject)
    {
        ITurn turn = JsonUtility.FromJson <ITurn>(uidObject);

        turnUid           = turn.uid;
        DiceOnline.turnId = turn.uid;
        Debug.Log("Turn uid is now: " + turnUid);
    }
Example #18
0
        void UpdateBackground(object sender, ITurn turn)
        {
            switch (turn.Side)
            {
            case Side.CORP: background.sprite = dayCity; break;

            case Side.RUNNER: background.sprite = nightCity; break;
            }
        }
 void ReceiveTurn(ITurn turn)
 {
     //Debug.Log (gameBoard.ToString());
     gameBoard = (TTTBoard)((TTTTurn)turn).ApplyTurn(gameBoard);
     XTurn     = !XTurn;
     //Debug.Log (gameBoard.ToString());
     DrawBoard();
     waiting = false;
 }
Example #20
0
 IEnumerator WaitForTurn(ITurn t)
 {
     ///Double null check because we are checking an interface
     while (!forceNext && ((t != null && !t.Equals(null)) && !t.HasEndedTurn() || TurnEventQueue.EventRunning))
     {
         // MDebug.Log("^turnSystem " + t.GetID() + " Events:" + TurnEventQueue.EventRunning.ToString() + "  hasEnded" + t.HasEndedTurn() + "\n" + TurnEventQueue.ToString2());
         yield return(null);
     }
 }
Example #21
0
 public static bool HasTurn(ITurn t)
 {
     //   MDebug.Log("t " + t.GetID() + "  current" + Instance.Current.GetID());
     if (Instance == null || Instance.Current == null || Instance.Current != t)
     {
         return(false);
     }
     return(true);
 }
Example #22
0
    UI_TurnListItem MakeItem(ITurn u, Transform target)
    {
        UI_TurnListItem new_item = Instantiate(TurnListItemPrefab.gameObject).GetComponent <UI_TurnListItem>();

        new_item.transform.SetParent(target, false);
        new_item.SetTurnItem(u);

        return(new_item);
    }
Example #23
0
 private void Turn_Ended(object sender, EventArgs e)
 {
     if (turn != null)
     {
         turn.Ended -= Turn_Ended;
         turn = null;
     }
     _playable = true;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="UniversalTurnBasedAI.MinimaxWorker"/> class.
 /// </summary>
 /// <param name="rootState">The starting state</param>
 /// <param name="firstTurn">The turn to apply to the starting state to generate this worker's branch</param>
 /// <param name="eval">The Evaluator</param>
 /// <param name="maxDepth">Max depth.</param>
 /// <param name="ourTurn">Whether or not it is the searching player's turn</param>
 /// <param name="waitHandle">Signals the ThreadPool that the search is complete</param>
 public MinimaxWorker(IGameState rootState, ITurn firstTurn, IEvaluator eval, int maxDepth, bool ourTurn, EventWaitHandle waitHandle)
 {
     this.rootState  = rootState;
     this.firstTurn  = firstTurn;
     this.maxDepth   = maxDepth;
     this.ourTurn    = ourTurn;
     this.eval       = eval;
     this.waitHandle = waitHandle;
     stopped         = true;
 }
Example #25
0
 private void TrackClicks(ITurn turn, EventHandler <ClickPool> update)
 {
     if (monitoredClicks != null)
     {
         monitoredClicks.Changed -= update;
     }
     monitoredClicks          = turn.Clicks;
     monitoredClicks.Changed += update;
     update.Invoke(monitoredClicks, monitoredClicks);
 }
Example #26
0
 void CheckTurn(ITurn turn)
 {
     if ((turn as Unit) != null && (turn as Unit).OwnerID == 1)
     {
         transform.GetChild(0).gameObject.SetActive(true);
     }
     else
     {
         transform.GetChild(0).gameObject.SetActive(false);
     }
 }
Example #27
0
        private void Update(ITurn turn)
        {
            DisplayHeader(TurnRow, $"Turn  ({turn.Number} / {Settings.MaxTurns})");
            int row = TurnRow + 1;

            foreach (var bot in Game.Match.Round.Bots)
            {
                DisplayBot(row++, bot);
                DisplayRow(row++, bot.Action);
            }
        }
Example #28
0
 void OnTurnStart(ITurn turn)
 {
     if (turn as Unit != null && (turn as Unit).OwnerID == 0)
     {
         GetComponent <CanvasGroup>().alpha = 1;
     }
     else
     {
         GetComponent <CanvasGroup>().alpha = 0;
     }
 }
Example #29
0
File: Bank.cs Project: Corne/VOC
        // 25 Development Cards (14 Knight/Soldier Cards, 6 Progress Cards, 5 Victory Point Cards)
        //ore, wool and grain
        public void BuyDevelopmentCard(IPlayer player, ITurn turn)
        {
            if (player == null)
                throw new ArgumentNullException(nameof(player));
            if (turn == null)
                throw new ArgumentNullException(nameof(turn));
            if (!player.HasResources(DEVELOPMENTCARD_COST))
                throw new InvalidOperationException("Player does not have the resources to buy a Development Card");

            player.TakeResources(DEVELOPMENTCARD_COST);
            player.AddCard(new DevelopmentCard(deck.Pop(), turn));
        }
Example #30
0
 public static void Unregister(ITurn turnable)
 {
     if (turnable == Instance.Current)
     {
         Instance.Current = null;
     }
     if (Instance.Turnables.Contains(turnable))
     {
         MDebug.Log("^turnSystem REMOVE " + turnable.GetID());
         Instance.Turnables.Remove(turnable);
         Instance.OnListUpdated.AttemptCall(Instance.Turnables);
     }
 }
    bool isMyItem(Unit u, ITurn t)
    {
        if (u == null || t == null)
        {
            return(false);
        }
        if (t as Unit != null && t as Unit == u)
        {
            return(true);
        }

        return(false);
    }
Example #32
0
        public void Turn(TurningDirection turningDirection)
        {
            ITurn turning = _mapDirection[CurrentDirection];

            if (turningDirection == TurningDirection.R)
            {
                CurrentDirection = turning.TurnRight();
            }
            if (turningDirection == TurningDirection.L)
            {
                CurrentDirection = turning.TurnLeft();
            }
        }
        public IEnumerable<IMove> GetAvailableMoves(IBoard board, ITurn turn)
        {
            if (!turn.AreDiceRolled || !this.GetAvailableDice(turn.Dice).Any())
                yield break;

            var context = new DefaultGameRuleStrategyContext();
            for (var strategy = this; !context.IsDone && strategy != null; strategy = strategy.next)
            {
                foreach (var move in strategy.GetStrategyAvailableMoves(board, turn, context))
                {
                    yield return move;
                }
            }
        }
 protected internal override IEnumerable<IMove> GetStrategyAvailableMoves(IBoard board, ITurn turn, IGameRuleStrategyContext context)
 {
     if (board.Bar.Any(x => x.Player == turn.Player))
     {
         foreach (var die in this.GetAvailableDice(turn.Dice))
         {
             if (this.IsMoveValid(board, die.Value, turn.Player))
             {
                 yield return new DefaultMove(board.Bar, -1, die);
             }
         }
         context.IsDone = true;
     }
 }
    public void Construct(
        IFogOfWar fogOfWar,
        IReposition reposition,
        ITurn turn,
        ISceneTransition sceneTransition)
    {
        _fogOfWar        = fogOfWar;
        _reposition      = reposition;
        _turn            = turn;
        _sceneTransition = sceneTransition;

        players = GameObject.FindObjectsOfType(typeof(Player)) as Player[];
        if (StaticVariables.numberOfPlayers == 2)
        {
            Destroy(players[2].gameObject);
            Destroy(players[3].gameObject);
            numberOfPlayers = 2;
            players         = new Player[]
            {
                players[0],
                players[1]
            };
            players[0].name = StaticVariables.player1Name;
            players[1].name = StaticVariables.player2Name;
        }
        else if (StaticVariables.numberOfPlayers == 3)
        {
            Destroy(players[3].gameObject);
            numberOfPlayers = 3;
            players         = new Player[]
            {
                players[0],
                players[1],
                players[2]
            };
            players[0].name = StaticVariables.player1Name;
            players[1].name = StaticVariables.player2Name;
            players[2].name = StaticVariables.player3Name;
        }
        else if (StaticVariables.numberOfPlayers == 4)
        {
            numberOfPlayers = 4;
            players[0].name = StaticVariables.player1Name;
            players[1].name = StaticVariables.player2Name;
            players[2].name = StaticVariables.player3Name;
            players[3].name = StaticVariables.player4Name;
        }
    }
Example #36
0
        public static Move BestMove(ITurn turn, byte depth)
        {
            // Generate the turn tree
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            TurnNode rootNode = new TurnNode(turn, 0, depth);

            stopwatch.Stop();
            Random random    = new Random();
            short  randIndex = (short)random.Next(turn.AvailableMoves.Count);

            Board board     = turn.CurrentBoard;
            short bestValue = board.Value;
            Move  bestMove  = null;

            foreach (Move move in turn.AvailableMoves)
            {
                Turn hypotheticalTurn = new Turn(board.Copy(), turn.PlayingColour, leaf: true);
                hypotheticalTurn.Execute(move);
                short value = hypotheticalTurn.CurrentBoard.Value;
                switch (turn.PlayingColour)
                {
                case PieceColour.White:
                    if (value > bestValue)
                    {
                        bestValue = value;
                        bestMove  = move;
                    }
                    break;

                case PieceColour.Black:
                    if (value < bestValue)
                    {
                        bestValue = value;
                        bestMove  = move;
                    }
                    break;
                }
            }
            if (bestMove != null)
            {
                return(bestMove);
            }

            return(turn.AvailableMoves[randIndex]);
        }
Example #37
0
    void OnStartTurn(ITurn turn)
    {
        float start = m_GrayScale.GetGray();

        if (turn.GetType() == typeof(Unit) && (turn as Unit).OwnerID == 1 && !(turn as Unit).IsIdentified)
        {
            StopAllCoroutines();
            Noise.enabled = true;
            StartCoroutine(M_Extensions.YieldT(f => m_GrayScale.SetGray(start + (1 - start) * f), 0.25f));
        }
        else
        {
            StopAllCoroutines();
            Noise.enabled = false;
            StartCoroutine(M_Extensions.YieldT(f => m_GrayScale.SetGray(start * (1 - f)), 0.25f));
        }
    }
Example #38
0
    public void SetTurnItem(ITurn turn)
    {
        m_turn = turn;
        if (OnSetTurnAble != null)
        {
            OnSetTurnAble(m_turn);
        }

        //  Image.color = turn.GetColor();
        Image.sprite     = turn.GetIcon();
        BackGround.color = turn.GetColor();

        ActiveTurnIndicator.GetComponent <Image>().color = Color.white;
        UpdateActiveTurnIndicator( );

        turn.OnUpdateSprite += () => SetTurnItem(turn);
    }
Example #39
0
        public DevelopmentCard(DevelopmentCardType type, ITurn boughtTurn)
        {
            if (!Enum.IsDefined(typeof(DevelopmentCardType), type))
                throw new ArgumentException("Invalid card type");
            if (boughtTurn == null)
                throw new ArgumentNullException(nameof(boughtTurn));

            Id = Guid.NewGuid();
            Type = type;

            if (type == DevelopmentCardType.VictoryPoint)
                _playable = true;
            else {
                turn = boughtTurn;
                turn.Ended += Turn_Ended;
            }
        }
        protected internal override IEnumerable<IMove> GetStrategyAvailableMoves(IBoard board, ITurn turn, IGameRuleStrategyContext context)
        {
            var playerName = turn.Player;
            var dice = this.GetAvailableDice(turn.Dice).ToList();
            for (var i = 0; i < board.Lanes.Count; i++)
            {
                var lane = board.Lanes[i];
                if (lane.Count == 0 || lane[0].Player != playerName)
                    continue;

                foreach (var die in dice)
                {
                    if (this.IsMoveValid(board, i, die.Value, playerName))
                    {
                        yield return new DefaultMove(lane, i, die);
                    }
                }
            }
        }
Example #41
0
        public void BuyPhase(IGame game, ITurn turn, IPlayer player)
        {
            foreach (ICard card in player.Hand)
            {
                if ((card.Type & CardType.Treasure) == CardType.Treasure)
                    turn.PlayTreasure(card);
            }

            while (turn.Buys > 0)
            {
                if (turn.Treasure >= 8 && game.HasAvailable(Game.Base.Cards.Province))
                    turn.BuyCard(Game.Base.Cards.Province);
                else if (turn.Treasure >= 6 && game.HasAvailable(Game.Base.Cards.Gold))
                    turn.BuyCard(Game.Base.Cards.Gold);
                else if (turn.Treasure >= 3 && game.HasAvailable(Game.Base.Cards.Silver))
                    turn.BuyCard(Game.Base.Cards.Silver);
                else
                    break;
            }
        }
Example #42
0
        private static void PrintBoard(IGame game, ITurn turn, IPlayer player)
        {
            var board = game.GetBoard(player);
            var lanes = board.Lanes;
            var playerName = player.Name;

            Console.WriteLine("--1--2--3--4--5--6--0---7--8--9-10-11-12-");

            for (var row = 0; row < 5; row++)
            {
                for (var column = 0; column < lanes.Count / 4; column++)
                {
                    var pieces = lanes[column];
                    Console.Write("|");
                    Console.Write("{0,1}", pieces.Count > row + 5 ? (pieces[row + 5].Player == playerName ? "W" : "B") : string.Empty);
                    Console.Write("{0,1}", pieces.Count > row ? (pieces[row].Player == playerName ? "W" : "B") : string.Empty);
                }
                Console.Write("| ");
                Console.Write(board.Bar.Count > row ? (board.Bar[row].Player == playerName ? "W" : "B") : "-");
                Console.Write(" |");
                for (var column = lanes.Count / 4; column < lanes.Count / 2; column++)
                {
                    var pieces = lanes[column];
                    Console.Write("{0,1}", pieces.Count > row + 5 ? (pieces[row + 5].Player == playerName ? "W" : "B") : string.Empty);
                    Console.Write("{0,1}", pieces.Count > row ? (pieces[row].Player == playerName ? "W" : "B") : string.Empty);
                    Console.Write("|");
                }
                Console.WriteLine();
            }
            var dashes = 16 - player.Name.Length;
            Console.Write("-{0} {1} {2}--------", new string('-', dashes / 2), player.Name, new string('-', (dashes + 1) / 2));
            for (var i = 0; i < 4; i++)
            {
                if (turn.Dice.Count > i && !turn.Dice[i].IsUsed)
                {
                    Console.Write("{0}--", turn.Dice[i].Value);
                }
                else
                {
                    Console.Write("---");
                }
            }
            Console.WriteLine("--");

            for (var row = 4; row >= 0; row--)
            {
                for (var column = lanes.Count - 1; column >= (lanes.Count * 3) / 4; column--)
                {
                    var pieces = lanes[column];
                    Console.Write("|");
                    Console.Write("{0,1}", pieces.Count > row + 5 ? (pieces[row + 5].Player == playerName ? "W" : "B") : string.Empty);
                    Console.Write("{0,1}", pieces.Count > row ? (pieces[row].Player == playerName ? "W" : "B") : string.Empty);
                }
                Console.Write("| - |");
                for (var column = ((lanes.Count * 3) / 4) - 1; column >= lanes.Count / 2; column--)
                {
                    var pieces = lanes[column];
                    Console.Write("{0,1}", pieces.Count > row + 5 ? (pieces[row + 5].Player == playerName ? "W" : "B") : string.Empty);
                    Console.Write("{0,1}", pieces.Count > row ? (pieces[row].Player == playerName ? "W" : "B") : string.Empty);
                    Console.Write("|");
                }
                Console.WriteLine();
            }

            Console.WriteLine("-24-23-22-21-20-19-----18-17-16-15-14-13-");
        }
Example #43
0
        public void BuyPhase(IGame game, ITurn turn, IPlayer player)
        {
            foreach (ICard card in player.Hand)
            {
                if ((card.Type & CardType.Treasure) == CardType.Treasure)
                    turn.PlayTreasure(card);
            }

            while (turn.Buys > 0)
            {
                bool bought = true;
                if (turn.Treasure >= 8 && game.HasAvailable(Game.Base.Cards.Province))
                    turn.BuyCard(Game.Base.Cards.Province);
                else if (turn.Treasure >= 6 && game.HasAvailable(Game.Base.Cards.Gold))
                    turn.BuyCard(Game.Base.Cards.Gold);
                else if (turn.Treasure >= 5 && game.HasAvailable(Game.Base.Cards.Mine) && (Count(player, "Mine") / Count(player, "Cards")) < TuningParameters.Get<double>("MineRatio", 0))
                {
                    turn.BuyCard(Game.Base.Cards.Mine);
                    Increment(player, "Mine");
                }
                else if (turn.Treasure >= 5 && game.HasAvailable(Game.Base.Cards.Market) && (Count(player, "Market") / Count(player, "Cards")) < TuningParameters.Get<double>("MarketRatio", 0))
                {
                    turn.BuyCard(Game.Base.Cards.Market);
                    Increment(player, "Market");
                }
                else if (turn.Treasure >= 4 && game.HasAvailable(Game.Base.Cards.Smithy) && (Count(player, "Smithy") / Count(player, "Cards")) < TuningParameters.Get<double>("SmithyRatio", 0))
                {
                    turn.BuyCard(Game.Base.Cards.Smithy);
                    Increment(player, "Smithy");
                }
                else if (turn.Treasure >= 4 && game.HasAvailable(Game.Base.Cards.Militia) && (Count(player, "Militia") / Count(player, "Cards")) < TuningParameters.Get<double>("MilitiaRatio", 0))
                {
                    turn.BuyCard(Game.Base.Cards.Militia);
                    Increment(player, "Militia");
                }
                else if (turn.Treasure >= 3 && game.HasAvailable(Game.Base.Cards.Village) && (Count(player, "Village") / Count(player, "Cards")) < TuningParameters.Get<double>("VillageRatio", 0))
                {
                    turn.BuyCard(Game.Base.Cards.Village);
                    Increment(player, "Village");
                }
                else if (turn.Treasure >= 3 && game.HasAvailable(Game.Base.Cards.Woodcutter) && (Count(player, "Woodcutter") / Count(player, "Cards")) < TuningParameters.Get<double>("WoodcutterRatio", 0))
                {
                    turn.BuyCard(Game.Base.Cards.Woodcutter);
                    Increment(player, "Woodcutter");
                }
                else if (turn.Treasure >= 3 && game.HasAvailable(Game.Base.Cards.Silver))
                    turn.BuyCard(Game.Base.Cards.Silver);
                else if (turn.Treasure >= 2 && game.HasAvailable(Game.Base.Cards.Cellar) && (Count(player, "Cellar") / Count(player, "Cards")) < TuningParameters.Get<double>("CellarRatio", 0))
                {
                    turn.BuyCard(Game.Base.Cards.Cellar);
                    Increment(player, "Cellar");
                }
                else if (turn.Treasure >= 2 && game.HasAvailable(Game.Base.Cards.Moat) && (Count(player, "Moat") / Count(player, "Cards")) < TuningParameters.Get<double>("MoatRatio", 0))
                {
                    turn.BuyCard(Game.Base.Cards.Moat);
                    Increment(player, "Moat");
                }
                else if (turn.Treasure >= 2 && game.HasAvailable(Game.Base.Cards.Estate))
                    turn.BuyCard(Game.Base.Cards.Estate);
                else
                    bought = false;

                if (bought)
                {
                    Increment(player, "Cards");
                    continue;
                }
                else
                    break;
            }
        }
Example #44
0
        public void ActionPhase(IGame game, ITurn turn, IPlayer player)
        {
            ICard card;

            while (turn.Actions > 0)
            {
                card = Utils.GetCard<Village>(player.Hand);
                if (card != null)
                {
                    turn.PlayAction(card, null);
                    continue;
                }

                card = Utils.GetCard<Market>(player.Hand);
                if (card != null)
                {
                    turn.PlayAction(card, null);
                    continue;
                }

                card = Utils.GetCard<Cellar>(player.Hand);
                if (card != null)
                {
                    IList<ICard> discards = new List<ICard>();
                    foreach (ICard cardInHand in player.Hand)
                    {
                        if (!Object.ReferenceEquals(cardInHand, card))
                        {
                            if ((cardInHand.Type & CardType.Victory) == CardType.Victory &&
                                (cardInHand.Type & CardType.Action) != CardType.Action)
                                discards.Add(cardInHand);
                            else if ((Game.Base.Cards)cardInHand.CardEnum == Game.Base.Cards.Cellar)
                                discards.Add(cardInHand);
                        }
                    }
                    if (discards.Count > 0)
                    {
                        turn.PlayAction(card, discards);
                        continue;
                    }
                }

                card = Utils.GetCard<Smithy>(player.Hand);
                if (card != null)
                {
                    turn.PlayAction(card, null);
                    continue;
                }

                card = Utils.GetCard<Mine>(player.Hand);
                if (card != null)
                {
                    ICard targetCard = Utils.GetCard<Copper>(player.Hand);
                    if (targetCard != null && game.HasAvailable(Game.Base.Cards.Silver))
                    {
                        turn.PlayAction(card, new Mine.MineData { Card = targetCard, TargetType = Game.Base.Cards.Silver });
                        continue;
                    }

                    targetCard = Utils.GetCard<Silver>(player.Hand);
                    if (targetCard != null && game.HasAvailable(Game.Base.Cards.Gold))
                    {
                        turn.PlayAction(card, new Mine.MineData { Card = targetCard, TargetType = Game.Base.Cards.Gold });
                        continue;
                    }
                }

                card = Utils.GetCard<Militia>(player.Hand);
                if (card != null)
                {
                    turn.PlayAction(card, null);
                    continue;
                }

                card = Utils.GetCard<Woodcutter>(player.Hand);
                if (card != null)
                {
                    turn.PlayAction(card, null);
                    continue;
                }

                card = Utils.GetCard<Moat>(player.Hand);
                if (card != null)
                {
                    turn.PlayAction(card, null);
                    continue;
                }

                break;
            }
        }
Example #45
0
        public void BuyDevelopmentCantBeCalledWithoutPlayer(IPlayer player, ITurn turn)
        {
            var board = new Mock<IBoard>();
            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            Assert.Throws<ArgumentNullException>(() => bank.BuyDevelopmentCard(player, turn));
        }
Example #46
0
 private IList<IGameMove> CallGetStrategyValidMoves(GameRuleStrategyBase strategy, IGameBoard board, ITurn turn, IGameRuleStrategyContext context)
 {
     return strategy.GetStrategyAvailableMoves(board, turn, context)
         .Cast<IGameMove>()
         .ToList();
 }
 protected internal abstract IEnumerable<IMove> GetStrategyAvailableMoves(IBoard board, ITurn turn, IGameRuleStrategyContext context);
Example #48
0
        private static bool TryParseValidTurn(NeatAiTurnChoice turnChoice, IPlayerState playerState, IEnumerable<TurnType> validTurnTypes, out ITurn turn)
        {
            turn = null;

            if (!validTurnTypes.Contains(turnChoice.TurnType))
            {
                return false;
            }

            if (turnChoice.TurnType == TurnType.Attack)
            {
                var chosenMove = playerState.ActiveNeuromon.MoveSet.Moves.ElementAtOrDefault(turnChoice.Index);

                if (chosenMove != default(Move))
                {
                    turn = new Attack(chosenMove);
                    return true;
                }
            }
            else if (turnChoice.TurnType == TurnType.SwitchActiveNeuromon)
            {
                var chosenActiveNeuromon = playerState.InactiveNeuromon.ElementAtOrDefault(turnChoice.Index);

                if (chosenActiveNeuromon != default(Neuromon) && !chosenActiveNeuromon.IsDead)
                {
                    turn = new SwitchActiveNeuromon(chosenActiveNeuromon);
                    return true;
                }
            }

            return false;
        }
Example #49
0
 public void ActionPhase(IGame game, ITurn turn, IPlayer player)
 {
 }