簡體   English   中英

Java中的賓果紙牌游戲

[英]Bingo Card Game in 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()數組中存儲的任何值相對應? 如果是這樣,打印出一個填充了整數的新數組。如果賓果符合條件,那么你就贏了。

我希望我聽起來不像我希望你為我做的那樣,但我很困惑如何開始編碼那部分。 謝謝。

這是我的建議 - 立即學習面向對象編程

我看到你正在使用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的對象方法。

要檢查您的電路板中是否有編號,請以與已使用的編號類似的方式讀取電路板,但用戶輸入的編號除外。

在董事會猜出另一個號碼后,應檢查用戶獲勝的條件。
有幾種方法可以做到這一點,一個簡單的方法是迭代可能獲勝的每個可能的模式,檢查那里是否有令牌。

所有這些都將在一個循環中,這有點像這樣:

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

您可以將其寫為偽代碼並在此之后填寫方法。 通常以自上而下的方式處理這些事情。 所以,對於賓果,你可能會:

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 )將非常容易實現。 其他人,比如尋找對角賓果游戲可能會有點困難。

2014年2月12日更新:

收回代碼,因為這是一個大學課程作業,我想阻止人們只是復制代碼。 當另一名學生從我的Github回購中提取我的代碼並將其作為他們自己的代碼發送時,我幾乎因為被指控共享代碼(在作業中是非諾)而遇到麻煩。


有兩個類,一個主類和一個用於保存我的方法和構造函數的類。

BINGOFINAL.java是我的main課程。

Bingo_Card.java擁有我的constructormethods

如果要運行它,請確保創建一個名為BINGOFINAL的新項目,並將Bingo_Card.java放入相同的* / src / extension中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM