#include <stdio.h>
#include <stdlib.h>
#include <time.h>
struct
BingoCard {
int
numbers[25];
};
int
generateRandomNumber(
int
min,
int
max)
{
return
min +
rand
() % (max - min + 1);
}
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;
}
void
drawNumberAndMark(
struct
BingoCard* card,
int
number)
{
for
(
int
i = 0; i < 25; ++i) {
if
(card->numbers[i] == number) {
card->numbers[i] = 0;
}
}
}
int
hasBingo(
struct
BingoCard card)
{
for
(
int
i = 0; i < 5; ++i) {
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;
}
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;
}
}
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;
}
return
0;
}
void
displayCard(
struct
BingoCard card)
{
for
(
int
i = 0; i < 25; ++i) {
if
(card.numbers[i] != 0) {
printf
(
"%d\t"
, card.numbers[i]);
}
else
{
printf
(
"X\t"
);
}
if
((i + 1) % 5 == 0) {
printf
(
"\n"
);
}
}
printf
(
"\n"
);
}
int
main()
{
srand
(
time
(NULL));
printf
(
"Welcome to Bingo!\n"
);
struct
BingoCard player1Card = createBingoCard();
struct
BingoCard player2Card = createBingoCard();
int
currentPlayer = 1;
while
(1) {
struct
BingoCard currentCard = (currentPlayer == 1)
? player1Card
: player2Card;
int
drawnNumber = generateRandomNumber(1, 25);
drawNumberAndMark(&player1Card, drawnNumber);
drawNumberAndMark(&player2Card, drawnNumber);
printf
(
"\nPlayer %d - Drawn Number: %d\n"
,
currentPlayer, drawnNumber);
printf
(
"Player 1's Card:\n"
);
displayCard(player1Card);
printf
(
"--------------------------\n"
);
printf
(
"Player 2's Card:\n"
);
displayCard(player2Card);
printf
(
"--------------------------\n"
);
if
(hasBingo(currentCard)) {
printf
(
"\nPlayer %d has achieved Bingo! "
"Congratulations!\n"
,
currentPlayer);
break
;
}
currentPlayer = (currentPlayer == 1) ? 2 : 1;
}
return
0;
}