Example #1
0
 // Оглашение ботом бонусов
 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
             }
         }
     }
 }
Example #2
0
 // Функция обработки команд по игровому процессу
 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;
 }
Example #3
0
        // Оглашение игроком бонуса
        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();
            }
        }
Example #4
0
 // Обработка сообщений
 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;
             }
     }
 }
Example #5
0
 // Завершение процесса торговли
 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);
 }