void ShowCards() // Вывод карт игроков и на столе { ConsoleGraphics.Clear(Color.Black); foreach (var player in players) { player.ShowCards(); } for (int i = 0; i < cards_on_the_table.Count; i++) { ConsoleGraphics.DrawImage(cards_on_the_table[i].karta, 540, 15 + players[i].Position * 90, WidthCard, HeightCard); } }
public void Run() // Запуст игры { if (game_over) { return; } j = 0; for (int i = 0; i < MaxCard; i++) // Раздаем карты игрокам { players[j++].Cards.Enqueue(cards[i]); if (j == players.Count) { j = 0; } } while (!game_over) // Цикл игры { ShowCards(); for (int i = 0; i < players.Count; i++) // Выводим из игры игрока у которого нет карт { if (players[i].Cards.Count == 0) { change_position = true; players.RemoveAt(i--); // i-- Перемещаемся назад по списку чтобы не пропустить следующего, } // у которого возможно нет карт } if (change_position) { for (int i = 0; i < players.Count; i++) { players[i].Position = i; } change_position = false; } for (int i = 0; i < players.Count; i++) // Игроки выкладывают карты на стол { cards_on_the_table.Add((Karta)players[i].Cards.Dequeue()); System.Threading.Thread.Sleep(800); ShowCards(); } System.Threading.Thread.Sleep(500); j = 0; for (int i = 1; i < cards_on_the_table.Count; i++) // Поиско самой большой карты { if (cards_on_the_table[j].weight_card < cards_on_the_table[i].weight_card) { j = i; the_same_card = false; } else if (cards_on_the_table[j].weight_card == cards_on_the_table[i].weight_card) // Если у игроков совпали карты { the_same_card = true; } } Console.SetCursorPosition(30, players.Count * 8); Console.WriteLine("Карты забирает игрок: " + players[j].Name); foreach (Karta card in cards_on_the_table) // Игрок у которого карта больше забирает карты { players[j].Cards.Enqueue(card); } cards_on_the_table.Clear(); // Очистка стола if (the_same_card) // Если у игроков совпали карты то забирает тот игрок, который выложил карту первым { // и становится в конец очереди, для уравновешивания шансов. К примеру: players.Add(players[j]); // если игроки 1, 2, 3, 4 по очереди вылаживают карты и у игроков 1 и 3 players.RemoveAt(j); // совпадают карты то игрок 1 забирает карты и становится в конец очереди, } // тогда игроки будут выкладывать карты в следующем порядке 2, 3, 4, 1 System.Threading.Thread.Sleep(1500); ShowCards(); foreach (Player player in players) // Проверка забрал ли один из игроков все карты { if (player.Cards.Count == MaxCard) { game_over = true; ConsoleGraphics.Clear(Color.Black); player.Position = 0; player.ShowCards(); Console.SetCursorPosition(0, 8); Console.WriteLine("Игра окончена игру выиграл: " + player.Name); } } } }