adding bingo module
|
@ -0,0 +1,55 @@
|
|||
import glob
|
||||
from PIL import Image
|
||||
from random import randrange
|
||||
from uuid import uuid4
|
||||
|
||||
class Bingo:
|
||||
"""Class which allows creation and cleanup of F1 bingo card images."""
|
||||
def __init__(self):
|
||||
self.LAYOUT_WIDTH = 88
|
||||
self.X_OFFSET = 10
|
||||
self.Y_OFFSET = 110
|
||||
self.SQUARES_PATH = "bingo_images/squares/*.png"
|
||||
self.FREE_SQUARE_PATH = "bingo_images/free_space.png"
|
||||
self.BLANK_CARD_PATH = "bingo_images/card_blank.png"
|
||||
self.TEMP_FOLDER = "bingo_images/temp/"
|
||||
|
||||
self.square_files = glob.glob(self.SQUARES_PATH)
|
||||
|
||||
def get_card(self):
|
||||
used_files = set()
|
||||
|
||||
with Image.open(self.BLANK_CARD_PATH) as card_img:
|
||||
card_img.load()
|
||||
card_img = card_img.convert('RGBA')
|
||||
|
||||
# Fill the grid
|
||||
for y in range(5):
|
||||
for x in range(5):
|
||||
square_file = ""
|
||||
# If this is the center square, use the free square
|
||||
if x == 2 and y == 2:
|
||||
square_file = self.FREE_SQUARE_PATH
|
||||
|
||||
# otherwise, find a random file that hasn't been used yet
|
||||
else:
|
||||
rand_file_idx = randrange(len(self.square_files))
|
||||
while rand_file_idx in used_files:
|
||||
rand_file_idx = randrange(len(self.square_files))
|
||||
|
||||
square_file = self.square_files[rand_file_idx]
|
||||
used_files.add(rand_file_idx)
|
||||
|
||||
with Image.open(square_file) as square:
|
||||
|
||||
position = (self.X_OFFSET + (x * self.LAYOUT_WIDTH),
|
||||
self.Y_OFFSET + (y * self.LAYOUT_WIDTH))
|
||||
|
||||
card_img.paste(square, position, square)
|
||||
|
||||
# Write image to temp file
|
||||
outfile = "".join((self.TEMP_FOLDER, str(uuid4()), ".png"))
|
||||
print(f"{outfile=}")
|
||||
card_img.save(outfile)
|
||||
return outfile
|
||||
|
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.3 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 3.5 KiB |
After Width: | Height: | Size: 3.4 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.1 KiB |
After Width: | Height: | Size: 3.5 KiB |