Sunday, July 18, 2021

Bingo

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()


No comments:

Post a Comment