示例#1
0
        private async Task PayCasualty()
        {
            if (Deck.Count > 0)
            {
                Deck[0].FaceUP = true;
                Casualties.Add(Deck[0]);

                Log += $"You lost {Deck[0].GetValueStringLog()} as a casualty\n";
                Deck.RemoveAt(0);
                OnPropertyChanged("CasualtyCard");
            }
            await Task.Delay(2000);

            if (OpponentDeck.Count > 0)
            {
                OpponentDeck[0].FaceUP = true;
                Casualties.Add(OpponentDeck[0]);

                Log += $"Opponent lost {OpponentDeck[0].GetValueStringLog()} as a casualty\n";
                OpponentDeck.RemoveAt(0);
                OnPropertyChanged("CasualtyCard");
            }
            OnPropertyChanged("DeckCount");
            OnPropertyChanged("OpponentDeckCount");
        }
示例#2
0
        public CasualtiesUI(Condition cond)
        {
            InitializeComponent();

            condition = cond as Casualties;

            casualtyThresholdTextBox.Text = condition.CasualtyThreshold.ToString(CultureInfo.InvariantCulture);
            unknownC1TextBox.Text         = condition.Unknown1.ToString(CultureInfo.InvariantCulture);
            unknownC2TextBox.Text         = condition.Unknown2.ToString(CultureInfo.InvariantCulture);
            sideComboBox.SelectedIndex    = condition.FactionIndex;
        }
示例#3
0
        private void RegisterLicenseFrom_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (DialogResult != DialogResult.OK)
            {
                return;
            }
            Logger.Write("Registering licesnse");

            var name  = textBoxName.Text;
            var email = textBoxEmail.Text;

            ThreadPool.QueueUserWorkItem((m) => {
                var validator = new RhinoValidator(_appData);
                validator.Register(name, email);

                if (validator.IsValid && passesTestQuestion(validator))
                {
                    Casualties.ReportCasualty(string.Format("License registered{0}{1}{0}{2}", Environment.NewLine, name, email));
                }
            }, null);
        }
示例#4
0
        public void DealCards()
        {
            List <Card> AllCards = new List <Card>();

            CardSuit[]  Suits = (CardSuit[])Enum.GetValues(typeof(CardSuit));
            CardValue[] Vals  = (CardValue[])Enum.GetValues(typeof(CardValue));

            Deck.Clear();
            OpponentDeck.Clear();
            Casualties.Clear();

            //create cards
            foreach (var suit in Suits)
            {
                foreach (var v in Vals)
                {
                    Card c = new Card();
                    c.Suit   = suit;
                    c.Value  = v;
                    c.FaceUP = false;

                    if (c.Value != CardValue.Joker)
                    {
                        AllCards.Add(c);
                    }
                }
            }

            //Add 2 Jokers
            Card c3 = new Card();

            c3.Value  = CardValue.Joker;
            c3.FaceUP = false;

            Card c2 = new Card();

            c2.Value  = CardValue.Joker;
            c2.FaceUP = false;

            AllCards.Add(c3);
            AllCards.Add(c2);

            //Shuffle the deck
            int n = AllCards.Count;

            while (n > 1)
            {
                n--;
                int  k = rng.Next(n + 1);
                Card c = AllCards[k];
                AllCards[k] = AllCards[n];
                AllCards[n] = c;
            }

            //Deal
            int i = 0;

            foreach (Card c in AllCards)
            {
                if (i % 2 == 0)
                {
                    Deck.Add(c);
                }
                else
                {
                    OpponentDeck.Add(c);
                }

                i++;
            }

            Log += "Cards have been dealt.\n";
        }
示例#5
0
        public override void ResolveBattle()
        {
            // Calculate amount of troops for each player
            Dictionary <Player, int> remainingTroops = new Dictionary <Player, int>();

            foreach (Army army in Armies)
            {
                if (!remainingTroops.ContainsKey(army.SourcePlayer))
                {
                    remainingTroops.Add(army.SourcePlayer, army.NumTroops);
                }
                else
                {
                    remainingTroops[army.SourcePlayer] += army.NumTroops;
                }
            }
            List <Player> remainingPlayers = remainingTroops.Where(x => x.Value > 0).Select(x => x.Key).ToList();

            // Calculate strength of each player (weighted average of all armies of that player)
            Dictionary <Player, float> playerStrength = new Dictionary <Player, float>();

            foreach (Player p in remainingPlayers)
            {
                Casualties.Add(p, 0);
                List <Army> playerArmies  = Armies.Where(x => x.SourcePlayer == p).ToList();
                int         totalTroops   = remainingTroops[p];
                float       totalStrength = 0;
                foreach (Army army in playerArmies)
                {
                    totalStrength += (army.NumTroops * army.Strength);
                }
                float strength = totalStrength / totalTroops;
                playerStrength.Add(p, strength);
                //Debug.Log("Player " + p.Name + " Strength: " + strength);
            }

            // Fight until only one player has armies left
            while (remainingPlayers.Count > 1)
            {
                float totalStrength = 0f;
                foreach (Player p in remainingPlayers)
                {
                    totalStrength += playerStrength[p];
                }
                float  rng    = Random.Range(0, totalStrength);
                float  tmp    = 0f;
                int    c      = 0;
                Player winner = null;
                while (winner == null)
                {
                    tmp += playerStrength[remainingPlayers[c]];
                    if (tmp >= rng)
                    {
                        winner = remainingPlayers[c];
                    }
                    c++;
                }

                foreach (Player p in remainingPlayers)
                {
                    if (p != winner)
                    {
                        remainingTroops[p]--;
                        Casualties[p]++;
                    }
                }
                remainingPlayers = remainingTroops.Where(x => x.Value > 0).Select(x => x.Key).ToList();
            }

            // Set post-battle values
            Winner = remainingPlayers[0];
            Losers = Players.Where(x => x != Winner).ToList();
            WinnerSourceTerritory = Armies.First(x => x.SourcePlayer == Winner).SourceTerritory;
            WinnerTargetTerritory = Armies.First(x => x.SourcePlayer == Winner).TargetTerritory;
            WinnerTroopsRemaining = remainingTroops[Winner];
        }