我是一名学习计算机科学入门的学生。现在我们正在做一个年终项目,这是一个使用java的基于文本的扫雷游戏。在第一部分中,我们应该将5x5扫雷舰板表示为2d字符数组,并手动添加炸弹位置,然后更新指示邻近炸弹的数字。然后我们创建第二个表示板,它将表示单元格是否已被显示。
之后,我们需要编写以下方法:
print Board(char[][] Board, Boolean[][] is Revealed):以文本形式打印扫雷板到屏幕。请记住,印制板应该反映哪些细胞已经显示出来。
reveal Cell(int row, int col, Boolean[][] game board, char[][] answers board):当一个Cell要显示时,适当地修改状态数组,同时根据扫雷规则确定如何显示周围的空白区域。
然后我们必须编写一个包含这两种方法的主要游戏循环,同时检查玩家是赢还是输。
我已经完成了print board和reveal cell方法,我只需要创建一个game board和游戏循环来测试它。
我们不提倡在java之外使用类或模块。Lang(不导入任何库)。
下面是我的代码:public static void main(String[] args) {
char[][]answerboard= {{'B', '1', '0', '1', 'B'},
{'1', '1', '1', '2', '1'},
{'0', '1', 'B', '2', '1'},
{'1', '1', '1', '2', 'B'},
{'B', '1', '0', '1', '1'}};
// Initialized answer board: This is the board that shows what is inside each cell. I need to create a second 2d array representation that shows which cells have been revealed.
int row , col ;
for (row = 0; row < answerboard.length; row++){
for (col = 0; col < answerboard[1].length; col++)
System.out.print(answerboard[row][col]);
System.out.println();
}
}
public static void printBoard(char[][] board, boolean[][] isRevealed)
{
for(int i=0; i < board.length; i++)
{
for(int j=0; j<=board[0].length; j++)
{
if(isRevealed[i][j]=true)
System.out.print(board[i][j]+" ");//prints hidden char
else
if(isRevealed[i][j]= false)
System.out.print("- ");
}
System.out.println(" ");
}
}
public static void revealCell(int row, int col, boolean[][] gameboard, char[][]answersboard) {
System.out.println(row + " " + col);
if(row < 0|| row >=answersboard.length ||col < 0|| col > answersboard[0].length){
System.out.println("bad input");
return;
}
if(answersboard[row][col] == 'B'){
gameboard[row][col] = answersboard[row][col];
return;
}
if(answersboard[row][col] == '1'||answersboard[row][col] == '2'){
gameboard[row][col] = answersboard[row][col];
return;
}
if(answersboard[row][col] == '0'){
gameboard[row][col] = answersboard[row][col];
for(int i = row-1; i <= row +1; i++){
for(int j = col-1; j<= col +1;j++){
revealCell(i,j, gameboard, answersboard);
}
}
}
}
不太确定你的问题是什么…是啊,看起来你没问过。
只是一个建议,也许这可能是一个好主意,做一个MineSweeperBoard
类,并让这些都是类的公共非静态方法。老师们总是喜欢看到一年级的学生掌握了面向对象编程,并且能够把课程从问题中拉出来。
编辑。此外,你可能不应该有System.out.println(...)
的东西在你的方法,应该是工作在游戏板的状态。这会产生副作用,并打破每个方法一个任务的理念。而是让处理输入/输出的任何方法在调用该方法之前决定输入是否合适。理想情况下,如果有人给方法提供坏数据,你会让这些方法抛出IllegalArgumentExceptions
,但你可能还没有覆盖到这一点。
祝你在剩下的项目和考试中好运!