/// <param name="printLogs">Делегат вывода данных в окно логов</param> /// <param name="printCardsInTextBox">Делегат вывода в указанный RichTextBox список карт</param> /// <param name="obj">Доступные RichTextBox окна</param> public Sever( Action <string> printLogs, Action <RichTextBox, List <PlayingCard> > printCardsInTextBox, List <RichTextBox> obj ) { // методы взаимодействия с формой PrintLogs = printLogs; PrintCardsInTextBox = printCardsInTextBox; AllBoxes = obj; PrintLogs("Сервер инициализирован"); Mode = GameMode.AiVsAi; PrintLogs($"Текущий режим: {Mode}"); // работа с колодой DeckBox = new DeckCards(); // сама колода PrintCardsInTextBox(AllBoxes[0], new List <PlayingCard> { DeckBox.ViewTrump() }); // показать козырь // выдача карт на руки for (var i = 0; i < 6; i++) { HandPlayer1Box.Add(DeckBox.TakeCard()); HandPlayer2Box.Add(DeckBox.TakeCard()); } ViewState(); PrintLogs("Карты розданы"); // определение активного игрока InitActivePlayer(); PrintLogs("Сейчас ходит игрок " + ActivePlayer); // создание сервера Player1 = new Lori(DeckBox.ViewTrump(), "Lori One"); Player2 = new Lori(DeckBox.ViewTrump(), "Lori Two"); }
/// <summary> /// Определить кто первый ходит, условия: 1) меньший козырь, иначе 2) наибольшая карта, иначе 3) случайны игрок /// </summary> void InitActivePlayer() { // козырь var trump = DeckBox.ViewTrump(); // выборка козырей var hand1 = HandPlayer1Box.Where(item => item.suit == trump.suit); var hand2 = HandPlayer2Box.Where(item => item.suit == trump.suit); // проверка условий: if (hand1.Any() && hand2.Any()) // козыри есть у обоих { if (hand1.Min(item => item.weight) < hand2.Min(item => item.weight)) { ActivePlayer = 1; } else { ActivePlayer = 2; } } else if (hand1.Any()) // козыри есть только у 1 { ActivePlayer = 1; } else if (hand2.Any()) // козыри есть только у 2 { ActivePlayer = 2; } else // козыри отсутствуют на руках { // проверка наибольшей карты if (HandPlayer1Box.Max(item => item.weight) > HandPlayer2Box.Max(item => item.weight)) { ActivePlayer = 1; } else if (HandPlayer1Box.Max(item => item.weight) > HandPlayer2Box.Max(item => item.weight)) { ActivePlayer = 2; } else // ветка случайного числа { var rnd = new Random(); var id = rnd.Next(1, 3); PrintLogs($"Решение по монетке: {id}"); ActivePlayer = id; } } }