def __init__(self, args): self.args = args self.background = c.Component(lambda ui: ui.show_div( (0, 0), self.args.size, color=(60, 179, 113))) self.buttons = { 'new': c.Button((self.args.size[0] // 2, 310), (600, 80), 'New Game', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), 'join': c.Button((self.args.size[0] // 2, 410), (600, 80), 'Join Game', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), 'replay': c.Button((self.args.size[0] // 2, 510), (600, 80), 'Replay', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), 'quit': c.Button((self.args.size[0] // 2, 610), (600, 80), 'Exit', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), }
def __init__(self, args): self.args = args self.background = c.Component(lambda ui: ui.show_div( (0, 0), self.args.size, color=(60, 179, 113))) self.buttons = { 'sing': c.Button((self.args.size[0] // 2, 360), (600, 80), 'Single Player', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), 'mult': c.Button((self.args.size[0] // 2, 460), (600, 80), 'Multi-Player', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), 'back': c.Button((self.args.size[0] // 2, 560), (600, 80), 'Back', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), }
def __init__(self, args): # arguments self.args = args # regex self.regex = r'(([1-9]?[0-9])|(1[0-9][0-9])|(2[0-4][0-9])|(25[0-5]))' self.regex_one = r'^' + self.regex + r'\.?$' self.regex_two = r'^' + self.regex + r'\.' + self.regex + r'\.?$' self.regex_three = r'^(' + self.regex + r'\.){2}' + self.regex + r'\.?$' self.regex_full = r'^(' + self.regex + r'\.){3}' + self.regex + r'$' # socket self.server_ip = '' self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.client.settimeout(1.0) # gui self.background = c.Component(lambda ui: ui.show_div((0, 0), self.args.size, color=(60, 179, 113))) self.error_msg = None self.error_msg_clock = sw.Stopwatch() self.buttons = { 'connect': c.Button( (self.args.size[0] // 2, 540), (400, 60), 'connect', font=f.tnr(22), align=(1, 1), background=(210, 210, 210) ), 'back': c.Button( (self.args.size[0] // 2, 640), (400, 60), 'back', font=f.tnr(22), align=(1, 1), background=(210, 210, 210) ), }
def __init__(self, args): self.args = args # display self.bar_height = 100 self.margin = 40 self.padding = 20 self.background = c.Component(lambda ui: ui.show_div((0, 0), self.args.size, color=(60, 179, 113))) self.pan = 0 # saves and buttons self.saves = [ SavedFile(self.args, file[:-4]) for file in os.listdir(os.path.join(self.args.save_path, 'replay')) if file.endswith('.gnr') ] self.saves.sort(key=lambda sf: [not sf.err, re.split(r'[\-_]', sf.date), sf.name], reverse=True) self.buttons = { 'open-location': c.Button( (self.args.size[0] - 100, 100), (120, 60), 'open location', font=f.tnr(15), save='tnr-15', align=(1, 1), background=(210, 210, 210)), 'back': c.Button( (self.args.size[0] // 2, self.args.size[1] - self.bar_height // 2), (200, 50), 'back', font=f.tnr(22), save='tnr-22', align=(1, 1), background=(210, 210, 210)) }
def show(self, ui): self.background.show(ui) ui.show_text((self.args.size[0] // 2, 100), f'IP: {self.ip}', f.cambria(60), color=(0, 0, 128), align=(1, 1)) # show connected ips ui.show_text((self.args.size[0] // 2, 180), 'client ip', f.tnr(30), color=(128, 0, 0), align=(1, 1)) for i, client in enumerate(self.clients): ui.show_text((self.args.size[0] // 2, 180 + (i + 1) * 60), client['ip'], f.tnr(30), align=(1, 1)) # show buttons for name in self.buttons: self.buttons[name].show(ui)
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 show(self, ui): self.background.show(ui) # show input box ui.show_div((self.args.size[0] // 2, 300), (600, 80), color=(255, 255, 255), align=(1, 1)) ui.show_div((self.args.size[0] // 2, 300), (600, 80), border=2, color=(0, 0, 0), align=(1, 1)) if self.server_ip != '': ui.show_text((self.args.size[0] // 2, 300), self.server_ip, f.cambria(25), save='cambria-25', align=(1, 1)) # show buttons for name in self.buttons: self.buttons[name].show(ui) # show error message if self.error_msg is not None: ui.show_text((self.args.size[0] // 2, 400), self.error_msg, f.tnr(20), color=(128, 0, 0), save='tnr-20-err', align=(1, 1))
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.id = None self.total = None 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, 640), (600, 80), 'exit room', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), }
def show(self, ui): self.background.show(ui) ui.show_text((self.args.size[0] // 2, 100), f'{self.displayed_room_name}', f.cambria(60), color=(0, 0, 128), align=(1, 1)) # show ip title ui.show_text((self.args.size[0] // 2, 180), 'client ip', f.tnr(30), color=(128, 0, 0), align=(1, 1)) ui.show_div((self.args.size[0] // 2, 210), (800, 352), color=(191, 220, 187), align=(1, 0)) # show ip lists for i in range(4): row = i % 4 pos = (self.args.size[0] // 2, 254 + 84 * row) color = self.player_colors[i] if i == self.id and i < len(self.ip_list): ui.show_div(pos, (368, 56), color=color, align=(1, 1)) ui.show_div((pos[0], pos[1] + 28), (368, 12), color=cl.multiply(color, 0.8), align=(1, 0)) ui.show_text( pos, self.ip_list[i], f.tnr_bold(25), color=cl.white, save='tnr-bold-25-white', align=(1, 1)) elif i < len(self.ip_list): ui.show_div(pos, (368, 56), color=cl.white, align=(1, 1)) ui.show_div((pos[0], pos[1] + 28), (368, 12), color=color, align=(1, 0)) ui.show_text( pos, self.ip_list[i], f.tnr_bold(25), save='tnr-bold-25', align=(1, 1)) else: ui.show_div(pos, (368, 56), color=cl.white, align=(1, 1)) ui.show_div((pos[0], pos[1] + 28), (368, 12), color=cl.white, align=(1, 0)) for name in self.buttons: self.buttons[name].show(ui)
def __init__(self, args, mode): # arguments self.args = args self.mode = mode # server and client self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) hostname = socket.gethostname() if not hostname.endswith('.local'): hostname += '.local' fqdn_hostname = socket.getfqdn() if not fqdn_hostname.endswith('.local'): fqdn_hostname += '.local' try: all_ips = socket.gethostbyname_ex(hostname)[2] except: all_ips = socket.gethostbyname_ex(fqdn_hostname)[2] ips = [ ip for ip in all_ips if utils.is_private_ip(ip) ] self.ip = ips[0] if len(ips) > 0 else '127.0.0.1' self.server.bind((self.ip, 5050)) self.server.settimeout(1.0) self.server.listen() self.clients = [] # {ip, port, client} self.status = {'running': True} 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, 600), (300, 60), 'start game', font=f.tnr(23), align=(1, 1), background=(210, 210, 210) ), 'back': c.Button( (self.args.size[0] // 2 + 300, 600), (300, 60), 'close room', font=f.tnr(23), align=(1, 1), background=(210, 210, 210) ), }
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 show(self, ui, *, pan=(0, 0)): ui.show_div(self.pos, self.size, color=self.color, pan=pan) # show id if self.id is not None: if self.id_img is None: self.id_img = ui.get_text_img(str(self.id), font=f.tnr(25), color=(255, 255, 255)) center = (self.pos[0] + self.size[0] // 2, self.pos[1] + self.size[1] // 2) ui.show_img(center, self.id_img, pan=pan, align=(1, 1))
def show(self, ui): self.background.show(ui) ui.show_text((self.args.size[0] // 2, 100), f'IP: {self.ip}', f.cambria(60), color=(0, 0, 128), align=(1, 1)) # show ip title ui.show_text((self.args.size[0] // 2, 180), 'client ip', f.tnr(30), color=(128, 0, 0), align=(1, 1)) ui.show_div((self.args.size[0] // 2, 210), (800, 352), color=(191, 220, 187), align=(1, 0)) # show ip lists ip_list = [self.ip] + [client['ip'] for client in self.clients] for i in range(8): row, col = i % 4, i // 4 pos = (self.args.size[0] // 2 - 200 + 400 * col, 254 + 84 * row) color = self.player_colors[i] if i == 0: ui.show_div(pos, (368, 56), color=color, align=(1, 1)) ui.show_div((pos[0], pos[1] + 28), (368, 12), color=cl.multiply(color, 0.8), align=(1, 0)) ui.show_text(pos, ip_list[i], f.tnr_bold(25), color=cl.white, save='tnr-bold-25-white', align=(1, 1)) elif i < len(ip_list): ui.show_div(pos, (368, 56), color=cl.white, align=(1, 1)) ui.show_div((pos[0], pos[1] + 28), (368, 12), color=color, align=(1, 0)) ui.show_text(pos, ip_list[i], f.tnr_bold(25), save='tnr-bold-25', align=(1, 1)) else: ui.show_div(pos, (368, 56), color=cl.white, align=(1, 1)) ui.show_div((pos[0], pos[1] + 28), (368, 12), color=cl.white, align=(1, 0)) # show buttons for name in self.buttons: self.buttons[name].show(ui)
def __init__(self, args, mode): # arguments self.args = args self.mode = mode # server and client self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.ip = [ ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if utils.is_private_ip(ip) ][0] self.server.bind((self.ip, 5050)) self.server.settimeout(1.0) self.server.listen() self.clients = [] # {ip, port, client} self.status = {'running': True} 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, 600), (300, 60), 'start game', font=f.tnr(23), align=(1, 1), background=(210, 210, 210)), 'back': c.Button((self.args.size[0] // 2 + 300, 600), (300, 60), 'close room', font=f.tnr(23), align=(1, 1), background=(210, 210, 210)), }
def __init__(self, pos, *, buttons=tuple(['quit']), size=(300, 240), align=(0, 0)): # display self.pos = utils.top_left(pos, size, align=align) self.size = size self.win = None # buttons self.buttons = {} x = 140 for name in buttons: self.buttons[name] = c.Button( (self.pos[0] + self.size[0] // 2, self.pos[1] + x), (200, 40), name, font=f.tnr(22), align=(1, 0), background=(230, 230, 230) ) x += 60
def __init__(self, pos, *, buttons=('continue', 'quit'), size=(300, 240), align=(0, 0)): # display self.pos = utils.top_left(pos, size, align=align) self.size = size self.active = False # buttons self.buttons = {} x = 100 for name in buttons: self.buttons[name] = c.Button( (self.pos[0] + self.size[0] // 2, self.pos[1] + x), (200, 40), name, font=f.tnr(22), align=(1, 0), background=(230, 230, 230) ) x += 60
def __init__(self, args): self.args = args self.background = c.Component(lambda ui: ui.show_div((0, 0), self.args.size, color=(60, 179, 113))) self.buttons = { 'new': c.Button( (self.args.size[0] // 2, 360), (600, 80), 'New Game', font=f.tnr(25), align=(1, 1), background=(210, 210, 210) ), 'join': c.Button( (self.args.size[0] // 2, 460), (600, 80), 'Join Game', font=f.tnr(25), align=(1, 1), background=(210, 210, 210) ), 'quit': c.Button( (self.args.size[0] // 2, 560), (600, 80), 'Exit', font=f.tnr(25), align=(1, 1), background=(210, 210, 210) ), 'reload_settings': c.Button( (self.args.size[0] - 140, self.args.size[1] - 3), (280, 30), '>> Reload settings <<', font=f.get_font('courier-prime', 20), align=(1, 2), color=(None, (255, 255, 255)), background=None, border=1 ) } self.settings_reloaded = False self.timer = sw.Stopwatch()
def __init__(self, pos, size, text, *, font=f.tnr(25), border=2, color=((0, 0, 0), (0, 0, 0)), align=(0, 0), background=None): self.pos = utils.top_left(pos, size, align=align) self.size = size self.text = text self.font = font self.border = border self.color = color self.align = align self.background = background
def __init__(self, args): self.args = args self.background = c.Component(lambda ui: ui.show_div((0, 0), self.args.size, color=(60, 179, 113))) self.btn_slots = [ (self.args.size[0] // 2, 150), (self.args.size[0] // 2, 270), (self.args.size[0] // 2, 390), (self.args.size[0] // 2, 510) ] self.beacon = DiscoveryBeacon('224.0.3.101', list(range(5000, 5100)), b'battleofsnakes') self.beacon.start() self.rooms = [] self.buttons = { 'back': c.Button( (self.args.size[0] // 2, 650), (400, 60), 'Back', font=f.tnr(25), save='tnr-25', align=(1, 1), background=(210, 210, 210)), } self.refresh() self.timer = sw.Stopwatch() self.timer.start()
def __init__(self, args, pos, size, choices=('continue', 'quit'), *, align=(0, 0)): self.args = args self.size = size self.pos = utils.top_left(pos, self.size, align=align) self.buttons = { name: c.Button((self.pos[0] + self.size[0] // 2, self.pos[1] + pos), (200, 40), name, font=f.tnr(22), border=1, align=(1, 0), background=(230, 230, 230)) for name, pos in zip(choices, range(100, 100 + 60 * len(choices), 60)) } self.active = False
def __init__(self, args): self.args = args self.pos = (0, 0) self.background = c.Component(lambda ui: ui.show_div( (0, 0), self.args.size, color=(60, 179, 113))) self.buttons = { '1': c.Button((240, 250), (80, 120), '1', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '2': c.Button((440, 250), (80, 120), '2', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '3': c.Button((640, 250), (80, 120), '3', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '4': c.Button((840, 250), (80, 120), '4', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '5': c.Button((1040, 250), (80, 120), '5', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '6': c.Button((240, 400), (80, 120), '6', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '7': c.Button((440, 400), (80, 120), '7', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '8': c.Button((640, 400), (80, 120), '8', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '9': c.Button((840, 400), (80, 120), '9', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), '10': c.Button((1040, 400), (80, 120), '10', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), 'mode': c.Button((self.args.size[0] // 2, 540), (200, 60), 'single player', font=f.tnr(20), align=(1, 1), background=(210, 210, 210)), 'back': c.Button((self.args.size[0] // 2, 640), (600, 80), 'Back', font=f.tnr(25), align=(1, 1), background=(210, 210, 210)), } self.scores = sr.ScoreReader.load(args.save_path)
def __init__(self, args, pos, address, name, *, align=(0, 0)): self.args = args self.size = [600, 100] self.pos = utils.top_left(pos, self.size, align=align) self.ip = address[0] self.port = address[1] self.name = name self.join_btn = c.Button(utils.add(self.pos, (550, 50)), (80, 60), 'Join', font=f.tnr(20), border=1, align=(1, 1))