|
- #!/bin/python3
- #
- # gamepicker.py - pick games for Novemeber 2020 sub crown
- #
- # Two files provided:
- # - subs.txt -- 8 subscribers
- # - teams.txt -- 30 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 Mar 2021 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 = 10
-
- 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)/SUBNUMROWS)
- 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()
|