BINGO
from tkinter import *
from random import shuffle, randint
from tkinter import messagebox as mb
win = Tk()
scrWidth = win.winfo_screenwidth()
scrHeight = win.winfo_screenheight()
win.geometry(f'{scrWidth}x{scrHeight}+0+0')
win.title("B I N G O")
labels = list()
nRows, nCols = 34, 15
names = ["Chacha", "Mummy", "Moni", "Susan", "Bijoy", "Joyce", "Binoy",
"Omana", "Vijay", "Karuna", "Vinny", "Shawn", "Namitha", "Thejus",
"Aambo", "Bambo", "Chambo",
"Chacha1", "Mummy1", "Moni1", "Susan1", "Bijoy1", "Joyce1", "Binoy1",
"Omana1", "Vijay1", "Karuna1", "Vinny1", "Shawn1", "Namitha1", "Thejus1",
"Aambo1", "Bambo1", "Chambo1"
] # len(names) must be >= nRows
L = [] # Insert 2D list of numbers in L during real game
for i in range(nRows):
l = []
for j in range(nCols): # Randomly select numbers for players
num = randint(0, 99)
l.append(num)
l.sort()
l.insert(0, names[i]) # Name will be 0th element of each row of L
L.append(l)
#print(l)
players = []
for i in range(nRows):
players.append(L[i])
rangeOfNums = 100
L = list(range(rangeOfNums))
shuffle(L)
clickNo, called, winners = 0, [], []
tallied = []
for i in range(nRows):
tallied.append(0)
def click():
global clickNo
num = L[clickNo]
called.append(num)
clickNo += 1
rows = []
for l in range(nRows):
for m in range(1, nCols+1):
val = players[l][m]
if val == num:
labelList[l][m-1].config(bg="lime green")
tallied[l] += 1
print(L[:clickNo], "\n")
msgCalled.config(text=str(L[:clickNo]))
for a in range(nRows):
if tallied[a] == nCols:
winners.append(players[a][0])
if len(winners) > 0:
btnCheck["state"] = DISABLED
s = "WINNER(S): "
for i in range(len(winners)):
s = s + winners[i] + ", "
mb.showinfo("OUTCOME", s[:-2] + " " + str(clickNo))
for i in range(nRows):
X, Y = 0, 10
if i > 16:
X = 666
lblName = Label(win, text=players[i][0], width=10, font=("Helvetica", 16, "bold"), anchor="e").place(x=X, y=Y+(i%17)*36)
labelList = []
for j in range(nRows):
row = []
for k in range(1, nCols+1):
X, Y = 100, 10
if j > 16:
X = 770
lblNums = Label(win, text=str(players[j][k]), font=("Helvetica", 16, "bold"), bg="yellow", width=2)
lblNums.place(x=X+k*35, y=Y+(j%17)*36)
row.append(lblNums)
labelList.append(row)
S = StringVar()
msgCalled = Message(win, font=("Helvetica", 16, "bold"), width=1200, bg="light blue")
msgCalled.place(x=0, y=620)
btnCheck = Button(win, text="CHECK", bg="pink", font=("Helvetica", 16, "bold"), command=click)
btnCheck.place(x=1240, y=640)
win.mainloop()