hanabiapp.game.game_data_manager
1import json 2from datetime import date 3import datetime 4 5class GameDataManager(): 6 """ 7 ゲームデータを管理するクラス. 8 9 ゲームの開始時,ターンごとの情報,ゲーム終了時のデータを 10 格納・更新・取得するためのメソッドを提供する. 11 """ 12 13 def __init__(self): 14 """ 15 GameDataManager クラスのコンストラクタ. 16 ゲームデータとターンデータの初期化を行う. 17 """ 18 self.turn_data = {} # ターンごとのデータを格納する辞書 19 self.turn_sequence = [] # 1ターン目からゲーム終了ターンまでのturn_dataを格納するリスト 20 self.game_data = {} # ゲームごとのデータ+turn_sequenceが格納される辞書.最終的にdict形式でget_game_dataで取得可. 21 22 def set_data_game_start(self,players,turn_time_limit,deck): 23 """ 24 ゲーム開始時のデータを設定する関数. 25 26 Args: 27 players (list): 参加プレイヤーのリスト. 28 turn_time_limit (int): 1ターンの制限時間(秒). 29 deck (list): 使用するカードデッキ. 30 """ 31 self.game_data["num_of_players"] = len(players) 32 turn_order = {} 33 for idx, player in enumerate(players): 34 turn_order[f"{idx}"] = player.name 35 self.game_data["turn_order"] = json.dumps(turn_order) 36 self.game_data["turn_time_limit"] = turn_time_limit 37 self.game_data["deck"] = deck 38 39 def set_turn_data_before_perform(self,turn,hints,miss,board,trash,deck,hands,game_const,card_knowledge,num_of_valid_actions,score_per_turn): 40 """ 41 各ターンのアクション前のデータを設定する関数. 42 43 Args: 44 turn (int): 現在のターン数. 45 hints (int): 残りヒント数. 46 miss (int): 残りミス回数. 47 board (dict): 各色のカードのプレイ状況. 48 trash (list): 捨て札のリスト. 49 deck (list): 現在の山札のリスト. 50 hands (dict): 各プレイヤーの手札情報. 51 game_const (GameConst): ゲームの定数を保持するクラス. 52 card_knowledge (list): 各プレイヤーのカード知識データ. 53 num_of_valid_actions (int): 有効なアクション数. 54 score_per_turn (int): 現在のスコア. 55 """ 56 self.turn_data = {} 57 58 self.turn_data["turn"] = turn 59 self.turn_data["hints"] = hints 60 self.turn_data["miss"] = miss 61 self.turn_data["deck_size"] = len(deck) 62 self.turn_data["fireworks_b"] = board[game_const.BLUE] 63 self.turn_data["fireworks_g"] = board[game_const.GREEN] 64 self.turn_data["fireworks_r"] = board[game_const.RED] 65 self.turn_data["fireworks_w"] = board[game_const.WHITE] 66 self.turn_data["fireworks_y"] = board[game_const.YELLOW] 67 68 # 捨て山 69 discard_counts = {color: [0, 0, 0, 0, 0] for color in game_const.COLOR_NAMES} 70 for color_index, number in trash: 71 color = game_const.COLOR_NAMES[color_index] 72 discard_counts[color][number - 1] += 1 # 数字は1始まりなので-1してインデックス調整 73 # カウントを文字列形式に変換してturn_dataに格納 74 for color in game_const.COLOR_NAMES: 75 color_key = f"discard_{color.lower()}" 76 self.turn_data[color_key] = "-".join(map(str, discard_counts[color])) 77 78 # 手札情報 79 # handsは各プレイヤーの手札情報が格納されている辞書 {player_id: [(color, number), ...]} 80 hand_pid = {} 81 for player_id, hand in hands.items(): 82 # 各カード情報を色と数字の文字列に変換 83 hand_str = "-".join(f"{game_const.COLOR_NAMES[color]}{number}" for color, number in hand) 84 hand_key = f"{player_id}" # プレイヤー番号に基づいてturn_dataのキーを作成 85 hand_pid[hand_key] = hand_str 86 self.turn_data["hand_pid"] = json.dumps(hand_pid) 87 88 # ヒント状況 89 hint_data = [] 90 for player_knowledge in card_knowledge: 91 formatted = [] 92 for card_info in player_knowledge: 93 color = card_info['color'] if card_info['color'] else 'N' 94 rank = str(card_info['rank']+1) if card_info['rank'] is not None else '0' 95 formatted.append(f"{color}{rank}") 96 hint_data.append('-'.join(formatted)) 97 98 # 各プレイヤーのヒント状況を設定 99 hint_pid = {} 100 for idx, hint in enumerate(hint_data): 101 hint_key = f"{idx}" 102 hint_pid[hint_key] = hint 103 self.turn_data[f'hint_pid'] = json.dumps(hint_pid) 104 105 self.turn_data["num_of_valid_actions"] = num_of_valid_actions 106 self.turn_data["score_per_turn"] = score_per_turn 107 108 def set_turn_data_after_perform(self,current_player,action,is_time_limit,turn_start_time,turn_perform_time,action_type): 109 """ 110 各ターンのアクション後のデータを設定する関数. 111 112 Args: 113 current_player (int): 現在のプレイヤーID. 114 action (str): 実行されたアクション. 115 is_time_limit (bool): タイムアウトの有無. 116 turn_start_time (int): ターン開始時刻(UNIX時間). 117 turn_perform_time (int): アクション実行時刻(UNIX時間). 118 action_type (str): アクションの種類. 119 """ 120 self.turn_data["current_pid"] = current_player 121 self.turn_data["turn_perform_unixtime"] = turn_perform_time 122 self.turn_data["turn_perform_time"] = datetime.datetime.fromtimestamp(turn_perform_time).strftime('%Y-%m-%d %H:%M:%S') 123 self.turn_data["think_time"] = turn_perform_time - turn_start_time 124 self.turn_data["is_time_limit"] = is_time_limit 125 self.turn_data["action"] = action 126 self.turn_data["action_type"] = action_type 127 128 #self.turn_data[""] = 129 self.turn_sequence.append(self.turn_data) 130 131 def get_current_timestamp(self): 132 """ 133 現在日時を 'YYYYMMDD_HHMM' 形式の文字列として取得する関数。 134 Returns: 135 str: 現在日時の文字列 136 """ 137 now = datetime.datetime.now() 138 return now.strftime('%Y%m%d_%H%M') 139 140 def set_data_game_end(self,turn,hints,miss,board,trash,deck,hands,card_knowledge,game_const,num_of_valid_actions,score_per_turn, 141 final_score,final_turns,game_start_time,game_end_time,game_end_reason): 142 """ 143 ゲーム終了時のデータを設定する関数. 144 145 Args: 146 final_score (int): 最終スコア. 147 final_turns (int): 最終ターン数. 148 game_start_time (int): ゲーム開始時刻(UNIX時間). 149 game_end_time (int): ゲーム終了時刻(UNIX時間). 150 game_end_reason (str): ゲーム終了の理由. 151 """ 152 # ゲーム終了時の状態 153 self.set_turn_data_before_perform(turn,hints,miss,board,trash,deck,hands,game_const,card_knowledge,num_of_valid_actions,score_per_turn) 154 155 # ゲーム終了時の行動の情報はNone 156 self.set_turn_data_after_perform( 157 current_player = -99999, 158 action = "GAME_END", 159 is_time_limit = 3, 160 turn_start_time = 0, 161 turn_perform_time = 0, 162 action_type= "GAME_END" 163 ) 164 165 self.game_data["final_score"] = final_score 166 self.game_data["final_turns"] = final_turns 167 self.game_data["game_start_unixtime"] = game_start_time 168 self.game_data["game_start_time"] = datetime.datetime.fromtimestamp(game_start_time)#.strftime('%Y-%m-%d %H:%M:%S') 169 self.game_data["game_end_unixtime"] = game_end_time 170 self.game_data["game_end_time"] = datetime.datetime.fromtimestamp(game_end_time)#.strftime('%Y-%m-%d %H:%M:%S') 171 self.game_data["one_game_time"] = game_end_time - game_start_time 172 self.game_data["game_end_reason"] = game_end_reason 173 self.game_data["turn_sequence"] = self.turn_sequence 174 175 def get_turn_data(self): 176 """ 177 現在のターンのデータを取得する関数. 178 179 Returns: 180 dict: 最新のターンデータ. 181 """ 182 return self.turn_data 183 184 def get_turn_sequence(self): 185 """ 186 すべてのターンのデータを取得する関数. 187 188 Returns: 189 list: これまでの全ターンのデータリスト. 190 """ 191 return self.turn_sequence 192 193 def get_game_data(self): 194 """ 195 ゲーム全体のデータを取得する関数. 196 197 Returns: 198 dict: ゲームの最終結果などを含むデータ. 199 """ 200 return self.game_data
class
GameDataManager:
6class GameDataManager(): 7 """ 8 ゲームデータを管理するクラス. 9 10 ゲームの開始時,ターンごとの情報,ゲーム終了時のデータを 11 格納・更新・取得するためのメソッドを提供する. 12 """ 13 14 def __init__(self): 15 """ 16 GameDataManager クラスのコンストラクタ. 17 ゲームデータとターンデータの初期化を行う. 18 """ 19 self.turn_data = {} # ターンごとのデータを格納する辞書 20 self.turn_sequence = [] # 1ターン目からゲーム終了ターンまでのturn_dataを格納するリスト 21 self.game_data = {} # ゲームごとのデータ+turn_sequenceが格納される辞書.最終的にdict形式でget_game_dataで取得可. 22 23 def set_data_game_start(self,players,turn_time_limit,deck): 24 """ 25 ゲーム開始時のデータを設定する関数. 26 27 Args: 28 players (list): 参加プレイヤーのリスト. 29 turn_time_limit (int): 1ターンの制限時間(秒). 30 deck (list): 使用するカードデッキ. 31 """ 32 self.game_data["num_of_players"] = len(players) 33 turn_order = {} 34 for idx, player in enumerate(players): 35 turn_order[f"{idx}"] = player.name 36 self.game_data["turn_order"] = json.dumps(turn_order) 37 self.game_data["turn_time_limit"] = turn_time_limit 38 self.game_data["deck"] = deck 39 40 def set_turn_data_before_perform(self,turn,hints,miss,board,trash,deck,hands,game_const,card_knowledge,num_of_valid_actions,score_per_turn): 41 """ 42 各ターンのアクション前のデータを設定する関数. 43 44 Args: 45 turn (int): 現在のターン数. 46 hints (int): 残りヒント数. 47 miss (int): 残りミス回数. 48 board (dict): 各色のカードのプレイ状況. 49 trash (list): 捨て札のリスト. 50 deck (list): 現在の山札のリスト. 51 hands (dict): 各プレイヤーの手札情報. 52 game_const (GameConst): ゲームの定数を保持するクラス. 53 card_knowledge (list): 各プレイヤーのカード知識データ. 54 num_of_valid_actions (int): 有効なアクション数. 55 score_per_turn (int): 現在のスコア. 56 """ 57 self.turn_data = {} 58 59 self.turn_data["turn"] = turn 60 self.turn_data["hints"] = hints 61 self.turn_data["miss"] = miss 62 self.turn_data["deck_size"] = len(deck) 63 self.turn_data["fireworks_b"] = board[game_const.BLUE] 64 self.turn_data["fireworks_g"] = board[game_const.GREEN] 65 self.turn_data["fireworks_r"] = board[game_const.RED] 66 self.turn_data["fireworks_w"] = board[game_const.WHITE] 67 self.turn_data["fireworks_y"] = board[game_const.YELLOW] 68 69 # 捨て山 70 discard_counts = {color: [0, 0, 0, 0, 0] for color in game_const.COLOR_NAMES} 71 for color_index, number in trash: 72 color = game_const.COLOR_NAMES[color_index] 73 discard_counts[color][number - 1] += 1 # 数字は1始まりなので-1してインデックス調整 74 # カウントを文字列形式に変換してturn_dataに格納 75 for color in game_const.COLOR_NAMES: 76 color_key = f"discard_{color.lower()}" 77 self.turn_data[color_key] = "-".join(map(str, discard_counts[color])) 78 79 # 手札情報 80 # handsは各プレイヤーの手札情報が格納されている辞書 {player_id: [(color, number), ...]} 81 hand_pid = {} 82 for player_id, hand in hands.items(): 83 # 各カード情報を色と数字の文字列に変換 84 hand_str = "-".join(f"{game_const.COLOR_NAMES[color]}{number}" for color, number in hand) 85 hand_key = f"{player_id}" # プレイヤー番号に基づいてturn_dataのキーを作成 86 hand_pid[hand_key] = hand_str 87 self.turn_data["hand_pid"] = json.dumps(hand_pid) 88 89 # ヒント状況 90 hint_data = [] 91 for player_knowledge in card_knowledge: 92 formatted = [] 93 for card_info in player_knowledge: 94 color = card_info['color'] if card_info['color'] else 'N' 95 rank = str(card_info['rank']+1) if card_info['rank'] is not None else '0' 96 formatted.append(f"{color}{rank}") 97 hint_data.append('-'.join(formatted)) 98 99 # 各プレイヤーのヒント状況を設定 100 hint_pid = {} 101 for idx, hint in enumerate(hint_data): 102 hint_key = f"{idx}" 103 hint_pid[hint_key] = hint 104 self.turn_data[f'hint_pid'] = json.dumps(hint_pid) 105 106 self.turn_data["num_of_valid_actions"] = num_of_valid_actions 107 self.turn_data["score_per_turn"] = score_per_turn 108 109 def set_turn_data_after_perform(self,current_player,action,is_time_limit,turn_start_time,turn_perform_time,action_type): 110 """ 111 各ターンのアクション後のデータを設定する関数. 112 113 Args: 114 current_player (int): 現在のプレイヤーID. 115 action (str): 実行されたアクション. 116 is_time_limit (bool): タイムアウトの有無. 117 turn_start_time (int): ターン開始時刻(UNIX時間). 118 turn_perform_time (int): アクション実行時刻(UNIX時間). 119 action_type (str): アクションの種類. 120 """ 121 self.turn_data["current_pid"] = current_player 122 self.turn_data["turn_perform_unixtime"] = turn_perform_time 123 self.turn_data["turn_perform_time"] = datetime.datetime.fromtimestamp(turn_perform_time).strftime('%Y-%m-%d %H:%M:%S') 124 self.turn_data["think_time"] = turn_perform_time - turn_start_time 125 self.turn_data["is_time_limit"] = is_time_limit 126 self.turn_data["action"] = action 127 self.turn_data["action_type"] = action_type 128 129 #self.turn_data[""] = 130 self.turn_sequence.append(self.turn_data) 131 132 def get_current_timestamp(self): 133 """ 134 現在日時を 'YYYYMMDD_HHMM' 形式の文字列として取得する関数。 135 Returns: 136 str: 現在日時の文字列 137 """ 138 now = datetime.datetime.now() 139 return now.strftime('%Y%m%d_%H%M') 140 141 def set_data_game_end(self,turn,hints,miss,board,trash,deck,hands,card_knowledge,game_const,num_of_valid_actions,score_per_turn, 142 final_score,final_turns,game_start_time,game_end_time,game_end_reason): 143 """ 144 ゲーム終了時のデータを設定する関数. 145 146 Args: 147 final_score (int): 最終スコア. 148 final_turns (int): 最終ターン数. 149 game_start_time (int): ゲーム開始時刻(UNIX時間). 150 game_end_time (int): ゲーム終了時刻(UNIX時間). 151 game_end_reason (str): ゲーム終了の理由. 152 """ 153 # ゲーム終了時の状態 154 self.set_turn_data_before_perform(turn,hints,miss,board,trash,deck,hands,game_const,card_knowledge,num_of_valid_actions,score_per_turn) 155 156 # ゲーム終了時の行動の情報はNone 157 self.set_turn_data_after_perform( 158 current_player = -99999, 159 action = "GAME_END", 160 is_time_limit = 3, 161 turn_start_time = 0, 162 turn_perform_time = 0, 163 action_type= "GAME_END" 164 ) 165 166 self.game_data["final_score"] = final_score 167 self.game_data["final_turns"] = final_turns 168 self.game_data["game_start_unixtime"] = game_start_time 169 self.game_data["game_start_time"] = datetime.datetime.fromtimestamp(game_start_time)#.strftime('%Y-%m-%d %H:%M:%S') 170 self.game_data["game_end_unixtime"] = game_end_time 171 self.game_data["game_end_time"] = datetime.datetime.fromtimestamp(game_end_time)#.strftime('%Y-%m-%d %H:%M:%S') 172 self.game_data["one_game_time"] = game_end_time - game_start_time 173 self.game_data["game_end_reason"] = game_end_reason 174 self.game_data["turn_sequence"] = self.turn_sequence 175 176 def get_turn_data(self): 177 """ 178 現在のターンのデータを取得する関数. 179 180 Returns: 181 dict: 最新のターンデータ. 182 """ 183 return self.turn_data 184 185 def get_turn_sequence(self): 186 """ 187 すべてのターンのデータを取得する関数. 188 189 Returns: 190 list: これまでの全ターンのデータリスト. 191 """ 192 return self.turn_sequence 193 194 def get_game_data(self): 195 """ 196 ゲーム全体のデータを取得する関数. 197 198 Returns: 199 dict: ゲームの最終結果などを含むデータ. 200 """ 201 return self.game_data
ゲームデータを管理するクラス.
ゲームの開始時,ターンごとの情報,ゲーム終了時のデータを 格納・更新・取得するためのメソッドを提供する.
GameDataManager()
14 def __init__(self): 15 """ 16 GameDataManager クラスのコンストラクタ. 17 ゲームデータとターンデータの初期化を行う. 18 """ 19 self.turn_data = {} # ターンごとのデータを格納する辞書 20 self.turn_sequence = [] # 1ターン目からゲーム終了ターンまでのturn_dataを格納するリスト 21 self.game_data = {} # ゲームごとのデータ+turn_sequenceが格納される辞書.最終的にdict形式でget_game_dataで取得可.
GameDataManager クラスのコンストラクタ. ゲームデータとターンデータの初期化を行う.
def
set_data_game_start(self, players, turn_time_limit, deck):
23 def set_data_game_start(self,players,turn_time_limit,deck): 24 """ 25 ゲーム開始時のデータを設定する関数. 26 27 Args: 28 players (list): 参加プレイヤーのリスト. 29 turn_time_limit (int): 1ターンの制限時間(秒). 30 deck (list): 使用するカードデッキ. 31 """ 32 self.game_data["num_of_players"] = len(players) 33 turn_order = {} 34 for idx, player in enumerate(players): 35 turn_order[f"{idx}"] = player.name 36 self.game_data["turn_order"] = json.dumps(turn_order) 37 self.game_data["turn_time_limit"] = turn_time_limit 38 self.game_data["deck"] = deck
ゲーム開始時のデータを設定する関数.
Arguments:
- players (list): 参加プレイヤーのリスト.
- turn_time_limit (int): 1ターンの制限時間(秒).
- deck (list): 使用するカードデッキ.
def
set_turn_data_before_perform( self, turn, hints, miss, board, trash, deck, hands, game_const, card_knowledge, num_of_valid_actions, score_per_turn):
40 def set_turn_data_before_perform(self,turn,hints,miss,board,trash,deck,hands,game_const,card_knowledge,num_of_valid_actions,score_per_turn): 41 """ 42 各ターンのアクション前のデータを設定する関数. 43 44 Args: 45 turn (int): 現在のターン数. 46 hints (int): 残りヒント数. 47 miss (int): 残りミス回数. 48 board (dict): 各色のカードのプレイ状況. 49 trash (list): 捨て札のリスト. 50 deck (list): 現在の山札のリスト. 51 hands (dict): 各プレイヤーの手札情報. 52 game_const (GameConst): ゲームの定数を保持するクラス. 53 card_knowledge (list): 各プレイヤーのカード知識データ. 54 num_of_valid_actions (int): 有効なアクション数. 55 score_per_turn (int): 現在のスコア. 56 """ 57 self.turn_data = {} 58 59 self.turn_data["turn"] = turn 60 self.turn_data["hints"] = hints 61 self.turn_data["miss"] = miss 62 self.turn_data["deck_size"] = len(deck) 63 self.turn_data["fireworks_b"] = board[game_const.BLUE] 64 self.turn_data["fireworks_g"] = board[game_const.GREEN] 65 self.turn_data["fireworks_r"] = board[game_const.RED] 66 self.turn_data["fireworks_w"] = board[game_const.WHITE] 67 self.turn_data["fireworks_y"] = board[game_const.YELLOW] 68 69 # 捨て山 70 discard_counts = {color: [0, 0, 0, 0, 0] for color in game_const.COLOR_NAMES} 71 for color_index, number in trash: 72 color = game_const.COLOR_NAMES[color_index] 73 discard_counts[color][number - 1] += 1 # 数字は1始まりなので-1してインデックス調整 74 # カウントを文字列形式に変換してturn_dataに格納 75 for color in game_const.COLOR_NAMES: 76 color_key = f"discard_{color.lower()}" 77 self.turn_data[color_key] = "-".join(map(str, discard_counts[color])) 78 79 # 手札情報 80 # handsは各プレイヤーの手札情報が格納されている辞書 {player_id: [(color, number), ...]} 81 hand_pid = {} 82 for player_id, hand in hands.items(): 83 # 各カード情報を色と数字の文字列に変換 84 hand_str = "-".join(f"{game_const.COLOR_NAMES[color]}{number}" for color, number in hand) 85 hand_key = f"{player_id}" # プレイヤー番号に基づいてturn_dataのキーを作成 86 hand_pid[hand_key] = hand_str 87 self.turn_data["hand_pid"] = json.dumps(hand_pid) 88 89 # ヒント状況 90 hint_data = [] 91 for player_knowledge in card_knowledge: 92 formatted = [] 93 for card_info in player_knowledge: 94 color = card_info['color'] if card_info['color'] else 'N' 95 rank = str(card_info['rank']+1) if card_info['rank'] is not None else '0' 96 formatted.append(f"{color}{rank}") 97 hint_data.append('-'.join(formatted)) 98 99 # 各プレイヤーのヒント状況を設定 100 hint_pid = {} 101 for idx, hint in enumerate(hint_data): 102 hint_key = f"{idx}" 103 hint_pid[hint_key] = hint 104 self.turn_data[f'hint_pid'] = json.dumps(hint_pid) 105 106 self.turn_data["num_of_valid_actions"] = num_of_valid_actions 107 self.turn_data["score_per_turn"] = score_per_turn
各ターンのアクション前のデータを設定する関数.
Arguments:
- turn (int): 現在のターン数.
- hints (int): 残りヒント数.
- miss (int): 残りミス回数.
- board (dict): 各色のカードのプレイ状況.
- trash (list): 捨て札のリスト.
- deck (list): 現在の山札のリスト.
- hands (dict): 各プレイヤーの手札情報.
- game_const (GameConst): ゲームの定数を保持するクラス.
- card_knowledge (list): 各プレイヤーのカード知識データ.
- num_of_valid_actions (int): 有効なアクション数.
- score_per_turn (int): 現在のスコア.
def
set_turn_data_after_perform( self, current_player, action, is_time_limit, turn_start_time, turn_perform_time, action_type):
109 def set_turn_data_after_perform(self,current_player,action,is_time_limit,turn_start_time,turn_perform_time,action_type): 110 """ 111 各ターンのアクション後のデータを設定する関数. 112 113 Args: 114 current_player (int): 現在のプレイヤーID. 115 action (str): 実行されたアクション. 116 is_time_limit (bool): タイムアウトの有無. 117 turn_start_time (int): ターン開始時刻(UNIX時間). 118 turn_perform_time (int): アクション実行時刻(UNIX時間). 119 action_type (str): アクションの種類. 120 """ 121 self.turn_data["current_pid"] = current_player 122 self.turn_data["turn_perform_unixtime"] = turn_perform_time 123 self.turn_data["turn_perform_time"] = datetime.datetime.fromtimestamp(turn_perform_time).strftime('%Y-%m-%d %H:%M:%S') 124 self.turn_data["think_time"] = turn_perform_time - turn_start_time 125 self.turn_data["is_time_limit"] = is_time_limit 126 self.turn_data["action"] = action 127 self.turn_data["action_type"] = action_type 128 129 #self.turn_data[""] = 130 self.turn_sequence.append(self.turn_data)
各ターンのアクション後のデータを設定する関数.
Arguments:
- current_player (int): 現在のプレイヤーID.
- action (str): 実行されたアクション.
- is_time_limit (bool): タイムアウトの有無.
- turn_start_time (int): ターン開始時刻(UNIX時間).
- turn_perform_time (int): アクション実行時刻(UNIX時間).
- action_type (str): アクションの種類.
def
get_current_timestamp(self):
132 def get_current_timestamp(self): 133 """ 134 現在日時を 'YYYYMMDD_HHMM' 形式の文字列として取得する関数。 135 Returns: 136 str: 現在日時の文字列 137 """ 138 now = datetime.datetime.now() 139 return now.strftime('%Y%m%d_%H%M')
現在日時を 'YYYYMMDD_HHMM' 形式の文字列として取得する関数。
Returns:
str: 現在日時の文字列
def
set_data_game_end( self, turn, hints, miss, board, trash, deck, hands, card_knowledge, game_const, num_of_valid_actions, score_per_turn, final_score, final_turns, game_start_time, game_end_time, game_end_reason):
141 def set_data_game_end(self,turn,hints,miss,board,trash,deck,hands,card_knowledge,game_const,num_of_valid_actions,score_per_turn, 142 final_score,final_turns,game_start_time,game_end_time,game_end_reason): 143 """ 144 ゲーム終了時のデータを設定する関数. 145 146 Args: 147 final_score (int): 最終スコア. 148 final_turns (int): 最終ターン数. 149 game_start_time (int): ゲーム開始時刻(UNIX時間). 150 game_end_time (int): ゲーム終了時刻(UNIX時間). 151 game_end_reason (str): ゲーム終了の理由. 152 """ 153 # ゲーム終了時の状態 154 self.set_turn_data_before_perform(turn,hints,miss,board,trash,deck,hands,game_const,card_knowledge,num_of_valid_actions,score_per_turn) 155 156 # ゲーム終了時の行動の情報はNone 157 self.set_turn_data_after_perform( 158 current_player = -99999, 159 action = "GAME_END", 160 is_time_limit = 3, 161 turn_start_time = 0, 162 turn_perform_time = 0, 163 action_type= "GAME_END" 164 ) 165 166 self.game_data["final_score"] = final_score 167 self.game_data["final_turns"] = final_turns 168 self.game_data["game_start_unixtime"] = game_start_time 169 self.game_data["game_start_time"] = datetime.datetime.fromtimestamp(game_start_time)#.strftime('%Y-%m-%d %H:%M:%S') 170 self.game_data["game_end_unixtime"] = game_end_time 171 self.game_data["game_end_time"] = datetime.datetime.fromtimestamp(game_end_time)#.strftime('%Y-%m-%d %H:%M:%S') 172 self.game_data["one_game_time"] = game_end_time - game_start_time 173 self.game_data["game_end_reason"] = game_end_reason 174 self.game_data["turn_sequence"] = self.turn_sequence
ゲーム終了時のデータを設定する関数.
Arguments:
- final_score (int): 最終スコア.
- final_turns (int): 最終ターン数.
- game_start_time (int): ゲーム開始時刻(UNIX時間).
- game_end_time (int): ゲーム終了時刻(UNIX時間).
- game_end_reason (str): ゲーム終了の理由.
def
get_turn_data(self):
176 def get_turn_data(self): 177 """ 178 現在のターンのデータを取得する関数. 179 180 Returns: 181 dict: 最新のターンデータ. 182 """ 183 return self.turn_data
現在のターンのデータを取得する関数.
Returns:
dict: 最新のターンデータ.