Пример #1
0
        /// <summary>
        /// Compiles the state of the current round and serializes it as a <see cref="JObject" />.
        /// </summary>
        /// <returns>A JSON object representing the current round state.</returns>
        public JObject GetRoundState()
        {
            List <JObject> RoundData = new List <JObject>();

            Rounds.ForEach(r => RoundData.Add(JObject.FromObject(r)));

            JObject Data = new JObject();

            Data.Add(new JProperty("CardSet", CardSet.Default.ToString()));
            Data.Add(new JProperty("RoundData", RoundData.ToArray()));

            return(Data);
        }
Пример #2
0
        public int GetPickerTrickCount()
        {
            int count = 0;

            Rounds.ForEach(round =>
            {
                IPlayer winner = round.Trick.TheWinnerPlayer();
                if (winner == Picker || winner == Partner)
                {
                    ++count;
                }
            });
            return(count);
        }
Пример #3
0
        public void NextRound(int chunks)
        {
            Locked = true;

            if (CurrentRound != null)
            {
                Rounds.Add(CurrentRound.Copy());
            }
            Rounds.ForEach(x => x.Locked = true);

            foreach (Player player in Players)
            {
                player.Chunk = string.Empty;
            }

            CurrentRound    = new Round();
            CurrentRound.ID = Rounds.Count() + 1;

            foreach (Player player in Players.Where(x => x.Alive && x.ID > 0))
            {
                CurrentRound.Players.Add(player);
            }

            List <List <Player> > chunksList = new List <List <Player> >();

            for (int i = 0; i < chunks; i++)
            {
                chunksList.Add(new List <Player>());
            }

            foreach (var player in CurrentRound.Players.Where(x => !string.IsNullOrEmpty(x.SeedChunk)))
            {
                if (int.TryParse(player.SeedChunk, out int chunk) && chunksList.Count() >= chunk)
                {
                    player.Chunk = chunk.ToString();
                    chunksList[chunk - 1].Add(player);
                }
            }

            foreach (var player in RandomPermutation(CurrentRound.Players.Where(x => string.IsNullOrEmpty(x.Chunk))))
            {
                List <Player> chunk = chunksList.FirstOrDefault(x => x.Count() == chunksList.Min(y => y.Count()));
                chunk.Add(player);
                player.Chunk = (chunksList.IndexOf(chunk) + 1).ToString();
            }
        }
Пример #4
0
        public int GetPickerScore()
        {
            int total      = 0;
            int pickTricks = 0;

            Rounds.ForEach(round =>
            {
                IPlayer winner = round.Trick.TheWinnerPlayer();
                if (winner == Picker)
                {
                    ++pickTricks;
                }
                if (winner == Picker || winner == Partner)
                {
                    total += round.Trick.TrickValue();
                }
            });
            if (pickTricks > 0)
            {
                total += Blind.BlindPoints();
            }
            return(total);
        }
Пример #5
0
 private void RoundTimeChanged(object sender, PropertyChangedEventArgs property)
 {
     // TODO: bad performance
     OverralTime = TimeSpan.Zero;
     Rounds.ForEach(x => OverralTime += x.GetOverallTime());
 }