def __init__(self, pos, *, size=(220, 100), align=(0, 0)): # display self.pos = utils.top_left(pos, size, align=align) self.size = size # buttons self.buttons = { 'speed-': c.Button((self.pos[0] + self.size[0] // 2 - 75, self.pos[1] + 50), (30, 40), '', font=('src', 'timesnewroman.ttf', 22), align=(1, 1), background=(230, 230, 230)), '': c.Button((self.pos[0] + self.size[0] // 2, self.pos[1] + 50), (120, 40), 'speed×1', font=('src', 'timesnewroman.ttf', 22), align=(1, 1), background=(230, 230, 230)), 'speed+': c.Button((self.pos[0] + self.size[0] // 2 + 75, self.pos[1] + 50), (30, 40), '', font=('src', 'timesnewroman.ttf', 22), align=(1, 1), background=(230, 230, 230)) }
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 __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 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, *, msg='', size=(600, 300), input_size=(500, 50), color=(192, 192, 192)): self.args = args self.size = size self.input_size = input_size self.color = color self.active = False self.msg = msg self.buttons = { 'save': c.Button( (self.args.size[0] // 2 - 100, self.args.size[1] // 2 + 100), (140, 40), 'save', font=('src', 'timesnewroman.ttf', 22), border=1, align=(1, 1), background=(255, 255, 255)), 'back': c.Button( (self.args.size[0] // 2 + 100, self.args.size[1] // 2 + 100), (140, 40), 'back', font=('src', 'timesnewroman.ttf', 22), border=1, align=(1, 1), background=(255, 255, 255)) }
def __init__(self, args, pos, map, *, arrows=False, max_turn=0, align=(0, 0)): self.args = args self.arrows = arrows self.size = (160, 130) if self.arrows else (160, 60) self.pos = utils.top_left(pos, self.size, align=align) self.map = map self.min_turn = 0 self.max_turn = max_turn self.buttons = { 'turn-': c.Button((self.pos[0] + self.size[0] // 2 - 40, self.pos[1] + 80), (30, 40), '', border=1, align=(1, 1), background=cl.gray_0), 'turn+': c.Button((self.pos[0] + self.size[0] // 2 + 40, self.pos[1] + 80), (30, 40), '', border=1, align=(1, 1), background=cl.gray_0) } if self.arrows else {}
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 = { 'new': c.Button((self.args.size[0] // 2, 300), (600, 80), 'New Game', font=('src', 'timesnewroman.ttf', 25), align=(1, 1), background=(210, 210, 210)), 'save': c.Button((self.args.size[0] // 2, 400), (600, 80), 'Load Saved Game', font=('src', 'timesnewroman.ttf', 25), align=(1, 1), background=(210, 210, 210)), 'replay': c.Button((self.args.size[0] // 2, 500), (600, 80), 'Replay', font=('src', 'timesnewroman.ttf', 25), align=(1, 1), background=(210, 210, 210)), 'quit': c.Button((self.args.size[0] // 2, 600), (600, 80), 'Exit', font=('src', 'timesnewroman.ttf', 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): 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((self.args.size[0] // 2, 300), (600, 80), '1 v 1', font=('src', 'timesnewroman.ttf', 25), align=(1, 1), background=(210, 210, 210)), '2': c.Button((self.args.size[0] // 2, 400), (600, 80), '2 v 2', font=('src', 'timesnewroman.ttf', 25), align=(1, 1), background=(210, 210, 210)), 'back': c.Button((self.args.size[0] // 2, 500), (600, 80), 'Back', font=('src', 'timesnewroman.ttf', 25), align=(1, 1), background=(210, 210, 210)), }
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, 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 __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))
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 __init__(self, mode, pos, *, buttons=('save', 'quit'), size=(200, 220), align=(0, 0)): # display self.pos = utils.top_left(pos, size, align=align) self.size = size # game self.mode = mode self.round = 1 self.sides = ['red', 'blue'] if self.mode == '1' else [ 'red', 'yellow', 'blue', 'green' ] self.colors = { 'red': (255, 0, 0), 'yellow': (204, 204, 0), 'blue': (0, 0, 255), 'green': (0, 255, 0) } self.current = 0 self.winner = [] # buttons self.buttons = { buttons[0]: c.Button((self.pos[0] + self.size[0] // 2, self.pos[1] + 110), (150, 40), buttons[0], font=('src', 'timesnewroman.ttf', 22), align=(1, 0), background=(230, 230, 230)), buttons[1]: c.Button((self.pos[0] + self.size[0] // 2, self.pos[1] + 160), (150, 40), buttons[1], font=('src', 'timesnewroman.ttf', 22), align=(1, 0), background=(230, 230, 230)), }
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, mode): self.args = args self.mode = mode self.threshold = 42 self.pos = (0, 0) self.background = c.Component(lambda ui: ui.show_div( (0, 0), self.args.size, color=(60, 179, 113))) self.buttons = { 'p1': c.Button((self.args.size[0] // 2 - 280, 260), (360, 180), 'Human', font=('src', 'timesnewroman.ttf', 30), align=(1, 1), background=(255, 204, 204)), 'p2': c.Button((self.args.size[0] // 2 + 280, 260), (360, 180), 'Human', font=('src', 'timesnewroman.ttf', 30), align=(1, 1), background=(204, 204, 255)), '-': c.Button((self.args.size[0] // 2 - 300, 460), (50, 70), '', font=('src', 'timesnewroman.ttf', 25), align=(0, 1), background=(210, 210, 210)), 'threshold': c.Button((self.args.size[0] // 2, 460), (470, 70), f'Red\'s winning threshold: {self.threshold}', font=('src', 'timesnewroman.ttf', 22), align=(1, 1), background=(210, 210, 210)), '+': c.Button((self.args.size[0] // 2 + 300, 460), (50, 70), '', font=('src', 'timesnewroman.ttf', 25), align=(2, 1), background=(210, 210, 210)), 'play': c.Button((self.args.size[0] // 2, 550), (600, 70), 'Play', font=('src', 'timesnewroman.ttf', 25), align=(1, 1), background=(210, 210, 210)), 'back': c.Button((self.args.size[0] // 2, 640), (600, 70), 'Back', font=('src', 'timesnewroman.ttf', 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 = { '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, log, *, size=(200, 100), align=(0, 0)): # display self.pos = utils.top_left(pos, size, align=align) self.size = size # log self.log = log # buttons self.buttons = { 'next': c.Button((self.pos[0] + self.size[0] // 2, self.pos[1] + 30), (150, 40), 'skip', font=('src', 'timesnewroman.ttf', 22), align=(1, 0), background=(230, 230, 230)), }
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, mode): self.args = args self.bar_height = 100 self.mode = mode 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.saves = [ SavedFile(file[:file.index('.')], self.mode, (800, 120)) for file in os.listdir(os.path.join('.', self.mode)) if file.endswith('.cns' if self.mode == 'save' else '.cnsr') ] self.pan = 0 self.button = c.Button( (self.args.size[0] // 2, self.args.size[1] - self.bar_height // 2), (200, 50), 'back', font=('src', 'timesnewroman.ttf', 22), align=(1, 1), background=(210, 210, 210))
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)