-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathBingo.py
99 lines (74 loc) · 2.8 KB
/
Bingo.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from PIL import Image, ImageDraw, ImageFont
from random import randrange, choice
def BingoNum():
"""Randomly generates 15 unique numbers between 1 and 90"""
Numbers = []
# print(Numbers)
tens = []
for i in range(9):
tens.append(1)
n = (i) * 10 + randrange(10) # Generates one number in each bracket of tens.
if (
n == 0
): # Exception to account for one additional number in the 80's bracket, and one less in the 00's bracket.
n = 90
Numbers.append(n)
while len(Numbers) < 15: # Generates the remaining numbers needed for the full set.
fullNumber = randrange(1, 91)
firstDigit = fullNumber // 10
if firstDigit == 9:
firstDigit = 8
if tens[firstDigit] < 3:
tens[firstDigit] += 1
if fullNumber not in Numbers:
Numbers.append(fullNumber)
Numbers.sort()
return Numbers
numbers = BingoNum()
# dict af alle 15 tal på pladen med et index som holder styr på hvilken række på pladen de placeres i.
NumberDict = {i: 0 for i in numbers}
RowSum = {i: 0 for i in range(3)}
tens = {i: 0 for i in range(9)}
for i in numbers:
if i == 90:
tens[8] += 1
else:
tens[i // 10] += 1
# looper gennem 0-8, opdaterer NumberDict med placering af tal.
for i in range(9):
GetOutPass = False
while GetOutPass == False:
choices = list(range(3)) # [0,1,2]
j = 3
while j > tens[i]:
choices.pop(randrange(len(choices)))
j -= 1
# choices indeholder nu en kandidat til de felter, som skal besættes. fx [0,2]. De vil blive afvist, hvis det fører til mere end 5 i en række
alert = False
RowSumCurrent = RowSum
for k in choices:
RowSumCurrent[k] += 1
if RowSumCurrent[k] > 4 and i != 8:
alert = True
if alert == False:
RowSum = RowSumCurrent
GetOutPass = True
# Choices indeholder nu de rows i 'i' kolonnen, som skal besættes af et tal. fx [0,2]
# udvælg tal i numbers som har 'i' som årti.
subNumbers = [] # fx [11,16] i 10'erne
for k in range(len(numbers)):
if numbers[k] // 10 == i:
subNumbers.append(numbers[k])
subIndex = 0
for k in subNumbers:
NumberDict[k] = choices[subIndex]
subIndex += 1
# print(BingoNum())
print(NumberDict)
key = 477
im = Image.new("RGB", (1000, 500), "#FFFF00")
test = Image.open("C:/Users/Emil/Documents/Python/Bingopladegenerator/Bingoplade.png")
font = ImageFont.truetype("Jost-700-BoldItalic.otf", 320)
draw = ImageDraw.Draw(test)
draw.text((420, 1150), "88", font=font, fill=(0, 0, 0, 255))
test.show()