def __init__(self, teamname, goalie=False, connect=True): # Player attributes self.stamina = 0 self.speed = 0 self.effort = 0 self.head_angle = 0 self.tackled = 0 self.game_status = "before_kick_off" # Initial mode self.observables = [] self.side = 'l' # l or r self.unum = None # Uniform number # Instantiate parser to update info self.parser = Parser() # Set server IP # With is a safety wrapper with open("ip_address.txt", "r") as file: self.ip = file.read() if connect: # Server on port 6000 by default self.init_port = 6000 self.serverAddressPort = (self.ip, self.init_port) # Create client via UDP socket self.UDPClientSocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM) # Initialize player on team if not goalie: self.initString = "(init " + teamname + " (version 16)" + ")" else: self.initString = "(init " + teamname + " (version 16) (goalie))" self.send_init(self.initString) # Update unum then get formation self.update_info() self.std_pos = Formations.standard_formation(self.unum) self.gchar_pos = Formations.g_letter_wrapper(self.unum, self.side) self.gchar_pos2 = Formations.shift_letter(self.gchar_pos, self.side) # Set initial formation self.send_action('(move {} {})'.format(self.std_pos[0], self.std_pos[1]))