import
java.util.*;
class
BingoCard {
List<Integer> numbers =
new
ArrayList<>();
}
public
class
GFG {
public
static
void
main(String[] args)
{
Scanner scanner =
new
Scanner(System.in);
System.out.println(
"Welcome to Bingo!"
);
Random random =
new
Random();
BingoCard player1Card = createBingoCard(random);
BingoCard player2Card = createBingoCard(random);
int
currentPlayer =
1
;
while
(
true
) {
BingoCard currentCard = (currentPlayer ==
1
)
? player1Card
: player2Card;
int
drawnNumber
= generateRandomNumber(random,
0
,
25
);
drawNumberAndMark(player1Card, player2Card,
drawnNumber);
System.out.println(
"\nPlayer "
+ currentPlayer
+
" - Drawn Number: "
+ drawnNumber);
System.out.println(
"Player 1's Card:"
);
displayCard(player1Card);
System.out.println(
"--------------------------"
);
System.out.println(
"Player 2's Card:"
);
displayCard(player2Card);
System.out.println(
"--------------------------"
);
if
(hasBingo(currentCard)) {
System.out.println(
"\nPlayer "
+ currentPlayer
+
" has achieved Bingo! Congratulations!"
);
break
;
}
currentPlayer = (currentPlayer ==
1
) ?
2
:
1
;
}
scanner.close();
}
private
static
int
generateRandomNumber(Random random,
int
min,
int
max)
{
return
min + random.nextInt(max - min +
1
);
}
private
static
BingoCard createBingoCard(Random random)
{
BingoCard card =
new
BingoCard();
List<Integer> possibleNumbers =
new
ArrayList<>();
for
(
int
i =
1
; i <=
25
; ++i) {
possibleNumbers.add(i);
}
Collections.shuffle(possibleNumbers, random);
card.numbers.addAll(possibleNumbers);
return
card;
}
private
static
void
drawNumberAndMark(BingoCard player1Card,
BingoCard player2Card,
int
number)
{
for
(
int
i =
0
; i < player1Card.numbers.size();
++i) {
if
(player1Card.numbers.get(i) == number) {
player1Card.numbers.set(i,
0
);
}
if
(player2Card.numbers.get(i) == number) {
player2Card.numbers.set(i,
0
);
}
}
}
private
static
boolean
hasBingo(BingoCard card)
{
for
(
int
i =
0
; i <
5
; ++i) {
if
(card.numbers.get(i *
5
) ==
0
&& card.numbers.get(i *
5
+
1
) ==
0
&& card.numbers.get(i *
5
+
2
) ==
0
&& card.numbers.get(i *
5
+
3
) ==
0
&& card.numbers.get(i *
5
+
4
) ==
0
) {
return
true
;
}
if
(card.numbers.get(i) ==
0
&& card.numbers.get(i +
5
) ==
0
&& card.numbers.get(i +
10
) ==
0
&& card.numbers.get(i +
15
) ==
0
&& card.numbers.get(i +
20
) ==
0
) {
return
true
;
}
}
if
((card.numbers.get(
0
) ==
0
&& card.numbers.get(
6
) ==
0
&& card.numbers.get(
12
) ==
0
&& card.numbers.get(
18
) ==
0
&& card.numbers.get(
24
) ==
0
)
|| (card.numbers.get(
4
) ==
0
&& card.numbers.get(
8
) ==
0
&& card.numbers.get(
12
) ==
0
&& card.numbers.get(
16
) ==
0
&& card.numbers.get(
20
) ==
0
)) {
return
true
;
}
return
false
;
}
private
static
void
displayCard(BingoCard card)
{
for
(
int
i =
0
; i < card.numbers.size(); ++i) {
System.out.print((card.numbers.get(i) !=
0
)
? card.numbers.get(i)
:
"X"
);
System.out.print(
"\t"
);
if
((i +
1
) %
5
==
0
) {
System.out.println();
}
}
}
}