#!/bin/python3 # # gamepicker.py - pick games for Novemeber 2020 sub crown # # Two files provided: # - subs.txt -- 8 subscribers # - teams.txt -- 26 teams # # Pseudocode: # Split screen in 1:3 # - LHS = subscriber+team space # - RHS = teams space # Set BG image # Init seed # Lay out teams in order (3 cols) # On keypress, show subscriber name & show team random picker (via highlight) # Once picked, add subscriber + team to LHS import sys import random import pygame pygame.init() random.seed("BERTIE BEEF BAGGIO") HIGHLIGHTEVENT = pygame.USEREVENT + 1 # user specified event CLEAREVENT = pygame.USEREVENT + 2 # user specified event CHOOSEEVENT = pygame.USEREVENT + 3 # user specified event SIZE = WIDTH, HEIGHT = 1920, 1080 BGIMG = pygame.image.load("sub_crown_bg_2.png") FONT = pygame.font.SysFont("Fetamont", 50) SUBFONTHEIGHT = 35 SUBFONT = pygame.font.SysFont("Fetamont", SUBFONTHEIGHT) OFFWHITE = (224, 224, 224) HIGHLIGHT = (255, 209, 0) BLUE = (20, 25, 153) RED = (186, 20, 31) PURPLE = (121, 35, 158) screen = pygame.display.set_mode(SIZE) pygame.display.set_caption("Sub Crown Nov 2020 Team Picker") # Set up team text positioning references # # 26 teams so 3 cols, 9 rows COLSTART = int(WIDTH/3) COLWIDTH = int((WIDTH-COLSTART)/3) ROWSTART = int(HEIGHT/12) ROWHEIGHT = int((HEIGHT-ROWSTART)/10) TEAMSFILE = "teams.txt" TEAMNUMCOLS = 3 TEAMNUMROWS = 9 TEAMCOLS = [] TEAMROWS = [] for i in range(TEAMNUMCOLS): print(COLSTART + i*COLWIDTH) TEAMCOLS.append(COLSTART + i*COLWIDTH) for i in range(TEAMNUMROWS): TEAMROWS.append(ROWSTART + i*ROWHEIGHT) print(ROWSTART + i*ROWHEIGHT) SUBSFILE = "subs.txt" SUBS = [] SUBNUMROWS = 8 SUBROWHEIGHT = int((HEIGHT-ROWSTART)/9) SUBROWS = [] for i in range(SUBNUMROWS): SUBROWS.append(ROWSTART + i*SUBROWHEIGHT) TEAMS = [] # List of Team class Team(object): """Teams for iteration""" def __init__(self, team, x, y): self.team = team self.x = x self.y = y self.colour = OFFWHITE def highlight(self): self.colour = HIGHLIGHT def unhighlight(self): self.colour = OFFWHITE def choose(self): self.colour = RED def draw(self): draw_text(self.team, FONT, self.colour, self.y, self.x) class Sub(object): """Like Team""" def __init__(self, sub): self.sub = sub self._sub = "" self.team = "" self.x = 20 self.y = 0 def draw(self): if self._sub != "": draw_text(self.sub, SUBFONT, BLUE, self.x, self.y) if self.team != "": draw_text(self.team, SUBFONT, PURPLE, self.x, int(self.y+SUBFONTHEIGHT)) class Highlighter(object): """For highlighting teams randomly""" def __init__(self): self.team = None self.iterations = 0 self.max = 70 self.lastchoice = -1 def highlight(self): if self.lastchoice >= 0: TEAMS[self.lastchoice].unhighlight() self.iterations += 1 if self.iterations >= self.max: # Choosing time self.lastchoice = -1 TEAMS[-1].choose() pygame.time.set_timer(HIGHLIGHTEVENT, 0) # Disable highlight pygame.time.set_timer(CHOOSEEVENT, 5000, True) # make choice self.iterations = 0 else: self.lastchoice = random.randrange(len(TEAMS)) TEAMS[self.lastchoice].highlight() def draw_text(text, font, text_col, x, y): img = font.render(text, True, text_col) screen.blit(img, (x, y)) def setup_team_board(): """Grab teams from text file and set their positions""" with open(TEAMSFILE, "r") as fh: for row in range(TEAMNUMROWS): for col in range(TEAMNUMCOLS): name = fh.readline().strip() if name == "": continue print("Adding {} at {},{}".format(name, TEAMCOLS[col], TEAMROWS[row])) TEAMS.append(Team(name, TEAMROWS[row], TEAMCOLS[col])) def setup_subs(): """Check positioning, not actually used""" for i in range(len(SUBS)): # print("drawing {} at {},{}".format(SUBS[i], 20, SUBROWS[i])) SUBS[i].y = SUBROWS[i] # Prep for line in open(SUBSFILE, "r"): sub = line.strip() SUBS.append(Sub(sub)) print(SUBS) random.shuffle(SUBS) setup_team_board() random.shuffle(TEAMS) setup_subs() HIGHLIGHTER = Highlighter() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() elif event.type == pygame.KEYDOWN: if event.key == 113: # Q pygame.quit() sys.exit() elif event.key == 115: TEAMS[5].highlight() elif event.key == 100: # D for debug for sub in SUBS: if sub.team == "": sub.team = TEAMS.pop().team if sub._sub == "": sub._sub = sub.sub elif event.key == 32: # Display who we're choosing for for sub in SUBS: if sub._sub == "": sub._sub = sub.sub break # Start the "who's it going to pick?" animation pygame.time.set_timer(HIGHLIGHTEVENT, 100) # every 100ms print(event.key) elif event.type == HIGHLIGHTEVENT: HIGHLIGHTER.highlight() elif event.type == CLEAREVENT: for team in TEAMS: team.unhighlight() elif event.type == CHOOSEEVENT: for sub in SUBS: if sub.team == "": sub.team = TEAMS.pop().team pygame.time.set_timer(CLEAREVENT, 100, True) break screen.blit(BGIMG, (0, 0)) for team in TEAMS: team.draw() for sub in SUBS: sub.draw() pygame.display.update()