import PyAPI.structures as THUAI6 from PyAPI.Interface import IStudentAPI, ITrickerAPI, IAI from typing import Union, Final, cast, List from PyAPI.constants import Constants import queue import time class Setting: # 为假则play()期间确保游戏状态不更新,为真则只保证游戏状态在调用相关方法时不更新,大致一帧更新一次 @staticmethod def asynchronous() -> bool: return False # 选手需要依次将player0到player4的职业都定义 @staticmethod def studentType() -> List[THUAI6.StudentType]: return [THUAI6.StudentType.Athlete, THUAI6.StudentType.Teacher, THUAI6.StudentType.StraightAStudent, THUAI6.StudentType.Sunshine] @staticmethod def trickerType() -> THUAI6.TrickerType: return THUAI6.TrickerType.Assassin # 辅助函数 numOfGridPerCell: Final[int] = 1000 class AssistFunction: @staticmethod def CellToGrid(cell: int) -> int: return cell * numOfGridPerCell + numOfGridPerCell // 2 @staticmethod def GridToCell(grid: int) -> int: return grid // numOfGridPerCell class AI(IAI): def __init__(self, pID: int): self.__playerID = pID # 每帧执行一次StudentPlay或TrickerPlay(除非执行该函数超过一帧50ms),获取的信息都是这一帧的开始的状态 def StudentPlay(self, api: IStudentAPI) -> None: # 公共操作 if self.__playerID == 0: # 玩家0执行操作 return elif self.__playerID == 1: # 玩家1执行操作 return elif self.__playerID == 2: # 玩家2执行操作 return elif self.__playerID == 3: # 玩家3执行操作 return # 可以写成if self.__playerID<2之类的写法 # 公共操作 return def TrickerPlay(self, api: ITrickerAPI) -> None: selfInfo = api.GetSelfInfo() api.PrintSelfInfo() return