/// <summary> /// First, all agents have chances to talk. /// Next, wolves whispers. /// Continue them until all agents finish talking. /// </summary> public void Talk() { List <Agent> overList = new List <Agent>(); for (int i = 0; i < gameSetting.MaxTalk; i++) { bool continueTalk = false; List <Agent> aliveList = AliveAgentList.Union(overList).Shuffle().ToList(); foreach (Agent agent in aliveList) { if (overList.Contains(agent)) { continue; } string talkContent = gameServer.RequestTalk(agent); if (talkContent != null) { if (talkContent.Length != 0) { Talk sentence = new Talk(gameData.NextTalkIdx, gameData.Day, agent, talkContent); gameData.AddTalk(agent, sentence); if (!talkContent.Equals(Common.Data.Talk.OVER)) { continueTalk = true; overList.Clear(); } else { overList.Add(agent); } if (GameLogger != null) { GameLogger.Log(string.Format("{0},talk,{1},{2},{3}", gameData.Day, sentence.Idx, agent.AgentIdx, sentence.Content)); } } } } Whisper(); if (!continueTalk) { break; } } }
/// <summary> /// Whisper by werewolf. /// </summary> public void Whisper() { List <Agent> overList = new List <Agent>(); for (int j = 0; j < gameSetting.MaxTalk; j++) { bool continueWhisper = false; List <Agent> aliveList = AliveAgentList.Union(overList).Shuffle().ToList(); foreach (Agent agent in aliveList) { if (gameData.GetRole(agent) == Role.WEREWOLF) { if (overList.Contains(agent)) { continue; } string whisperContent = gameServer.RequestWhisper(agent); if (whisperContent != null && whisperContent.Length != 0) { Talk whisper = new Talk(gameData.NextWhisperIdx, gameData.Day, agent, whisperContent); gameData.AddWhisper(agent, whisper); if (!whisperContent.Equals(Common.Data.Talk.OVER)) { continueWhisper = true; overList.Clear(); } else { overList.Add(agent); } if (GameLogger != null) { GameLogger.Log(string.Format("{0},whisper,{1},{2},{3}", gameData.Day, whisper.Idx, agent.AgentIdx, whisper.Content)); } } } } if (!continueWhisper) { break; } } }