public void StartGame() { int many = 12; //Количество игроков GameIn?.Invoke("Игра началась"); CreatePlayers(many); if (dealingcards == false) { DealCards(); } foreach (var player in Player.PlayersList) { player.IsAlive = true; //Открытие всех позиций, соотвтествующих уровню LevelAdd foreach (Position pos in player.PlayerCard.allpositions) { if (pos.Levelhide <= LevelAdd) { pos.Open = true; } } } StartNewRound(); }
//Один проход по всем игрокам public void StartNewRound() { while (true) { if (Player.PlayersList.Count <= PlayersToEnd) { GameIn?.Invoke("Игра окончена"); GameIn?.Invoke("В отряде остались игроки:"); foreach (var player in Player.PlayersList) { GameIn?.Invoke(player.Name); } break; } RoundNumber++; GameIn?.Invoke($"Начался раунд {RoundNumber}"); //Таймер (подключить отдельно для возможности игры с таймером и без) foreach (var player in Player.PlayersList) { if (player.IsAlive) { player.Talking(this); } } GameIn?.Invoke("Начинается голосование"); Voting(Player.PlayersList); //Как реализовать удаление игрока??? //Обработка результатов голосования (передается список игроков, над которыми будет работать алгоритм) List <Player> tosurvive = ToSurvive(Player.PlayersList); DeleteOrSurviveRound(tosurvive); } }
public void DeletePlayerByVotes(List <Player> tosurvive) { GameIn?.Invoke($"Игрок {tosurvive[0].Name} покидает игру"); tosurvive[0].DeletePlayer(); Main.TextBlockDict["BlockPlayer" + tosurvive[0].Quanity.ToString()].Text = ""; Main.ChangeEnableSub(true, false, false); MaxVote = 0; IsNow = false; }
//Раздача карт (до начала игры) public void DealCards() { foreach (var player in Player.PlayersList) { player.CreateOrRefreshCard(); } dealingcards = true; GameIn?.Invoke("Все игроки получили карты"); }
//Один проход по всем игрокам (surviveround = true раунд выживания) public void StartNewRound(List <Player> playerlist, bool surviveround = false) { Main.HideTimer(); Main.ChangeEnableSub(false, true, false); Main.ChangeEnable(Main.ButtonVoteDict, false); Main.ChangeEnable(Main.ButtonDeleteDict, false); Main.ChangeEnable(Main.ButtonDeleteDict, true); Main.VoteQuantity = 0; Main.ClearBlocks(Main.BlockVoteQuantityDict); PlayersEndTalk = 0; Main.GameProgress.Text = ""; //очищаем чат Main.BVoting.Content = "Начать голосование"; if (surviveround == false) { RoundNumber++; foreach (var player in playerlist) { player.OnVote = false; } //Сдвигаем круг ходов на одного игрока if (RoundNumber != 1) { Player firstplayer = Player.PlayersList[0]; Player.PlayersList.Remove(firstplayer); Player.PlayersList.Add(firstplayer); } Main.ChangeEnable(Main.ButtonExposeDict, true); ResetVotes(); Main.IsSurvive = false; GameIn?.Invoke($"Начался раунд {RoundNumber}"); } Main.BNext_Talking.Content = $"Ход игрока {playerlist[PlayersEndTalk].Name}"; //Таймер (подключить отдельно для возможности игры с таймером и без) CheckEndGame(); if (surviveround == false) { if (playerlist.Count > 0) { CardReload(); PrintCard(); } } }
//Раздача карт (до начала игры) //public void DealCards() //{ // dealingcards = true; // GameIn?.Invoke("Все игроки получили карты"); //} public Game StartGame() { GameIn?.Invoke("Игра началась"); CreatePlayers(PlayersToStart); Main.BlockNameCatastrophe.Text = Cataclysm.Data; Main.BlockNameDescription.Text = Cataclysm.Description; CardReload(true); PrintCard(); return(this); }
//Проверка на конец игры public void CheckEndGame() { if (Player.PlayersList.Count <= PlayersToEnd) { GameIn?.Invoke("Игра окончена"); GameIn?.Invoke("В отряде остались игроки:"); foreach (var player in Player.PlayersList) { GameIn?.Invoke(player.Name); } Player.DeleteAllPlayers(); Main.ChangeEnableSub(false, false, false); } }
//Метод просматривает количество голосов, если есть лидер, то исключает его //Если таких игроков несколько, то проводит второй круг между игроками борющимися за выживание public void DeleteOrSurviveRound(List <Player> tosurvive) { if (tosurvive.Count == 0) { } else if (tosurvive.Count == 1) { DeletePlayerByVotes(tosurvive); MaxVote = 0; } else if (IsNow == false) { foreach (var player in tosurvive) { if (player.Vote != MaxVote) { tosurvive.Remove(player); } } Main.IsSurvive = true; StartNewRound(tosurvive, Main.IsSurvive); IsNow = true; Main.BVoting.Content = "Начать голосование"; } else if (IsNow == true) { if (tosurvive[0].Vote != 0) { foreach (var player in tosurvive) { player.DeletePlayer(); GameIn?.Invoke($"Игрок {player.Name} покидает игру"); Main.TextBlockDict["BlockPlayer" + player.Quanity.ToString()].Text = ""; } MaxVote = 0; } Main.BNext_Talking.Content = "Ход следующего игрока"; Main.IsSurvive = false; Main.ChangeEnableSub(true, false, false); IsNow = false; } }
//Алгоритм определяет за кого проголосовало больше всего игроков public List <Player> ToSurvive(List <Player> Players) { List <Player> tosurvive = new List <Player>(); int current = 0; MaxVote = 0; foreach (var player in Players) { current = player.Vote; if (current > MaxVote) { MaxVote = current; tosurvive.Clear(); tosurvive.Add(player); } else if (current == MaxVote) { tosurvive.Add(player); } } GameIn?.Invoke($"Максимальное количество голосов: {MaxVote}"); return(tosurvive); }
//Метод просматривает количество голосов, если есть лидер, то исключает его //Если таких игроков несколько, то проводит второй круг между игроками борющимися за выживание public void DeleteOrSurviveRound(List <Player> tosurvive) { if (tosurvive.Count == 1) { GameIn?.Invoke($"Игрок {tosurvive[0].Name} покидает игру"); tosurvive[0].DeletePlayer(); tosurvive.Remove(tosurvive[0]); } else { foreach (var player in tosurvive) { player.Talking(this); } } Voting(tosurvive); List <Player> result = ToSurvive(tosurvive); foreach (var player in result) { GameIn?.Invoke($"Игрок {player.Name} покидает игру"); player.DeletePlayer(); } }