def __init__(self, args, name): # display self.args = args self.name = name self.size = (800, 120) self.player_colors = cl.get_player_colors() # game self.replay = None self.date = '' self.num = 0 self.turn = 0 self.winner = None self.status = None self.init_status = None self.err = False try: self.replay = sv.Saver.load(os.path.join(self.args.save_path, 'replay', f'{self.name}.gnr'), lines=1) self.date = self.replay['date'] self.num = self.replay['num'] self.turn = self.replay['turn'] self.winner = self.replay['winner'] except: print(f'ERROR loading saved file: {self.name}.gnr') self.err = True
def __init__(self, args): # arguments self.args = args # server and client self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) print(socket.gethostname()) self.ip = '127.0.0.1' try: ips = [ ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if utils.is_private_ip(ip) ] self.ip = ips[0] if len(ips) > 0 else '127.0.0.1' except socket.gaierror as e: print(e) self.server.bind((self.ip, 5051)) self.server.settimeout(1.1) self.server.listen() self.clients = [] # {ip, port, client} self.status = {'running': True} self.player_colors = cl.get_player_colors() self.thread = Thread(target=self.add_clients(self.status), name='add-clients', daemon=True) self.thread.start() # gui self.background = c.Component(lambda ui: ui.show_div( (0, 0), self.args.size, color=(60, 179, 113))) self.buttons = { 'play': c.Button((self.args.size[0] // 2 - 300, 620), (300, 60), 'start game', font=f.tnr(23), save='tnr-23', align=(1, 1), background=(210, 210, 210)), 'back': c.Button((self.args.size[0] // 2 + 300, 620), (300, 60), 'close room', font=f.tnr(23), save='tnr-23', align=(1, 1), background=(210, 210, 210)), }
def __init__(self, args, mode, init_status=None): self.args = args self.date = datetime.utcnow().strftime('%Y-%m-%d_%H-%M-%S') self.name = self.date self.mode = mode # display player_colors = cl.get_player_colors()[:self.mode['num']] self.players = [{ 'land': 0, 'army': 0, 'color': player_colors[id] } for id in range(self.mode['num'])] self.scoreboard = sb.Scoreboard(self.args, (self.args.size[0] - 10, 10), self.players, align=(2, 0)) self.map = m.Map(self.args, self.args.get_pos(1, 1), self.players, self.mode['id'], map_status=init_status, align=(1, 1)) self.command = cm.Command(self.args, self.players, self.mode['id']) self.player = h.Human(self.args, self.map) self.turn_displayer = td.TurnDisplayer(self.args, (10, 10), self.map, align=(0, 0)) # record self.status_record = [self.map.get_status(('owner', 'num', 'terrain'))] # connect self.status = { 'connected': [False if id == 0 else True for id in range(self.mode['num'])], 'running': True, 'winner': None, } self.thread_recv = [] for id in range(1, self.mode['num']): new_thread = Thread(target=self.receive(id), name=f'recv-{id}', daemon=True) new_thread.start() self.thread_recv.append(new_thread) self.sends(json.dumps({'tag': 'init', 'status': self.map.init_status}))
def __init__(self, args, room_name, address, server=None): # arguments self.args = args self.mode = None self.room_name = room_name self.displayed_room_name = (self.room_name[:17] + '......') if len(self.room_name) > 20 else self.room_name self.server_ip = address[0] self.port = address[1] self.server = server # client self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.client.settimeout(0.3) self.client.connect((self.server_ip, self.port)) # receive from server print('CLIENT ENTER room...') self.status = 'wait' self.id = None self.ip_list = [] self.thread = Thread(target=self.wait_info, name='wait-info') self.thread.start() # gui self.background = c.Component(lambda ui: ui.show_div((0, 0), self.args.size, color=(60, 179, 113))) if self.server is None: self.buttons = { 'back': c.Button( (self.args.size[0] // 2, 630), (600, 80), 'Exit Room', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), } else: self.buttons = { 'play': c.Button( (self.args.size[0] // 2 - 300, 630), (300, 60), 'Play', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), 'back': c.Button( (self.args.size[0] // 2 + 300, 630), (300, 60), 'Close Room', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), } self.player_colors = cl.get_player_colors()
def __init__(self, args, mode): self.args = args self.mode = mode # display player_colors = cl.get_player_colors()[:self.mode['num']] self.players = [{ 'land': 0, 'army': 0, 'color': player_colors[id] } for id in range(self.mode['num'])] self.scoreboard = sb.Scoreboard(self.args, (self.args.size[0] - 10, 10), self.players, align=(2, 0)) self.command = cm.Command(self.args, self.players, self.mode['id']) self.map_status = None # connect self.status = { 'connected': True, 'running': True, 'winner': None, 'paused': False } self.thread_recv = Thread(target=self.receive, name='recv', daemon=True) self.thread_recv.start() # map while self.map_status is None: time.sleep(0.01) self.map = m.Map(self.args, self.args.get_pos(1, 1), self.players, self.mode['id'], map_status=self.map_status, align=(1, 1)) self.player = h.Human(self.args, self.map) self.turn_displayer = td.TurnDisplayer(self.args, (10, 10), self.map, align=(0, 0))
def __init__(self, args, replay): self.args = args self.replay = replay self.name = '' # display player_colors = cl.get_player_colors()[:self.replay['num']] self.players = [{ 'land': 0, 'army': 0, 'color': player_colors[id] } for id in range(self.replay['num'])] self.scoreboard = sb.Scoreboard(self.args, (self.args.size[0] - 10, 10), self.players, align=(2, 0)) self.replay_menu = rm.ReplayMenu( (self.args.size[0] - 10, self.args.size[1] - 10), align=(2, 2)) self.map = m.Map(self.args, self.args.get_pos(1, 1), self.players, 0, map_status=self.replay['init-status'], align=(1, 1)) self.map.set_status( { 'visible': [True for _ in range(self.map.dim[0] * self.map.dim[1])] }, refresh=False) self.command = cm.Command(self.args, self.players, 0) self.player = rb.ReplayBot(self.args, self.map, self.replay['turn']) self.turn_displayer = td.TurnDisplayer(self.args, (10, 10), self.map, arrows=True, max_turn=self.replay['turn']) # status self.status = {'running': True} self.threshold = 0.5 self.execute(['pause'])
def __init__(self, args, server_ip, client): # arguments self.args = args self.mode = None self.server_ip = server_ip self.client = client # server and client print('CLIENT ENTER room...') self.status = 'wait' self.id = None self.ip_list = [] self.thread = Thread(target=self.wait_info, name='wait-info') self.thread.start() # gui self.background = c.Component(lambda ui: ui.show_div((0, 0), self.args.size, color=(60, 179, 113))) self.buttons = { 'back': c.Button( (self.args.size[0] // 2, 630), (600, 80), 'exit room', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210) ), } self.player_colors = cl.get_player_colors()
def __init__(self, args, mode, id, client): self.args = args self.mode = mode # {'num-players', 'size', 'threshold', 'max-apples'} self.id = id self.client = client # map and players self.map = m.Map(self.args, self.args.get_pos(1, 1), dim=self.mode['size'], max_apples=self.mode['max-apples'], align=(1, 1)) player_colors = cl.get_player_colors() init_grids = utils.get_init_grids(self.mode['size']) self.players = [ p.Player(self.args, i, player_colors[i], init_grids[self.id]) for i in range(self.mode['num-players']) ] self.map.focus_board(self.players[self.id].head()) # thread self.send(json.dumps({'tag': 'start-game'})) threading.Thread(target=self.receive, name='client-recv', daemon=True).start()