# Create Bingo Game using Python

In this tutorial, we will learn how to create Bingo game in Python step by step.

Bingo game is something related to the random number guessing game. 2 Players are given a random 5×5 board filled with 1 to 25 numbers. Each player takes turns to guess 1 number and all players cross the guessed numbers on their board. When a row, column, or diagonal is fully crossed it counts as 1 when a player totals 5 then the player is the winner.

### Let’s create a Board class in Python

```import random

class Board:
def __init__(self):
self.position = {}
self.playBoard = [
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
[0,0,0,0,0],
]
self.bingo = {
"row" : [0,0,0,0,0],
"col" : [0,0,0,0,0],
"diagonal" : [0,0]
}

self.createBoard()

def createBoard(self):
choices = [i for i in range(1,26)]
for i in range(5):
for j in range(5):
choice = random.choice(choices)
self.playBoard[i][j] = choice
choices.pop(choices.index(choice))
self.position[choice] = (i,j)

def updateBoard(self, val):
x,y = self.position[val]
self.playBoard[x][y] = 'X'
self.updateBingo(x,y)

def updateBingo(self, x, y):
self.bingo["row"][x] += 1
self.bingo["col"][y] += 1
if x==y==2:
self.bingo["diagonal"][0] += 1
self.bingo["diagonal"][1] += 1
elif x==y:
self.bingo["diagonal"][0] += 1
elif x+y == 4:
self.bingo["diagonal"][1] += 1

def checkBingo(self):
return 5 in self.bingo["row"] or 5 in self.bingo["col"] or 5 in self.bingo["diagonal"]```

createBoard() is used to creates the game board and stores the position of each cell in the dictionary to access each cell easily.

updateBoard() is used to update the game board when the player guesses a number.

updateBingo() is used to update a dictionary to update bingo.

checkBingo() is used to check player got bingo or not.

### Let’s create a Player class for Bingo game in Python

```class Player(Board):
def __init__(self, name):
self.name = name
self.board = Board()

def updatePlayerBoard(self, val):
self.board.updateBoard(val)

def checkBingo(self):
return self.board.checkBingo()```

updatePlayerBoard() is used to update player board.

checkBingo() is used to checks if the player got bingo or not.

### Game class

Game class is to implement game functionalities.

```class Game:
def displayBoard(self, player1, player2):
board1 = player1.board.playBoard
board2 = player2.board.playBoard
size = 20
p1len = len(player1.name)
print(player1.name+" "*(size-p1len+1)+player2.name)
for i in range(5):
for j in board1[i]:
if j=='X':
print(f" {j}",end=" ")
elif j>9:
print(j,end=" ")
else:
print(f"0{j}",end=" ")
print("      ",end="")
for j in board2[i]:
if j=='X':
print(f" {j}",end=" ")
elif j>9:
print(j,end=" ")
else:
print(f"0{j}",end=" ")
print()
print()```

displayBoard() is used to display the player’s board.

### Game implementation: Bingo

creating a game base and 2 players

```game = Game()
player1 = Player(name="player1")
player2 = Player(name="player2")```

logic for gameplay

```game.displayBoard(player1, player2)

while True:
val = int(input(f"{player1.name}'s turn : "))
player1.updatePlayerBoard(val)
player2.updatePlayerBoard(val)
game.displayBoard(player1,player2)

if player1.checkBingo() and player2.checkBingo():
print("DRAW")
break
if player1.checkBingo():
print(f"{player1.name} WON")
break
if player2.checkBingo():
print(f"{player2.name} WON")
break

val = int(input(f"{player1.name}'s turn : "))
player1.updatePlayerBoard(val)
player2.updatePlayerBoard(val)
game.displayBoard(player1,player2)

if player1.checkBingo() and player2.checkBingo():
print("DRAW")
break
if player1.checkBingo():
print(f"{player1.name} WON")
break
if player2.checkBingo():
print(f"{player2.name} WON")
break```

#### output

```player1              player2
06 11 18 03 01       24 02 04 13 18
16 04 20 12 25       08 16 22 01 12
13 10 24 19 08       20 14 21 11 19
05 23 17 14 22       15 23 07 03 09
15 21 02 07 09       17 10 25 06 05

player1's turn : 6
player1              player2
X 11 18 03 01       24 02 04 13 18
16 04 20 12 25       08 16 22 01 12
13 10 24 19 08       20 14 21 11 19
05 23 17 14 22       15 23 07 03 09
15 21 02 07 09       17 10 25  X 05

player2's turn : 11
player1              player2
X  X 18 03 01       24 02 04 13 18
16 04 20 12 25       08 16 22 01 12
13 10 24 19 08       20 14 21  X 19
05 23 17 14 22       15 23 07 03 09
15 21 02 07 09       17 10 25  X 05

player1's turn : 4
player1              player2
X  X 18 03 01       24 02  X 13 18
16  X 20 12 25       08 16 22 01 12
13 10 24 19 08       20 14 21  X 19
05 23 17 14 22       15 23 07 03 09
15 21 02 07 09       17 10 25  X 05

player2's turn : 24
player1              player2
X  X 18 03 01        X 02  X 13 18
16  X 20 12 25       08 16 22 01 12
13 10  X 19 08       20 14 21  X 19
05 23 17 14 22       15 23 07 03 09
15 21 02 07 09       17 10 25  X 05

player1's turn : 14
player1              player2
X  X 18 03 01        X 02  X 13 18
16  X 20 12 25       08 16 22 01 12
13 10  X 19 08       20  X 21  X 19
05 23 17  X 22       15 23 07 03 09
15 21 02 07 09       17 10 25  X 05

player2's turn : 3
player1              player2
X  X 18  X 01        X 02  X 13 18
16  X 20 12 25       08 16 22 01 12
13 10  X 19 08       20  X 21  X 19
05 23 17  X 22       15 23 07  X 09
15 21 02 07 09       17 10 25  X 05

player1's turn : 1
player1              player2
X  X 18  X  X        X 02  X 13 18
16  X 20 12 25       08 16 22  X 12
13 10  X 19 08       20  X 21  X 19
05 23 17  X 22       15 23 07  X 09
15 21 02 07 09       17 10 25  X 05

player2's turn : 2
player1              player2
X  X 18  X  X        X  X  X 13 18
16  X 20 12 25       08 16 22  X 12
13 10  X 19 08       20  X 21  X 19
05 23 17  X 22       15 23 07  X 09
15 21  X 07 09       17 10 25  X 05

player1's turn : 18
player1              player2
X  X  X  X  X        X  X  X 13  X
16  X 20 12 25       08 16 22  X 12
13 10  X 19 08       20  X 21  X 19
05 23 17  X 22       15 23 07  X 09
15 21  X 07 09       17 10 25  X 05

player2's turn : 9
player1              player2
X  X  X  X  X        X  X  X 13  X
16  X 20 12 25       08 16 22  X 12
13 10  X 19 08       20  X 21  X 19
05 23 17  X 22       15 23 07  X  X
15 21  X 07  X       17 10 25  X 05

player1's turn : 13
player1              player2
X  X  X  X  X        X  X  X  X  X
16  X 20 12 25       08 16 22  X 12
X 10  X 19 08       20  X 21  X 19
05 23 17  X 22       15 23 07  X  X
15 21  X 07  X       17 10 25  X 05

player2's turn : 7
player1              player2
X  X  X  X  X        X  X  X  X  X
16  X 20 12 25       08 16 22  X 12
X 10  X 19 08       20  X 21  X 19
05 23 17  X 22       15 23  X  X  X
15 21  X  X  X       17 10 25  X 05

player1's turn : 23
player1              player2
X  X  X  X  X        X  X  X  X  X
16  X 20 12 25       08 16 22  X 12
X 10  X 19 08       20  X 21  X 19
05  X 17  X 22       15  X  X  X  X
15 21  X  X  X       17 10 25  X 05

player2's turn : 15
player1              player2
X  X  X  X  X        X  X  X  X  X
16  X 20 12 25       08 16 22  X 12
X 10  X 19 08       20  X 21  X 19
05  X 17  X 22        X  X  X  X  X
X 21  X  X  X       17 10 25  X 05

player1's turn : 22
player1              player2
X  X  X  X  X        X  X  X  X  X
16  X 20 12 25       08 16  X  X 12
X 10  X 19 08       20  X 21  X 19
05  X 17  X  X        X  X  X  X  X
X 21  X  X  X       17 10 25  X 05

player2's turn : 5
player1              player2
X  X  X  X  X        X  X  X  X  X
16  X 20 12 25       08 16  X  X 12
X 10  X 19 08       20  X 21  X 19
X  X 17  X  X        X  X  X  X  X
X 21  X  X  X       17 10 25  X  X

player1's turn : 16
player1              player2
X  X  X  X  X        X  X  X  X  X
X  X 20 12 25       08  X  X  X 12
X 10  X 19 08       20  X 21  X 19
X  X 17  X  X        X  X  X  X  X
X 21  X  X  X       17 10 25  X  X

player2's turn : 10
player1              player2
X  X  X  X  X        X  X  X  X  X
X  X 20 12 25       08  X  X  X 12
X  X  X 19 08       20  X 21  X 19
X  X 17  X  X        X  X  X  X  X
X 21  X  X  X       17  X 25  X  X

player1's turn : 21
player1              player2
X  X  X  X  X        X  X  X  X  X
X  X 20 12 25       08  X  X  X 12
X  X  X 19 08       20  X  X  X 19
X  X 17  X  X        X  X  X  X  X
X  X  X  X  X       17  X 25  X  X

DRAW```