// Удаление бонуса из списка public void Delete(Bonus bonus) { #if DEBUG Debug.WriteLine("{0} Удаление бонуса из списка - {1}", DateTime.Now, bonus.ToString()); #endif list.Remove(bonus); }
// Проверка бонуса на наличие в списке public bool ExistsBonus(Bonus bonus) { foreach (Bonus b in list) { if ((b.Type == bonus.Type) && (b.Suit == bonus.Suit) && (b.HighCard == bonus.HighCard)) return true; } return false; }
// Добавляет бонус в список public void AddBonus(Bonus bonus) { list.Add(bonus); }
// Сравнивает два бонуса private Bonus CompareBonuses(Bonus Bonus1, Bonus Bonus2) { if ((Bonus1 == null) && (Bonus2 == null)) return null; if (Bonus1 == null) return Bonus2; if (Bonus2 == null) return Bonus1; if (Bonus1.CompareTo(Bonus2) > 0) { return Bonus1; } else if (Bonus1.CompareTo(Bonus2) < 0) { return Bonus2; } else return null; }
public int CompareTo(Bonus Other) { // Если текущий бонус старше if (((int)this.Type) > ((int)Other.Type)) { return 1; } else // Если текущий бонус младше if (((int)this.Type) < ((int)Other.Type)) { return -1; } // Если тип бонусов равен else { // Если это бонус типа "Последовательность", то определяем старшенство по младшей карте карте if ((this.Type == BonusType.BONUS_TERZ) || (this.Type == BonusType.BONUS_50) || (this.Type == BonusType.BONUS_100)) { // Последовательность старше if (this.HighCard > Other.HighCard) { return 1; } else // Последовательность младше if (this.HighCard < Other.HighCard) { return -1; } // Если старшинство карт в последовательностях одинаково else { // Если текущая последовательность козырная - она старше if (this.IsTrump) { return 1; } else // Если другая последовательность козырная - то старше она if (Other.IsTrump) { return -1; } // Последовательности равны else { return 0; } } } // Если это последовательность 4X else { int[] weights = new int[8]; weights[(int)CardType.C_Q] = 0; weights[(int)CardType.C_K] = 1; weights[(int)CardType.C_10] = 2; weights[(int)CardType.C_A] = 3; weights[(int)CardType.C_9] = 4; weights[(int)CardType.C_J] = 5; // Если карта старше по весу, то и бонус старше. Равны быть не могут if (weights[(int)this.HighCard] > (weights[(int)Other.HighCard])) { return 1; } else { return -1; } } } }
// Добавление бонуса типа "Последовательность" в список бонусов private void AddStreakBonus(CardList cards, int Position, int Streak) { BonusType bonusType; if (Streak == 3) bonusType = BonusType.BONUS_TERZ; else if (Streak == 4) bonusType = BonusType.BONUS_50; else { bonusType = BonusType.BONUS_100; } Bonus bonus = new Bonus(bonusType, cards[Position - Streak].Type, cards[Position - Streak].IsTrump, cards[Position - Streak].Suit); // Заполнение списка карт бонуса for (var i = Position - Streak; i < Position; i++) bonus.Cards.Add(cards[i]); AddBonusToList(bonus); }
// Добавляет бонус в список, проверяя на старшенство private void AddBonusToList(Bonus bonus) { // Добавляем бонус в список list.Add(bonus); // Если это первый бонус в списке, то он и становится старшим if (SeniorBonus == null) { SeniorBonus = bonus; } else { // Если это не первый бонус, то сравниваем его со страшим, и заменяем, если он старше if (SeniorBonus.CompareTo(bonus) < 0) SeniorBonus = bonus; } }