用Java编写扫雷游戏

  扫雷不能不说一款非常经典的游戏,无聊时候可以打发时间,虽然玩了很久,但还不知道它是怎么写的,所以自己就尝试动手做了个。

  众所周知,java的swing采用mvc模式,即模型-视图-控制器,所以如果真的了解了这个模式,较c++,用java做个游戏还是比较容易的。下面是我写的扫雷的代码

  import java.awt.*;

  import java.io.*;

  import java.net.URL;

  import java.awt.geom.*;

  import java.awt.event.*;

  import javax.swing.*;

  import java.util.ArrayDeque;

  import java.util.ArrayList;

  import java.util.concurrent.*;

  public class MineSweep

  {

  public static void main(String[] args)

  {

  JFrame frame = new MineFrame(www.ttays.com);

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  frame.setVisible(true);

  }

  }

  class MineFrame extends JFrame

  {

  private JPanel buttonPanel;

  private MinePanel mp;

  private int rn,cn;

  public static final int DEFAULT_WIDTH = 650;

  public static final int DEFAULT_HEIGHT = 450;

  public static final int DEFAULT_CN = 9;

  public static final int DEFAULT_RN = 9;

  public JLabel remainMine;

  public JLabel mes;

  private JComboBox cb;

  public MineFrame()

  {

  setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);

  setTitle("扫雷");

  mp = new MinePanel(DEFAULT_CN,DEFAULT_RN,this);

  mp.setMinenum(10);

  mp.setRC(9,9);

  buttonPanel = new JPanel();

  add(mp,BorderLayout.CENTER);

  mes = new JLabel("");

  mes.setEnabled(false);

  add(mes,BorderLayout.EAST);

  cb = new JComboBox();

  cb.setEditable(true);

  cb.addItem("初级");

  cb.addItem("中级");

  cb.addItem("高级");

  cb.addActionListener(new ActionListener()

  {

  public void actionPerformed(ActionEvent e)

  {

  int index = cb.getSelectedIndex();

  System.out.println(index);

  switch(index)

  {

  case 0:

  mp.setMinenum(10);

  mp.setRC(9,9);

  break;

  case 1:

  mp.setMinenum(40);

  mp.setRC(16,16);

  break;

  case 2:

  mp.setMinenum(99);

  mp.setRC(30,16);

  break;

  }

  }

  }

  );

当然可以。以下是Java编写扫雷游戏的代码示例: ```java import java.util.Scanner; import java.util.Random; public class Minesweeper { public static void main(String[] args) { int rows = 10; // 游戏界面的行数 int cols = 10; // 游戏界面的列数 int bombs = 10; // 雷的数量 Scanner scanner = new Scanner(System.in); Random random = new Random(); int[][] board = new int[rows][cols]; // 存放游戏界面的数字 boolean[][] revealed = new boolean[rows][cols]; // 记录每个方格是否已经被揭示 // 将所有方格的数字初始化为0 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { board[i][j] = 0; } } // 在随机位置放置雷 int count = 0; while (count < bombs) { int i = random.nextInt(rows); int j = random.nextInt(cols); if (board[i][j] == 0) { board[i][j] = -1; // -1表示这个方格是雷 count++; } } // 计算每个非雷方格周围的雷的数量 for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (board[i][j] == 0) { int numBombs = 0; for (int di = -1; di <= 1; di++) { for (int dj = -1; dj <= 1; dj++) { int ni = i + di; int nj = j + dj; if (ni >= 0 && ni < rows && nj >= 0 && nj < cols && board[ni][nj] == -1) { numBombs++; } } } board[i][j] = numBombs; } } } // 开始游戏循环 while (true) { // 打印游戏界面 System.out.println(" 0123456789"); System.out.println(" ----------"); for (int i = 0; i < rows; i++) { System.out.print(i + "|"); for (int j = 0; j < cols; j++) { if (revealed[i][j]) { if (board[i][j] == -1) { System.out.print("*"); } else { System.out.print(board[i][j]); } } else { System.out.print("."); } } System.out.println("|" + i); } System.out.println(" ----------"); // 让用户输入下一步操作 System.out.print("Enter row and column: "); int row = scanner.nextInt(); int col = scanner.nextInt(); String action = scanner.nextLine().trim(); if (action.equals("flag")) { // 标记一个方格是雷 if (!revealed[row][col]) { if (board[row][col] == -1) { System.out.println("Correct!"); revealed[row][col] = true; } else { System.out.println("Incorrect!"); } } else { System.out.println("Already revealed!"); } } else if (action.equals("reveal")) { // 揭示一个方格 if (!revealed[row][col]) { if (board[row][col] == -1) { System.out.println("Game over!"); return; } else { System.out.println("Correct!"); revealed[row][col] = true; } } else { System.out.println("Already revealed!"); } } else { System.out.println("Unknown action!"); } // 检查游戏是否结束 boolean allRevealed = true; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { if (!revealed[i][j]) { allRevealed = false; break; } } } if (allRevealed) { System.out.println("You win!"); return; } } } } ``` 这是一个基于控制台的简单扫雷游戏实现,你可以根据需要进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值