我为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()数组中存储的任何值相对应?如果是这样,打印出一个填充了整数的新数组。如果宾果符合条件,那么你就赢了。
我希望我听起来不像我希望你为我做的那样,但我对如何开始编码那部分感到困惑。谢谢。
答案 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
抓住了我的constructor
和methods
。
如果你想运行它,请确保创建一个名为BINGOFINAL的新项目,并将Bingo_Card.java放入相同的* / src / extension中。