/// <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); }
public int GetPickerTrickCount() { int count = 0; Rounds.ForEach(round => { IPlayer winner = round.Trick.TheWinnerPlayer(); if (winner == Picker || winner == Partner) { ++count; } }); return(count); }
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(); } }
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); }
private void RoundTimeChanged(object sender, PropertyChangedEventArgs property) { // TODO: bad performance OverralTime = TimeSpan.Zero; Rounds.ForEach(x => OverralTime += x.GetOverallTime()); }