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 クラスのコンストラクタ. ゲームデータとターンデータの初期化を行う.

turn_data
turn_sequence
game_data
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: 最新のターンデータ.

def get_turn_sequence(self):
185    def get_turn_sequence(self):
186        """
187        すべてのターンのデータを取得する関数.
188        
189        Returns:
190            list: これまでの全ターンのデータリスト.
191        """
192        return self.turn_sequence

すべてのターンのデータを取得する関数.

Returns:

list: これまでの全ターンのデータリスト.

def get_game_data(self):
194    def get_game_data(self):
195        """
196        ゲーム全体のデータを取得する関数.
197        
198        Returns:
199            dict: ゲームの最終結果などを含むデータ.
200        """
201        return self.game_data

ゲーム全体のデータを取得する関数.

Returns:

dict: ゲームの最終結果などを含むデータ.