void Divine() { foreach (var agent in AliveAgentList.Where(a => RoleOf(a) == Role.SEER)) { var target = gameServer.RequestDivineTarget(agent); var targetRole = RoleOf(target); if (target == null || StatusOf(target) == Status.DEAD || targetRole == Role.UNC) { // Do nothing. } else { var divine = new Judge(Day, agent, target, targetRole.GetSpecies()); gameData.Divine = divine; if (targetRole == Role.FOX) { gameData.AddLastDeadAgent(target); gameData.CursedFox = target; } if (GameLogger != null) { GameLogger.Log($"{Day},divine,{agent.AgentIdx},{target.AgentIdx},{divine.Result}"); } } } }
void Guard() { foreach (var agent in AliveAgentList.Where(a => RoleOf(a) == Role.BODYGUARD)) { if (agent == gameData.Executed) { continue; } var target = gameServer.RequestGuardTarget(agent); if (target == null || agent == target) { // Do nothing. } else { var guard = new Guard(Day, agent, target); gameData.Guard = guard; if (GameLogger != null) { GameLogger.Log($"{Day},guard,{agent.AgentIdx},{target.AgentIdx},{RoleOf(target)}"); } } } }
void Vote() { gameData.VoteList.Clear(); foreach (var agent in AliveAgentList) { var target = gameServer.RequestVote(agent); if (target == null || StatusOf(target) == Status.DEAD || agent == target) { target = AliveAgentList.Where(a => a != agent).Shuffle().First(); } var vote = new Vote(Day, agent, target); gameData.VoteList.Add(vote); if (GameLogger != null) { GameLogger.Log($"{Day},vote,{agent.AgentIdx},{target.AgentIdx}"); } } gameData.LatestVoteList = new List <Vote>(gameData.VoteList); }