//ExecuteWolf means it is day. Players do their vote to determine which player is the wolf protected override bool ExecuteWolf(Guid killed) { Broadcast(new Lose(killed)); isNight = !isNight; if (Werewolf.Player.Contains(killed)) { werewolf.removePlayer(killed); villagerToBeKilled = null; return(true); } else if (Seer.Player.Contains(killed)) { seer.removePlayer(killed); } else { villager.removePlayer(killed); } Console.WriteLine("Player Died: " + killed); villagerToBeKilled = null; killed = new Guid(); count = 0; return(false); }
public override void Execute(Vote vote) { WerewolfVote v = vote as WerewolfVote; if (isNight) { if (werewolf.Player.Contains(v.Current)) //Werewolf { villagerToBeKilled = v; count++; } else if (seer.Player.Contains(v.Current)) //Seer job -> know player's role { if (werewolf.Player.Contains(v.Executed)) { Console.WriteLine("Werewolf"); } else { Console.WriteLine("Villager"); } } else { throw new Exception("Invalid move: Villager cannot vote in this session"); } Console.WriteLine("Execute Count: " + count); if (count == Werewolf.Player.Count) { ExecuteVillager(v.Executed); Console.WriteLine("Player count: " + totalPlayer); } if (isLose()) { //If villager lose, then there's no villager left, and only wolf are remains. //Logic : When someone executed by wolf, it counts as lose. _gameEnded = true; foreach (Guid winner in werewolf.Player) { Broadcast(new Win(winner)); } } } else { throw new Exception("Cannot execute in day!"); } }
public WerewolfGame(List <Guid> players, List <int> UserRoles) { werewolf = new Roles(1, new RoleName("Werewolf")); villager = new Roles(2, new RoleName("Villager")); seer = new Roles(3, new RoleName("Seer")); _players = players; _userRoles = UserRoles; if (_players.Count < 5) { throw new Exception("Player must be 5 or more!"); } else if (_players.Count != this._userRoles.Count) { throw new Exception("Invalid assign role: Not every player is assigned with their roles!"); } _gameEnded = false; isNight = true; count = 0; totalPlayer = _players.Count; int idx = 0; foreach (int RoleIdx in _userRoles) { if (RoleIdx == 1) { werewolf.AddPlayer(_players[idx]); } else if (RoleIdx == 2) { villager.AddPlayer(_players[idx]); } else if (RoleIdx == 3) { seer.AddPlayer(_players[idx]); } idx++; } villagerToBeKilled = new WerewolfVote(); UserVoted = new List <Guid>(); VoteNumber = new List <int>(); }
//Execute villager means it is night. The werewolf execute other player protected override void ExecuteVillager(Guid killed) { Broadcast(new Lose(killed)); if (seer.Player.Contains(killed)) { seer.removePlayer(killed); } else { villager.removePlayer(killed); } Console.WriteLine("Player Died: " + killed); totalPlayer--; count = 0; villagerToBeKilled = null; killed = new Guid(); isNight = !isNight; }
public override void Vote(Vote vote) { WerewolfVote v = vote as WerewolfVote; currentId = v.Current; if (!isNight) { if (!UserVoted.Contains(v.Executed)) { UserVoted.Add(v.Executed); VoteNumber.Add(1); } else { for (int i = 0; i < VoteNumber.Count; i++) { if (UserVoted[i] == v.Executed) { VoteNumber[i]++; break; } } } count++; Console.WriteLine("Vote Count: " + count); Guid wastedUser = new Guid(); if (count == totalPlayer) { maxCount = 0; for (int i = 0; i < VoteNumber.Count; i++) { if (VoteNumber[i] > maxCount) { maxCount = VoteNumber[i]; wastedUser = UserVoted[i]; Console.WriteLine(wastedUser); } } if (ExecuteWolf(wastedUser)) { Console.WriteLine("You have eliminate wolf: " + wastedUser); } else { Console.WriteLine("Uh. You killed the wrong wolf: " + wastedUser); } totalPlayer--; Console.WriteLine("Player count: " + totalPlayer); count = 0; UserVoted.Clear(); VoteNumber.Clear(); } if (isWin()) { //If win, then there's no wolf remaining. So lose event are put at ExecuteVillager. //Logic here: Every player executed, it count as lose. _gameEnded = true; foreach (Guid winner in villager.Player) { Broadcast(new Win(winner)); } foreach (Guid winner in seer.Player) { Broadcast(new Win(winner)); } } } else { throw new Exception("Cannot vote in midnight!"); } }