Esempio n. 1
0
        /// <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");
        }
Esempio n. 2
0
        /// <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;
                }
            }
        }