#include <bits/stdc++.h>
using
namespace
std;
struct
BingoCard {
vector<
int
> numbers;
};
int
generateRandomNumber(
int
min,
int
max)
{
return
min + (
rand
() % (max - min + 1));
}
BingoCard createBingoCard()
{
BingoCard card;
vector<
int
> possibleNumbers;
for
(
int
i = 1; i <= 25; ++i) {
possibleNumbers.push_back(i);
}
random_shuffle(possibleNumbers.begin(),
possibleNumbers.end());
for
(
int
i = 0; i < 25; ++i) {
card.numbers.push_back(possibleNumbers[i]);
}
return
card;
}
void
drawNumberAndMark(BingoCard& player1Card,
BingoCard& player2Card,
int
number)
{
for
(
int
i = 0; i < player1Card.numbers.size(); ++i) {
if
(player1Card.numbers[i] == number) {
player1Card.numbers[i] = 0;
}
if
(player2Card.numbers[i] == number) {
player2Card.numbers[i] = 0;
}
}
}
bool
hasBingo(
const
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
true
;
}
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
true
;
}
}
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
true
;
}
return
false
;
}
void
displayCard(
const
BingoCard& card)
{
for
(
int
i = 0; i < card.numbers.size(); ++i) {
cout << (card.numbers[i]
? std::to_string(card.numbers[i])
:
"X"
)
<<
"\t"
;
if
((i + 1) % 5 == 0) {
std::cout << std::endl;
}
}
}
int
main()
{
srand
(
time
(0));
BingoCard player1Card = createBingoCard();
BingoCard player2Card = createBingoCard();
int
currentPlayer = 1;
while
(
true
) {
BingoCard& currentCard = (currentPlayer == 1)
? player1Card
: player2Card;
int
drawnNumber = generateRandomNumber(0, 26);
drawNumberAndMark(player1Card, player2Card,
drawnNumber);
cout <<
"Player "
<< currentPlayer
<<
" - Drawn Number: "
<< drawnNumber << endl;
cout <<
"Player 1's Card:\n"
;
displayCard(player1Card);
cout <<
"--------------------------"
<< endl;
cout <<
"Player 2's Card:\n"
;
displayCard(player2Card);
cout <<
"--------------------------"
<< endl;
if
(hasBingo(currentCard)) {
cout <<
"Player "
<< currentPlayer
<<
" has achieved Bingo! Congratulations!"
<< endl;
break
;
}
currentPlayer = (currentPlayer == 1) ? 2 : 1;
}
return
0;
}