【问题标题】:2D Char array Minesweeper game loop二维字符数组扫雷游戏循环
【发布时间】:2013-04-11 02:02:45
【问题描述】:

我是一名 Comp Sci 学生,正在学习 Comp Sci。现在我们正在做一个年终项目,这是一个使用 java 的基于文本的扫雷游戏。对于第一部分,我们假设将 5x5 扫雷板表示为 2D 字符数组并手动添加炸弹位置,然后更新指示相邻炸弹的数字。然后我们创建第二个表示细胞是否已被揭示。

之后我们需要编写如下方法:

print Board(char[][] board, Boolean[][] is Revealed):以文本形式将扫雷板打印到屏幕上。请记住,印制板应反映已显示哪些单元格。

reveal Cell(int row, int col, Boolean[][] game board, char[][] answers 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);
            }
        }
    }
}

【问题讨论】:

    标签: java text char multidimensional-array minesweeper


    【解决方案1】:

    不太确定你的问题是什么......是的,看起来不像你问的问题。

    只是一个建议,也许创建一个MineSweeperBoard 类可能是个好主意,并让这些都是该类的公共非静态方法。老师们总是希望看到一年级学生掌握面向对象编程并能够从问题中解脱出来。

    编辑。此外,您的方法中可能不应该有 System.out.println(...) 应该在游戏板状态下工作的东西。这会产生副作用并打破每个方法想法的一项任务。而是让处理输入/输出的任何方法在调用此方法之前决定输入是否合适。理想情况下,如果有人确实向某个方法提供了错误数据,那么您应该让这些方法抛出 IllegalArgumentExceptions,但您可能还没有涵盖这一点。

    祝你项目和考试的其余部分好运!!

    【讨论】:

    • 我要做的是将我的初始板、第二个显示状态表示和打印板和显示单元方法合并到一个游戏循环中,询问用户他们想要的单元格的坐标显示并检查玩家是赢还是输。但我就是想不通。
    猜你喜欢
    • 2021-02-28
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-11-15
    • 2020-03-06
    相关资源
    最近更新 更多