Exemple #1
0
 public void StartTurn()
 {
     // Clear the actions for each player
     TurnActions.Clear();
     TurnOutcomes.Clear();
     IsMidTurn        = true;
     UnreadiedPlayers = 0;
 }
Exemple #2
0
        public void StartSuddenDeath()
        {
            SuddenDeathOn       = true;
            SuddenDeathCanShoot = false;
            SuddenDeathShot     = false;
            TurnOutcomes.Clear();
            IsMidTurn = true;

            Timer t = new Timer(state => { SuddenDeathCanShoot = true; },
                                null, TimeSpan.FromSeconds(5), TimeSpan.FromMilliseconds(-1));
        }
Exemple #3
0
        /// <summary>
        /// Process the actions taken in a turn, updating the TurnOutcomes with the outcomes of these actions
        /// </summary>
        public void ProcessTurn()
        {
            var actions = GetActionList();

            TurnOutcomes.Clear();

            // Figure out who is ducking
            var duckingPlayers = new HashSet <Player>();
            var ducksUsed      = new HashSet <Player>();

            foreach (Action action in actions)
            {
                // Duck only if they have Ducks left
                if (action.Actor.IsAlive && action.Actor.NumDucks > 0 &&
                    action.ActType == Action.ActionType.DUCK)
                {
                    duckingPlayers.Add(action.Actor);
                    action.Actor.Duck();
                }
            }

            // Perform shoot actions and generate outcomes
            foreach (Action action in actions)
            {
                if (action.ActType == Action.ActionType.SHOOT)
                {
                    // Only kill the player if they are alive and not ducking
                    if (action.Target.IsAlive)
                    {
                        if (duckingPlayers.Contains(action.Target))
                        {
                            TurnOutcomes.Add(new Outcome(action, true, false));
                            ducksUsed.Add(action.Target);
                        }
                        else
                        {
                            action.Target.Kill();
                            TurnOutcomes.Add(new Outcome(action, false, true));
                        }
                    }
                }
            }

            // Remove any disconnected players
            foreach (Player player in Players)
            {
                if (!player.IsActiveUser && player.IsAlive)
                {
                    TurnOutcomes.Add(new Outcome(new Action(Action.ActionType.SHOOT, player, player), false, true));
                }
            }

            // Perform duck outcomes for players not shot at
            foreach (Player player in duckingPlayers)
            {
                if (!ducksUsed.Contains(player))
                {
                    TurnOutcomes.Add(new Outcome(new Action(Action.ActionType.DUCK, player, player), true, false));
                }
            }

            IsMidTurn        = false;
            UnreadiedPlayers = GetAlivePlayers().Count;
        }