def update(self, log): answer = [] for i in range(log.shape[0]): if(log['type'][i] == 'initialize'): content = log['text'][i].split(" ") print(str(content[1])+':'+str(content[2])) if(content[2] == 'WEREWOLF'): answer.append('人狼') else: answer.append('人間') if(len(answer) == self.player_num): print(answer) elif(log['type'][i] == 'talk'): content = log['text'][i].split(" ") # vote宣言 if(content[0] == 'VOTE'): speak = log['agent'][i]-1 to = name2num(content[1])-1 self.relation[speak][to] += -1 # estimate elif(content[0] == 'ESTIMATE'): speak = log['agent'][i]-1 to = name2num(content[1])-1 if(content[2] == 'WEREWOLF'): self.relation[speak][to] += -1 else: self.relation[speak][to] += 1 # request elif(content[0][:7] == 'REQUE'): speak = log['agent'][i]-1 to = name2num(content[1].strip(')'))-1 if(content[0][8:] == 'VOTE'): self.relation[speak][to] += -1 elif(content[0][8:] == 'DIVINATION'): self.relation[speak][to] += -1 # divined elif(content[0] == 'DIVINED'): speak = log['agent'][i]-1 to = name2num(content[1])-1 if(content[2] == 'WEREWOLF'): self.relation[speak][to] += -2 else: self.relation[speak][to] += 2 elif(log['type'][i] == 'vote'): speak = log['idx'][i]-1 to = log['agent'][i]-1 self.relation[speak][to] += -3 # デバッグようにiday毎に表示 ahead_day = self.day self.day = log['day'][i] if(ahead_day != self.day): print(self.relation) return(self.relation)
def update(self, base_info, diff_data, request): self.base_info = base_info #print("base_info:/n") #print(base_info) print("diff_data:") print(diff_data) ### NN用のデータを集める ### # 最初に記録する情報 if(self.onlyone): for i in range(len(self.base_info['statusMap'])): # 生きてるか死んでいるか(死:1,生:0) if(self.base_info['statusMap'][str(i+1)] == 'DEAD'): self.info[i][0] = 1 # 日にちを入れる self.info[i][10] = self.base_info['day'] self.onlyone = False # diff_dataの中をなめていく for i in range(diff_data.shape[0]): # 始めにtypeがtalkだった場合(今回はほとんどこれ) content = diff_data['text'][i].split(" ") if(diff_data['type'][i] == 'talk'): # 内容がCOの場合 if(content[0] == 'COMINGOUT' and diff_data['agent'][i] == sf.name2num(content[1])): # 一応誰が何をCOしたのか記録 # [**(番号),roll] self.called_comingout.append([diff_data['agent'][i], content[2]]) # 霊媒師かつ発話エージェントと発話対象が同じであれば if(content[2] == 'MEDIUM'): self.medium_co_num += 1 self.medium_co_order += 1 self.info[diff_data['agent'][i]-1][2] = self.medium_co_order # 霊媒師かつ発話エージェントと発話対象が同じであれば if(content[2] == 'SEER'): self.seer_co_num += 1 self.seer_co_order += 1 self.info[diff_data['agent'][i]-1][1] = self.seer_co_order # 内容がDIVINED if(content[0] == 'DIVINED'): # [**(使用者番号),**(対象者番号),roll] self.called_divined.append([diff_data['agent'][i], sf.name2num(content[1]), content[2]]) # 人狼判定 if(content[2] == 'WEREWOLF'): # 受けた人狼判定数更新 self.info[sf.name2num(content[1])-1][4] += 1 # 出した人狼判定数更新 self.info[diff_data['agent'][i]-1][8] += 1 if(content[2] == 'HUMAN'): # 受けた人間判定数更新 self.info[sf.name2num(content[1])-1][3] += 1 # 出した人狼判定数更新 self.info[diff_data['agent'][i]-1][7] += 1 #内容がVOTE if(content[0] == 'VOTE'): # 投票先 self.infoTalkvote[diff_data['agent'][i]-1][0] = sf.name2num(content[1]) # 日にち self.infoTalkvote[diff_data['agent'][i]-1][1] = self.base_info['day'] # typeがvoteだった場合 if(diff_data['type'][i] == 'vote'): # 同じ日のtalkで話した投票先とvote先が異なるときに1を代入 if(self.infoTalkvote[diff_data['idx'][i]-1][0] != diff_data['agent'][i] \ and self.infoTalkvote[diff_data['idx'][i]-1][1] == diff_data['day'][i]): self.info[diff_data['idx'][i]-1][9] = 1 # typeがidentifyだった場合 if(diff_data['type'][i] == 'identify'): # 結果を公開したかしてないか self.not_reported = True # 霊媒結果の保存 形式:[[**(番号), roll], [**(番号), roll]...] self.result_roll.append([diff_data['agent'][i], content[2]]) # typeがdivineだった場合 if(diff_data['type'][i] == 'divine'): # 結果を公開したかしてないか self.not_reported = True # 霊媒結果の保存 形式:[[**(番号), roll], [**(番号), roll]...] self.result_roll.append([diff_data['agent'][i], content[2]]) # typeがdeadだった場合(白確の保存) if(diff_data['type'][i] == 'dead'): self.dead.append(diff_data['agent'][i]) # 会話が1ターン終わったらco占い師数とco霊媒師数を代入する for i in range(len(self.base_info['statusMap'])): # co占い師数 self.info[i][1] = self.seer_co_num # co霊媒師数 self.info[i][2] = self.medium_co_num