Java如何实现简单扫雷程序

发布时间:2022-06-06 14:01:59 作者:iii
来源:亿速云 阅读:159

Java如何实现简单扫雷程序

扫雷是一款经典的益智游戏,玩家需要根据数字提示避开地雷并揭开所有安全区域。本文将介绍如何使用Java实现一个简单的扫雷程序。

1. 游戏规则

扫雷游戏的基本规则如下: - 游戏区域是一个由方格组成的矩形网格。 - 某些方格中隐藏着地雷,其他方格则是安全的。 - 玩家点击一个方格,如果该方格是地雷,则游戏结束;如果是安全方格,则会显示一个数字,表示周围8个方格中有多少个地雷。 - 玩家需要根据数字提示推断出哪些方格是地雷,并标记它们。 - 当所有非地雷方格都被揭开时,玩家获胜。

2. 程序设计

2.1 游戏数据结构

我们可以使用一个二维数组来表示游戏区域。数组中的每个元素可以是一个对象,包含以下信息: - 是否是地雷 - 是否被揭开 - 是否被标记为地雷 - 周围地雷的数量

class Cell {
    boolean isMine;
    boolean isRevealed;
    boolean isFlagged;
    int adjacentMines;
}

2.2 初始化游戏

在游戏开始时,我们需要随机生成地雷并计算每个方格周围的地雷数量。

public class Minesweeper {
    private int rows;
    private int cols;
    private int mineCount;
    private Cell[][] board;

    public Minesweeper(int rows, int cols, int mineCount) {
        this.rows = rows;
        this.cols = cols;
        this.mineCount = mineCount;
        this.board = new Cell[rows][cols];
        initializeBoard();
        placeMines();
        calculateAdjacentMines();
    }

    private void initializeBoard() {
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                board[i][j] = new Cell();
            }
        }
    }

    private void placeMines() {
        Random random = new Random();
        int minesPlaced = 0;
        while (minesPlaced < mineCount) {
            int row = random.nextInt(rows);
            int col = random.nextInt(cols);
            if (!board[row][col].isMine) {
                board[row][col].isMine = true;
                minesPlaced++;
            }
        }
    }

    private void calculateAdjacentMines() {
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if (!board[i][j].isMine) {
                    board[i][j].adjacentMines = countAdjacentMines(i, j);
                }
            }
        }
    }

    private int countAdjacentMines(int row, int col) {
        int count = 0;
        for (int i = row - 1; i <= row + 1; i++) {
            for (int j = col - 1; j <= col + 1; j++) {
                if (i >= 0 && i < rows && j >= 0 && j < cols && board[i][j].isMine) {
                    count++;
                }
            }
        }
        return count;
    }
}

2.3 玩家操作

玩家可以进行两种操作:揭开方格和标记方格。

public class Minesweeper {
    // ... 其他代码

    public void revealCell(int row, int col) {
        if (board[row][col].isRevealed || board[row][col].isFlagged) {
            return;
        }
        board[row][col].isRevealed = true;
        if (board[row][col].isMine) {
            gameOver();
        } else if (board[row][col].adjacentMines == 0) {
            revealAdjacentCells(row, col);
        }
        checkWin();
    }

    private void revealAdjacentCells(int row, int col) {
        for (int i = row - 1; i <= row + 1; i++) {
            for (int j = col - 1; j <= col + 1; j++) {
                if (i >= 0 && i < rows && j >= 0 && j < cols) {
                    revealCell(i, j);
                }
            }
        }
    }

    public void toggleFlag(int row, int col) {
        if (!board[row][col].isRevealed) {
            board[row][col].isFlagged = !board[row][col].isFlagged;
        }
    }

    private void gameOver() {
        System.out.println("Game Over!");
        // 显示所有地雷
    }

    private void checkWin() {
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if (!board[i][j].isMine && !board[i][j].isRevealed) {
                    return;
                }
            }
        }
        System.out.println("You Win!");
    }
}

2.4 显示游戏界面

我们可以使用简单的文本界面来显示游戏状态。

public class Minesweeper {
    // ... 其他代码

    public void displayBoard() {
        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                if (board[i][j].isRevealed) {
                    if (board[i][j].isMine) {
                        System.out.print("* ");
                    } else {
                        System.out.print(board[i][j].adjacentMines + " ");
                    }
                } else if (board[i][j].isFlagged) {
                    System.out.print("F ");
                } else {
                    System.out.print(". ");
                }
            }
            System.out.println();
        }
    }
}

3. 主程序

最后,我们可以编写一个简单的主程序来运行游戏。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Minesweeper game = new Minesweeper(10, 10, 10);
        Scanner scanner = new Scanner(System.in);

        while (true) {
            game.displayBoard();
            System.out.print("Enter command (r row col to reveal, f row col to flag): ");
            String command = scanner.next();
            int row = scanner.nextInt();
            int col = scanner.nextInt();

            if (command.equals("r")) {
                game.revealCell(row, col);
            } else if (command.equals("f")) {
                game.toggleFlag(row, col);
            }
        }
    }
}

4. 总结

通过以上步骤,我们实现了一个简单的扫雷游戏。这个程序可以进一步扩展,例如添加图形界面、增加难度级别、记录玩家成绩等。希望这篇文章能帮助你理解如何使用Java实现扫雷游戏。

推荐阅读:
  1. java小项目之:扫雷,这游戏其实没有那么简单!
  2. C语言怎样实现简单扫雷游戏

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:Java开启多线程的方法有哪些

下一篇:win10更新后无法共享打印机如何解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》