Create Bingo Game Using C
In this article, we will learn the process of creating a Bingo Game using the C programming language.
What is a Bingo Game?
Bingo is a social game where players are given cards with grids of numbers. The goal is to mark off a specific pattern of numbers on the card, usually five in a row, column, or diagonal before your opponents do. The player who completes the pattern and shouts “Bingo!” is declared the winner.
Prerequisites for Game
Before we begin, one should have knowledge of a few tools and topics mentioned below:
- Development Environment: Should have an installed IDE like Eclipse, VsCode, etc.
- C Compiler: GCC for Linux or MinGW for Windows
- Basic C Knowledge: Some topics which are used in the game are mentioned below:
Components of Bingo Game
Now, let’s outline the key components of our Bingo game mentioned below:
- Bingo Card: The heart of our Bingo game will be the Bingo card. In C, we’ll represent it with a structure that stores an array of 25 numbers arranged in a 5×5 grid. These numbers will range from 1 to 25 and each column on the card will correspond to a letter in the word “BINGO.”
- Number Drawing: We’ll create a function to generate random numbers between 1 and 25. This function will not only display the drawn number but also display the corresponding letter (B, I, N, G, O). It will also check if the number is present on any player’s card and mark it as crossed out if so.
Rules of Bingo Game
The game logic will revolve around a loop that keeps drawing numbers until one of the players achieves Bingo. To win, a player must have five crossed-out numbers in a row, column, or diagonal. Additionally, we will keep track of the current player and switch between them after each turn.
Implementing the Bingo Game in C
With our game design in place, let’s start writing the C code to create our Bingo game.
Below is the implementation of the Bingo Game:
C
// C Program for implementation of // Bingo Game #include <stdio.h> #include <stdlib.h> #include <time.h> // BingoCard structure to store // the Bingo card numbers struct BingoCard { int numbers[25]; }; // Function to generate a random number // between min and max (inclusive) int generateRandomNumber( int min, int max) { return min + rand () % (max - min + 1); } // Function to create a new Bingo // card and shuffle the numbers struct BingoCard createBingoCard() { struct BingoCard card; int possibleNumbers[25]; for ( int i = 0; i < 25; ++i) { possibleNumbers[i] = i + 1; } for ( int i = 0; i < 25; ++i) { int j = generateRandomNumber(i, 24); int temp = possibleNumbers[i]; possibleNumbers[i] = possibleNumbers[j]; possibleNumbers[j] = temp; } for ( int i = 0; i < 25; ++i) { card.numbers[i] = possibleNumbers[i]; } return card; } // Function to mark the drawn number on a Bingo card void drawNumberAndMark( struct BingoCard* card, int number) { for ( int i = 0; i < 25; ++i) { if (card->numbers[i] == number) { card->numbers[i] = 0; } } } // Function to check if a Bingo // card has achieved a Bingo pattern int hasBingo( struct BingoCard card) { for ( int i = 0; i < 5; ++i) { // Check rows for Bingo if (card.numbers[i * 5] == 0 && card.numbers[i * 5 + 1] == 0 && card.numbers[i * 5 + 2] == 0 && card.numbers[i * 5 + 3] == 0 && card.numbers[i * 5 + 4] == 0) { return 1; } // Check columns for Bingo if (card.numbers[i] == 0 && card.numbers[i + 5] == 0 && card.numbers[i + 10] == 0 && card.numbers[i + 15] == 0 && card.numbers[i + 20] == 0) { return 1; } } // Check diagonals for Bingo if ((card.numbers[0] == 0 && card.numbers[6] == 0 && card.numbers[12] == 0 && card.numbers[18] == 0 && card.numbers[24] == 0) || (card.numbers[4] == 0 && card.numbers[8] == 0 && card.numbers[12] == 0 && card.numbers[16] == 0 && card.numbers[20] == 0)) { return 1; } // No Bingo pattern found return 0; } // Function to display the Bingo card void displayCard( struct BingoCard card) { for ( int i = 0; i < 25; ++i) { // Display numbers or 'X' for drawn numbers if (card.numbers[i] != 0) { printf ( "%d\t" , card.numbers[i]); } else { printf ( "X\t" ); } // Move to the next line after every 5 numbers if ((i + 1) % 5 == 0) { printf ( "\n" ); } } printf ( "\n" ); } int main() { srand ( time (NULL)); // Seed the random number generator printf ( "Welcome to Bingo!\n" ); // Create Bingo cards for both players struct BingoCard player1Card = createBingoCard(); struct BingoCard player2Card = createBingoCard(); // Tracks the current player int currentPlayer = 1; // Main game loop while (1) { // Get the current player's card struct BingoCard currentCard = (currentPlayer == 1) ? player1Card : player2Card; // Generate a random number between 1 and 25 int drawnNumber = generateRandomNumber(1, 25); // Mark the drawn number on both player's cards drawNumberAndMark(&player1Card, drawnNumber); drawNumberAndMark(&player2Card, drawnNumber); printf ( "\nPlayer %d - Drawn Number: %d\n" , currentPlayer, drawnNumber); // Display both player's cards printf ( "Player 1's Card:\n" ); displayCard(player1Card); printf ( "--------------------------\n" ); printf ( "Player 2's Card:\n" ); displayCard(player2Card); printf ( "--------------------------\n" ); // Check if the current player has achieved Bingo if (hasBingo(currentCard)) { // Exit the game loop printf ( "\nPlayer %d has achieved Bingo! " "Congratulations!\n" , currentPlayer); break ; } // Switch to the other player for the next round currentPlayer = (currentPlayer == 1) ? 2 : 1; } return 0; } |
Output:
Welcome to Bingo!
Player 1 - Drawn Number: 8
Player 1's Card:
22 18 23 11 4
16 15 3 12 10
24 13 14 2 1
7 21 19 9 6
20 5 X 17 25
--------------------------
Player 2's Card:
14 11 5 3 20
23 21 12 18 2
25 1 16 7 10
4 19 13 17 22
9 X 6 15 24
--------------------------
Player 2 - Drawn Number: 10
Player 1's Card:
22 18 23 11 4
16 15 3 12 X
24 13 14 2 1
7 21 19 9 6
20 5 X 17 25
--------------------------
Player 2's Card:
14 11 5 3 20
23 21 12 18 2
25 1 16 7 X
4 19 13 17 22
9 X 6 15 24
--------------------------
Player 1 - Drawn Number: 10
Player 1's Card:
22 18 23 11 4
16 15 3 12 X
24 13 14 2 1
7 21 19 9 6
20 5 X 17 25
--------------------------
Player 2's Card:
14 11 5 3 20
23 21 12 18 2
25 1 16 7 X
4 19 13 17 22
9 X 6 15 24
--------------------------
Player 2 - Drawn Number: 22
Player 1's Card:
X 18 23 11 4
16 15 3 12 X
24 13 14 2 1
7 21 19 9 6
20 5 X 17 25
--------------------------
Player 2's Card:
14 11 5 3 20
23 21 12 18 2
25 1 16 7 X
4 19 13 17 X
9 X 6 15 24
--------------------------
Player 1 - Drawn Number: 10
Player 1's Card:
X 18 23 11 4
16 15 3 12 X
24 13 14 2 1
7 21 19 9 6
20 5 X 17 25
--------------------------
Player 2's Card:
14 11 5 3 20
23 21 12 18 2
25 1 16 7 X
4 19 13 17 X
9 X 6 15 24
--------------------------
Player 2 - Drawn Number: 5
Player 1's Card:
X 18 23 11 4
16 15 3 12 X
24 13 14 2 1
7 21 19 9 6
20 X X 17 25
--------------------------
Player 2's Card:
14 11 X 3 20
23 21 12 18 2
25 1 16 7 X
4 19 13 17 X
9 X 6 15 24
--------------------------
Player 1 - Drawn Number: 11
Player 1's Card:
X 18 23 X 4
16 15 3 12 X
24 13 14 2 1
7 21 19 9 6
20 X X 17 25
--------------------------
Player 2's Card:
14 X X 3 20
23 21 12 18 2
25 1 16 7 X
4 19 13 17 X
9 X 6 15 24
--------------------------
Player 2 - Drawn Number: 9
Player 1's Card:
X 18 23 X 4
16 15 3 12 X
24 13 14 2 1
7 21 19 X 6
20 X X 17 25
--------------------------
Player 2's Card:
14 X X 3 20
23 21 12 18 2
25 1 16 7 X
4 19 13 17 X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 16
Player 1's Card:
X 18 23 X 4
X 15 3 12 X
24 13 14 2 1
7 21 19 X 6
20 X X 17 25
--------------------------
Player 2's Card:
14 X X 3 20
23 21 12 18 2
25 1 X 7 X
4 19 13 17 X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 7
Player 1's Card:
X 18 23 X 4
X 15 3 12 X
24 13 14 2 1
X 21 19 X 6
20 X X 17 25
--------------------------
Player 2's Card:
14 X X 3 20
23 21 12 18 2
25 1 X X X
4 19 13 17 X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 2
Player 1's Card:
X 18 23 X 4
X 15 3 12 X
24 13 14 X 1
X 21 19 X 6
20 X X 17 25
--------------------------
Player 2's Card:
14 X X 3 20
23 21 12 18 X
25 1 X X X
4 19 13 17 X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 18
Player 1's Card:
X X 23 X 4
X 15 3 12 X
24 13 14 X 1
X 21 19 X 6
20 X X 17 25
--------------------------
Player 2's Card:
14 X X 3 20
23 21 12 X X
25 1 X X X
4 19 13 17 X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 22
Player 1's Card:
X X 23 X 4
X 15 3 12 X
24 13 14 X 1
X 21 19 X 6
20 X X 17 25
--------------------------
Player 2's Card:
14 X X 3 20
23 21 12 X X
25 1 X X X
4 19 13 17 X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 17
Player 1's Card:
X X 23 X 4
X 15 3 12 X
24 13 14 X 1
X 21 19 X 6
20 X X X 25
--------------------------
Player 2's Card:
14 X X 3 20
23 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 3
Player 1's Card:
X X 23 X 4
X 15 X 12 X
24 13 14 X 1
X 21 19 X 6
20 X X X 25
--------------------------
Player 2's Card:
14 X X X 20
23 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 9
Player 1's Card:
X X 23 X 4
X 15 X 12 X
24 13 14 X 1
X 21 19 X 6
20 X X X 25
--------------------------
Player 2's Card:
14 X X X 20
23 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 23
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X 1
X 21 19 X 6
20 X X X 25
--------------------------
Player 2's Card:
14 X X X 20
X 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 17
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X 1
X 21 19 X 6
20 X X X 25
--------------------------
Player 2's Card:
14 X X X 20
X 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 23
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X 1
X 21 19 X 6
20 X X X 25
--------------------------
Player 2's Card:
14 X X X 20
X 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 20
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X 1
X 21 19 X 6
X X X X 25
--------------------------
Player 2's Card:
14 X X X X
X 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 10
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X 1
X 21 19 X 6
X X X X 25
--------------------------
Player 2's Card:
14 X X X X
X 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 2
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X 1
X 21 19 X 6
X X X X 25
--------------------------
Player 2's Card:
14 X X X X
X 21 12 X X
25 1 X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 1
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X X
X 21 19 X 6
X X X X 25
--------------------------
Player 2's Card:
14 X X X X
X 21 12 X X
25 X X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 20
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X X
X 21 19 X 6
X X X X 25
--------------------------
Player 2's Card:
14 X X X X
X 21 12 X X
25 X X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 1 - Drawn Number: 25
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X X
X 21 19 X 6
X X X X X
--------------------------
Player 2's Card:
14 X X X X
X 21 12 X X
X X X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 2 - Drawn Number: 25
Player 1's Card:
X X X X 4
X 15 X 12 X
24 13 14 X X
X 21 19 X 6
X X X X X
--------------------------
Player 2's Card:
14 X X X X
X 21 12 X X
X X X X X
4 19 13 X X
X X 6 15 24
--------------------------
Player 2 has achieved Bingo! Congratulations!