掃雷是一款經典的益智游戲,玩家需要根據數字提示避開地雷并揭開所有安全的方塊。本文將介紹如何使用Java語言實現一個簡單的掃雷小游戲。
在開始編寫代碼之前,我們需要明確游戲的基本規則和設計思路:
首先,我們需要創建一個二維數組來表示棋盤。每個方塊可以用一個對象來表示,包含以下屬性:
isMine
:表示該方塊是否為地雷。isRevealed
:表示該方塊是否已被揭開。neighborMines
:表示該方塊周圍的地雷數量。class Cell {
boolean isMine;
boolean isRevealed;
int neighborMines;
public Cell() {
this.isMine = false;
this.isRevealed = false;
this.neighborMines = 0;
}
}
在游戲開始時,我們需要初始化棋盤,隨機放置地雷,并計算每個方塊周圍的地雷數量。
class MineSweeper {
private Cell[][] board;
private int size;
private int mines;
public MineSweeper(int size, int mines) {
this.size = size;
this.mines = mines;
this.board = new Cell[size][size];
initializeBoard();
placeMines();
calculateNeighborMines();
}
private void initializeBoard() {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
board[i][j] = new Cell();
}
}
}
private void placeMines() {
Random random = new Random();
int placedMines = 0;
while (placedMines < mines) {
int x = random.nextInt(size);
int y = random.nextInt(size);
if (!board[x][y].isMine) {
board[x][y].isMine = true;
placedMines++;
}
}
}
private void calculateNeighborMines() {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (!board[i][j].isMine) {
board[i][j].neighborMines = countNeighborMines(i, j);
}
}
}
}
private int countNeighborMines(int x, int y) {
int count = 0;
for (int i = Math.max(0, x - 1); i <= Math.min(size - 1, x + 1); i++) {
for (int j = Math.max(0, y - 1); j <= Math.min(size - 1, y + 1); j++) {
if (board[i][j].isMine) {
count++;
}
}
}
return count;
}
}
接下來,我們需要實現游戲的邏輯,包括揭開方塊、判斷游戲是否結束等。
class MineSweeper {
// ... 之前的代碼
public void revealCell(int x, int y) {
if (x < 0 || x >= size || y < 0 || y >= size || board[x][y].isRevealed) {
return;
}
board[x][y].isRevealed = true;
if (board[x][y].isMine) {
gameOver(false);
} else if (board[x][y].neighborMines == 0) {
for (int i = Math.max(0, x - 1); i <= Math.min(size - 1, x + 1); i++) {
for (int j = Math.max(0, y - 1); j <= Math.min(size - 1, y + 1); j++) {
revealCell(i, j);
}
}
}
checkWin();
}
private void gameOver(boolean win) {
if (win) {
System.out.println("恭喜你,你贏了!");
} else {
System.out.println("很遺憾,你踩到地雷了!");
}
System.exit(0);
}
private void checkWin() {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (!board[i][j].isMine && !board[i][j].isRevealed) {
return;
}
}
}
gameOver(true);
}
}
最后,我們需要實現用戶交互部分,允許玩家輸入坐標來揭開方塊。
class MineSweeper {
// ... 之前的代碼
public void play() {
Scanner scanner = new Scanner(System.in);
while (true) {
printBoard();
System.out.print("請輸入要揭開的方塊坐標(x y):");
int x = scanner.nextInt();
int y = scanner.nextInt();
revealCell(x, y);
}
}
private void printBoard() {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
if (board[i][j].isRevealed) {
if (board[i][j].isMine) {
System.out.print("* ");
} else {
System.out.print(board[i][j].neighborMines + " ");
}
} else {
System.out.print(". ");
}
}
System.out.println();
}
}
}
現在,我們可以創建一個MineSweeper
對象并調用play
方法來運行游戲。
public class Main {
public static void main(String[] args) {
MineSweeper game = new MineSweeper(10, 10);
game.play();
}
}
通過以上步驟,我們實現了一個簡單的掃雷游戲。這個游戲雖然功能較為基礎,但涵蓋了Java編程中的數組、循環、條件判斷、隨機數生成等基本知識點。你可以在此基礎上進一步擴展,例如增加計時器、標記地雷、調整難度等功能,使游戲更加完善和有趣。
希望本文對你理解如何使用Java實現掃雷小游戲有所幫助!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。