// Оглашение ботом бонусов private void AnnounceBonuses(BonusList Bonuses) { if (ActiveTable != null) { lock (ActiveTable) { try { ActiveTable.AnnounceBonuses(ActivePlace, Bonuses); botBonuses = null; } catch (Exception ex) { #if DEBUG Debug.WriteLine(ex.Message); #endif } } } }
// Функция обработки команд по игровому процессу private string ProcessGame(string command, string message) { Dictionary<string, string> gameParams = Helpers.SplitCommandString(message); string Result = null; switch (command) { // Обработка ставки игрока case Messages.MESSAGE_GAME_BAZAR_BET: { int orderSize = Int32.Parse(gameParams["Size"]); OrderType type = (OrderType)Int32.Parse(gameParams["Type"]); CardSuit suit = Helpers.StringToSuit(gameParams["Trump"]); // Добавление заявки в список заявок текущего стола if (ActiveTable != null) { lock (ActiveTable) { try { ActiveTable.AddOrder(new Order(type, orderSize, suit)); } catch (Exception ex) { #if DEBUG Debug.WriteLine(ex.Message); #endif } } } break; } // Завершение процесса торговли case Messages.MESSAGE_GAME_BAZAR_END: { break; } // Переход хода к следующему игроку case Messages.MESSAGE_GAME_BAZAR_NEXTBETPLAYER: { break; } // Объявление сделанной игроком ставки для остальных игроков case Messages.MESSAGE_GAME_BAZAR_SAYBET: { break; } // Список всех возможных бонусов игрока case Messages.MESSAGE_GAME_BONUSES_ALL: { break; } // Анонсирование бонусов игроком case Messages.MESSAGE_GAME_BONUSES_ANNOUNCE: { /*int bonusCount = Int32.Parse(gameParams["Count"]); string Str = gameParams["Count"]; for (var i = 0; i < bonusCount; i++) { Str += String.Format(",Bonus{0}={1}", i, gameParams["Bonus" + i.ToString()]); }*/ BonusList bList = new BonusList(message); if (ActiveTable != null) { lock (ActiveTable) { try { ActiveTable.AnnounceBonuses(ActivePlace, bList); } catch (Exception ex) { #if DEBUG Debug.WriteLine(ex.Message); #endif } } } break; } // Уведомление о типах анонсированных бонусов для других игроков case Messages.MESSAGE_GAME_BONUSES_TYPES: { break; } // Команда-победитель в бонусах case Messages.MESSAGE_GAME_BONUSES_WINNER: { break; } // Раздача карт case Messages.MESSAGE_GAME_DISTRIBUTIONCARDS: { break; } // Завершение игры на столе case Messages.MESSAGE_GAME_END: { break; } // Уведомление следующего игрока о ходе case Messages.MESSAGE_GAME_GAMING_NEXTPLAYER: { break; } // Ход игрока case Messages.MESSAGE_GAME_GAMING_PLAYERMOVE: { Card card = new Card(gameParams["Card"]); if (ActiveTable != null) { lock (ActiveTable) { try { ActiveTable.PlayerMove(ActivePlace, card); } catch (Exception Ex) { #if DEBUG Debug.WriteLine(Ex.Message); #endif } } } break; } // Уведомление других игроков о карте которой походил игрок case Messages.MESSAGE_GAME_GAMING_REMINDCARD: { break; } // Начало игры case Messages.MESSAGE_GAME_START: { break; } default: { break; } } return Result; }
// Оглашение игроком бонуса public void AnnounceBonuses(int Place, BonusList Bonuses) { // Выбираем список бонусов того игрока, который сделал объявление BonusList currentPlayerList = BonusesFromNumber(Place); // Если игрок объявил хотя бы один бонус if (Bonuses.Count > 0) { // Удаляем из списка возможных бонусов все не объявленные for (var i = currentPlayerList.Count - 1; i >= 0; i--) { if (!Bonuses.ExistsBonus(currentPlayerList[i])) { currentPlayerList.Delete(currentPlayerList[i]); } } // Формируем строку из типох оглашаемых бонусов string bTypes = "Count=" + Bonuses.Count; for (var i = 0; i < Bonuses.Count; i++) { bTypes += String.Format(",Type{0}={1}", i, (int)Bonuses[i].Type); } // Отправляем типы оглашенных бонусов всем клиентам SendMessageToClients(String.Format("{2}Place={0},{1}", Place, bTypes, Messages.MESSAGE_GAME_BONUSES_TYPES)); } // Если не объявлено ни одного бонуса, то очищаем список возможных бонусов игрока else { currentPlayerList.Clear(); } }
// Обработка сообщений private void ProcessMessage(string command, string message) { Dictionary<string, string> bParams = Helpers.SplitCommandString(message); switch (command) { // Обработка раздачи карт case Messages.MESSAGE_GAME_DISTRIBUTIONCARDS: { botCards = new CardList(bParams["Cards"]); IsMakingOrder = false; usedCards.Clear(); RenewDontUsedCards(); //int totalScore1 = Int32.Parse(bParams["Scores1"]); //int totalScore2 = Int32.Parse(bParams["Scores2"]); break; } // Обработка перехода хода к данному боту case Messages.MESSAGE_GAME_BAZAR_NEXTBETPLAYER: { BetType bType = (BetType)Int32.Parse(bParams["Type"]); int minSize = Int32.Parse(bParams["MinSize"]); // Расчет и совершение заказа Thread.Sleep(500); Order order; if (!IsMakingOrder) { order = GetMaxPossibleOrder(); if (order.Size < minSize) order = new Order(OrderType.ORDER_PASS, 0, CardSuit.C_NONE); IsMakingOrder = true; } else order = new Order(OrderType.ORDER_PASS, 0, CardSuit.C_NONE); MakeOrder(order); break; } // Название ставки другого игрока case Messages.MESSAGE_GAME_BAZAR_SAYBET: { // НЕ НУЖНО break; } // Завершение процесса торговли case Messages.MESSAGE_GAME_BAZAR_END: { // НЕ НУЖНО break; } // Завершение процесса торговли без выбора козыря case Messages.MESSAGE_GAME_BAZAR_PASS: { // НЕ НУЖНО break; } // Переход хода к боту case Messages.MESSAGE_GAME_GAMING_NEXTPLAYER: { CardList PossibleCards = new CardList(bParams["Cards"]); // Расчет и показ бонусов Thread.Sleep(500); if (botBonuses != null) { if (botBonuses.Count > 0) { for (var i = botBonuses.Count - 1; i >= 0; i--) { if (botBonuses[i] != botBonuses.SeniorBonus) botBonuses.Delete(botBonuses[i]); } } AnnounceBonuses(botBonuses); } Thread.Sleep(500); // Расчет и совершение хода MakeMove(GetMovingCard(PossibleCards)); break; } // Извещение о ходе картой другим игроком case Messages.MESSAGE_GAME_GAMING_REMINDCARD: { int cardPlace = Int32.Parse(bParams["Place"]); Card newCard = new Card(bParams["Card"]); // Запоминание похоженной карты usedCards.Add(newCard); dontUsedCards.Remove(dontUsedCards[newCard.Type, newCard.Suit]); // int LocalScore1 = Int32.Parse(bParams["Scores1"]); // int LocalScore2 = Int32.Parse(bParams["Scores2"]); // int beloteRemind = Int32.Parse(bParams["Belote"]); break; } // Получение списка возможных бонусов case Messages.MESSAGE_GAME_BONUSES_ALL: { botBonuses = new BonusList(message); break; } // Оглашение типов бонусов другими игроками case Messages.MESSAGE_GAME_BONUSES_TYPES: { // НЕ НУЖНО break; } // Оглашение победителя бонусов case Messages.MESSAGE_GAME_BONUSES_WINNER: { // НЕ НУЖНО break; } default: { break; } } }
// Завершение процесса торговли public void EndBazar() { // Установка козыря для всех игроков Player1Cards.SetTrump(Orders.Current.Trump); Player2Cards.SetTrump(Orders.Current.Trump); Player3Cards.SetTrump(Orders.Current.Trump); Player4Cards.SetTrump(Orders.Current.Trump); // Проверка карт на наличие бонуса Belote Player1Cards.FindBelote(); Player2Cards.FindBelote(); Player3Cards.FindBelote(); Player4Cards.FindBelote(); Status = DistributionStatus.D_GAME; // Заполняем список бонусов Player1Bonuses = new BonusList(Player1Cards); Player2Bonuses = new BonusList(Player2Cards); Player3Bonuses = new BonusList(Player3Cards); Player4Bonuses = new BonusList(Player4Cards); }