java - 用Java编写宾果游戏,遇到麻烦
问题描述
我是 Java 新手,我有一个项目,我需要创建一个要在 CMD/终端中玩的宾果游戏。我在替换 2D 数组中的数字时遇到问题(如果玩家输入的数字与 2 张卡片中的任何一张匹配,它会被替换为“XX”,然后使用标记为“XX”的数字继续游戏)并检查是否用户已经获得了一行中的所有数字,然后显示“Bingo,玩家“姓名”获胜!”(只有 2 张玩家卡)。我也不知道如何阻止用户输入已经划掉/重复的数字。
import java.util.Scanner;
public class demno {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int call, r = 0, c = 0; /* For the player to input bingo numbers.
To declare row and column globally for later use. */
// Initiate card 1 numbers
int[][] card1 = { {24, 2, 8, 1, 25},
{12, 16, 7, 17, 15},
{5, 6, 20, 19, 13 },
{14, 23, 22, 4, 3 },
{10, 18, 11, 21, 9} };
// Initiate card 2 numbers
int[][] card2 = { {24, 21, 17, 15, 6},
{10, 3, 8, 18, 20 },
{14, 7, 16, 12, 5 },
{25, 23, 13, 19, 11},
{22, 4, 9, 1, 2 } };
// Player 1's card
System.out.println("Player 1's card:");
for (r=0; r<card1.length; r++) {
for(c=0;c<card1.length; c++){
if (10 > card1[r][c] ){
System.out.print(" "+ card1[r][c] +" ");
}else {
System.out.print(card1[r][c] + " ");
}
}
System.out.println("");
}
// End Player 1's card
System.out.print('\n');
// Player 2's card
System.out.println("Player 2's card:");
for (r=0; r<card2.length; r++) {
for(c=0;c<card2.length; c++){
if (10 > card2[r][c]) {
System.out.print(" " + card2[r][c] + " ");
}else {
System.out.print(card2[r][c] + " ");
}
}
System.out.println("");
}
// End Player 2's card
// User input for bingo number
System.out.println();
System.out.print("Game Host call (0 to exit): ");
call = sc.nextInt();
sc.close();
// Checks user input for errors or if player want's to exit.
if (call >25) {
System.out.println("The number must be between 1 to 25, please call again! ");
System.out.print("Game Host call (0 to exit): ");
call = sc.nextInt();
sc.close();
}else if (call == 0) {
System.exit(0);
}
}
}
解决方案
您可以将数组中的值替换为array[0] = "XX"
. 所以在你的情况下它会是card2[r][c] = "XX"
。
为了确保每个数字都被使用一次,一个简单的解决方案是 ArrayList。所以你可以像这样使用它
List<Integer> usedNumbers = new ArrayList<Integer>();
// when number was used
usedNumbers.add(call);
//check if already used
boolean alreadyUsed = usedNumbers.contains(call);
另一个提示:
for (r = 0; r < card2.length; r++) {
for(c = 0; c < card2.length; c++) {
...
}
}
仅当数组的card2
数量等于每个列表中的项目数时才有效。如果没有,您将获得一个OutOfBoundsException
. 正确的方法是使用内部数组的长度c
:
for (r = 0; r < card2.length; r++) {
for(c = 0; c < card2[r].length; c++) {
...
}
}
要实现游戏逻辑,您必须采取以下步骤:
- 扫描数字后,检查玩家 A 是否匹配。
- 如果有比赛给他一分(也许增加一个 int 变量?)。
- 然后将匹配项替换为 XX。
- 玩家 B 也一样。
- 如果点变量之一 == 5 打印获胜者并停止应用程序
推荐阅读
- r - 确定一个值是否与之前匹配的组中的 id 匹配
- html - 在 Outlook 黑色主题模式下使 Outlook HTML 模板按钮背景透明
- react-native - 如何在 const 函数中导航 [react native]
- javascript - ReactJs中保存时获取数据数组
- android - Flutter firestore QuerySnapshot 在 Android 中没有 getter 'documents' 的实例
- python - 如何在不使用内置函数的情况下计算协方差和相关性?
- angular - 在 Angular 10 服务中创建 TemplateRef
- nsis - 知道一个部分是否已经执行了另一个部分
- linux - Bash 条件表达式 (-v) 检查是否设置了变量
- ios - iOS 企业分发证书创建不会创建私钥