Java中的宾果纸牌游戏

时间:2013-08-22 18:05:25

标签: java

我为Java中的宾果游戏创建了两种方法。一种方法创建一个新的板,根据宾果规则(1-75)用宾果板填充宾果板。我的第二种方法生成范围为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 个答案:

答案 0 :(得分:3)

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

我看到你正在使用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的实例并调用{{1}} {}关于对象的方法。

答案 1 :(得分: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

答案 2 :(得分: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真正易于实现。其他人,比如寻找对角宾果游戏可能会有点困难。

答案 3 :(得分:0)

2014年2月12日更新:

收回代码,因为这是一个大学课程作业,我想阻止人们只是复制代码。当另一名学生从我的Github回购中提取我的代码并将其作为他们自己的代码发送时,我几乎因为被指控共享代码(在作业中是非诺)而遇到麻烦。


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

BINGOFINAL.java是我的main课程。

Bingo_Card.java抓住了我的constructormethods

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