4

我用 Java 为我的宾果游戏创建了两种方法。一种方法是创建一个新棋盘,根据 Bingo 规则 (1-75) 用整数填充 Bingo Board。我的第二种方法生成范围为 1 - 75 的随机数。

public static int drawNum(){
    Random rand = new Random();
    int num = rand.nextInt(75)+1;
    return num;
}

public static void bingoCard(){


    int [][]card=new int [5][5];
    ArrayList<Integer> alreadyUsed = new ArrayList<Integer>();
    boolean valid = false;
    int tmp = 0;

    for(int i = 0; i <= 4; i++){
        for(int row = 0; row < card.length; row++){
            while(!valid){
                tmp = (int)(Math.random() * 15) + 1 + 15 * i;
                if(!alreadyUsed.contains(tmp)){
                    valid = true;
                    alreadyUsed.add(tmp);
                }
            }
            card[row][i] = tmp;
            valid = false;
        }
    }
    card[2][2] = 0;

    //create array to make title.  
    String title []={"B","I","N","G","O"};

    for(int i=0;i<title.length;i++){
        System.out.print(title[i]+ "\t");
    }

    System.out.println();

    for(int row=0;row<card.length;row++){
        for(int col=0;col<card[row].length;col++){
            System.out.print(card[row][col]+ "\t");
        }
        System.out.println();
    }
}

我需要帮助的是,如何检查 drawNum() 方法是否对应于存储在我的 bingoCard() 数组中的任何值?如果是这样,打印出一个填充了整数的新数组。如果满足宾果游戏的条件,那么你赢了。

我希望我不会让你听起来像我希望你为我做这件事,但我对如何开始编写这部分代码感到困惑。谢谢你。

4

4 回答 4

5

这是我的建议 - 立即学习面向对象编程

我看到您正在使用 JDK 中提供的对象,那么为什么不学习自己制作呢?

使用以下方法(-)和成员(+)创建两个类(PS。这不是记录代码的正式方式)

BingoCard
    +list of numbers on card
    -reset() : gets new numbers for this card
    -test(BingoDrawer) : Tests to see if this card won on this drawing
    -toString() : returns a String representation of this card

BingoDrawer
    +list of numbers drawn
    -reset() : draws new numbers
    -hasNumber(int number) : tests if this number was drawn
    -toString() : returns a String representation of this drawing

还有一个建议

  • 与其跟踪您使用的内容,不如跟踪未使用的内容,这将使事情变得更容易,因为您可以从该列表中随机选择东西。与您当前的操作不同,它是凭空选择(一个逻辑数字)并希望(这会导致问题)这不是碰撞

如果您遵循我的建议,您可以编写这样的代码

public static void main(String[] args) {
    BingoCard bc = new BingoCard();
    BingoDrawer bd = new BingoDrawer();
    while(thePlayerWantsToPlay()) { //function to be defined by you
        bc.reset();
        bd.reset();
        System.out.println(bc);
        System.out.println(bd);
        System.out.println(bc.test(bd));
    }
}

您可以更进一步,创建一个BingoGame类并执行我在其中所做的操作main,然后创建一个实例并在该对象上BingoGame调用一些方法。start

于 2013-08-22T18:31:14.107 回答
1

要检查您的板上是否有该号码,请以与您对已经使用的号码类似的方式通读该板,但用户刚刚输入的号码除外。

用户获胜的条件应在棋盘猜出另一个数字后进行检查。
有几种方法可以做到这一点,一种简单的方法是遍历所有可能获胜的模式,检查那里是否有标记。

所有这些都将在一个循环中,有点像这样:

Set up board via user entering numbers.
Start loop
    set either a timer to wait for, or wait for a keypress (so the game doesn't just play really fast)
    Get random number
    Possibly add to board
    Check if winner
    if winner, break the loop and do something else.
    Print the new board out.
(end of loop)
If they got here, that could mean they won!
Wait to exit
于 2013-08-22T18:15:00.533 回答
0

你可以把它写成伪代码,然后填写方法。它通常有助于以自上而下的方式处理这些事情。因此,对于宾果游戏,您可能有:

board = generateBoard();
while (!bingoFound(board)) {
    number = drawNumber();
    board = stampNumbers(board, number);
}

如果这有意义,您可以更深入地定义每种方法。例如,bingoFound可能看起来像:

public boolean bingoFound(int[][] board) {
    boolean wasFound = bingoRowFound(board)
                    || bingoColFound(board)
                    || bingoDiagonalFound(board);
    return wasFound;
}

同样,我已经在(大部分)伪代码中定义了所有内容。如果这看起来不错,您可以更深入地移动一步。让我们定义bingoRowFound方法。

public boolean bingoRowFound(int[][] board) {
    for (int row = 0; row < NUM_ROWS; row++) {
        boolean rowIsABingo = true;
        for (int col = 0; col < NUM_COLS; col++) {
            // We have to check that everything up until this point has
            // been marked off. I am using -1 to indicate that a spot has
            // been marked.
            rowIsABingo = rowIsABingo && board[row][col] == -1;
        }
        if (rowIsABingo) { return rowIsABingo; }
    }
    return false; // If we didn't find a bingo, return false.
}

一些方法(如drawNumber)将非常容易实现。其他人,比如寻找对角线宾果游戏可能会有点困难。

于 2013-08-22T18:51:40.343 回答
0

2014 年 2 月 12 日更新:

撤回代码,因为这是大学课程作业,我想防止人们只是复制代码。当另一个学生从我的 Github 存储库中取出我的代码并将其作为自己的代码发送时,我几乎因为被指控共享代码(这是作业中的非诺)而惹上麻烦。


有两个类,一个主类和一个保存我的方法和构造函数的类。

BINGOFINAL.java是我的main课。

Bingo_Card.java举行了我的constructormethods

如果要运行它,请确保创建一个名为 BINGOFINAL 的新项目,并将 Bingo_Card.java 放入相同的 */src/ 扩展中。

于 2013-08-22T21:44:29.577 回答