package game;import java.util.Random;
import java.util.Scanner;public class Minesweeper {private int[][] board; // 扫雷面板private boolean[][] revealed; // 已经翻开的方块private final int mineCount; // 总雷数private int remainingMines; // 剩余雷数private boolean gameEnd; // 游戏是否结束public Minesweeper(int rows, int cols, int mineCount) {this.board = new int[rows][cols];this.revealed = new boolean[rows][cols];this.mineCount = mineCount;this.remainingMines = mineCount;this.gameEnd = false;setMines();setNumber();}// 随机设置雷private void setMines() {Random random = new Random();int count = 0;while (count < mineCount) {int row = random.nextInt(board.length);int col = random.nextInt(board[0].length);if (board[row][col] != -1) {board[row][col] = -1;count++;}}}// 设置数字(表示周围的雷数)private void setNumber() {for (int i = 0; i < board.length; i++) {for (int j = 0; j < board[0].length; j++) {if (board[i][j] == -1) {continue;}int count = 0;for (int r = i - 1; r <= i + 1; r++) {for (int c = j - 1; c <= j + 1; c++) {if (r >= 0 && r < board.length && c >= 0 && c < board[0].length && board[r][c] == -1) {count++;}}}board[i][j] = count;}}}// 输出当前局面public void printBoard() {System.out.print("  ");for (int i = 0; i < board[0].length; i++) {System.out.print(i + " ");}System.out.println();for (int i = 0; i < board.length; i++) {System.out.print(i + " ");for (int j = 0; j < board[0].length; j++) {if (!revealed[i][j]) {System.out.print("* ");} else if (board[i][j] == -1) {System.out.print("X ");} else {System.out.print(board[i][j] + " ");}}System.out.println();}}// 翻开指定位置的方块,并判断游戏是否结束private void reveal(int row, int col) {if (revealed[row][col]) {return;}revealed[row][col] = true;if (board[row][col] == -1) {gameEnd = true;System.out.println("很遗憾,你输了!");return;}if (--remainingMines == 0) {gameEnd = true;System.out.println("恭喜你,你赢了!");return;}if (board[row][col] == 0) {for (int r = row - 1; r <= row + 1; r++) {for (int c = col - 1; c <= col + 1; c++) {if (r >= 0 && r < board.length && c >= 0 && c < board[0].length) {reveal(r, c);}}}}}// 开始游戏public void play() {Scanner scanner = new Scanner(System.in);while (!gameEnd) {System.out.println("当前雷数:" + remainingMines);printBoard();System.out.println("请输入行列坐标(用空格分隔):");int row = scanner.nextInt();int col = scanner.nextInt();if (row < 0 || row >= board.length || col < 0 || col >= board[0].length) {System.out.println("输入不合法,请重新输入!");continue;}reveal(row, col);}scanner.close();}public static void main(String[] args) {Minesweeper game = new Minesweeper(10, 10, 10);game.play();}
}

java小游戏之扫雷相关推荐

  1. JAVA小游戏之扫雷的源代码

    老师讲的扫雷小游戏,因为基础还不扎实,所以还写不出扫雷游戏,大家可以看看尝试去写写. ------------------------------------ //测试类 package com.ti ...

  2. 制作Java小游戏~扫雷游戏

    上大学之前没必要去花钱培训哈.四年的时间足够自学了 可以参考我一下的建议: 看一些视频和书籍,注意你需要把基础打好.现在小破站上等很多第三方网站上有免费的,其实质量很不错的我把我自己整理的一些比较好的 ...

  3. java小游戏-扫雷游戏

    java小游戏-ava小游戏-扫雷游戏 1 窗口绘制 2 雷区绘制 3 界面规划 4 底层地图 5 地雷生成 6 地雷重合 7 数字生成 8 顶层绘制 9 双缓存技术 10 鼠标事件 11 左键翻开 ...

  4. linux小型游戏系统设计,Linux平台下基于JAVA小游戏_设计文档.doc

    Linux课程设计报告 课题名称:<Linux平台下基于java小游戏设计> 专 业:2011级计算机科学与技术 组 长:043佘清泉 组 员:007陈威达 008陈学仁 026赖华标 0 ...

  5. 各种经典java小游戏_Java是这个世界上最好的语言!

    为什么? 请看TIOBE最新发布的编程语言排行榜: TIOBE开发语言排行榜每月更新一次,其结果可以用来检阅开发者的编程技能能否跟上趋势,或是否有必要作出战略改变,以及什么编程语言是应该及时掌握的. ...

  6. Java小游戏:模仿微信群发红包

    Java小游戏:模仿微信群发红包 微信群主发普通红包,普通红包规则: 群主的一笔金额,从群主余额中扣除,平均分成n等分,让群员领取. 成员领取红包后,保存到余额中. 请根据规则,完成案例中所有类的定义 ...

  7. 《Java小游戏实现》:坦克大战

    <Java小游戏实现>:坦克大战 前面写了一个简单的聊天小程序,今天开始就写一个坦克大战的游戏,算是对Java相关小知识点的一个应用. 这个游戏的完成,我们也是分步完成,逐步累加,一个一个 ...

  8. 【C语言小游戏】扫雷

    hello,大家好,今天我们继续为大家带来一个小游戏,扫雷.相信这个游戏又是很多人的童年,那么我们今天就来实现一下这个扫雷游戏. 目录 一.游戏简介 二.游戏的基本设计 1.游戏基本思路 2.游戏基本 ...

  9. java小游戏-超级玛丽

    java小游戏-java小游戏-超级玛丽 1 创建窗口 2 创建并完成常量类 3 创建背景类 4 绘制背景类 5 创建障碍物 6 第一关的设计 7 第二关的设计 8 第三关的设计 9 创建马里奥类 1 ...

最新文章

  1. 用命令行工具创建 NuGet 程序包
  2. java 协程 实现 Akka
  3. linux 系统日志路径作用 简介
  4. python最好的教程_喜大普奔~可能是最好的Python教程
  5. 改善Java应用程序性能的快速技巧
  6. jsp页面 如何通过el表达式获取request属性值
  7. .net页面生命周期
  8. python pandas读取文件内容_python pandas读取大型文件
  9. 微信小程序代码体积压缩到最小
  10. 如何把鼠标宏用c语言写出来,鼠标宏怎么设置,手把手教你鼠标如何设置宏
  11. 分布式存储问题及解决方案
  12. python nonetype iterable_无法解决“NoneType”对象不是iterable类型
  13. r语言 新增一列数字类型_R语言实战(2)——创建数据集【学习分享】
  14. Java web video 视频开发
  15. 鸿蒙华为畅享10plus,华为畅享10 Plus四配色曝光 款款都是高颜值
  16. 两个电阻的并联与串联
  17. 创意01:网上3D试衣间
  18. 外贸网站最好用的5大WordPress插件【必须安装】
  19. 10 降维算法(PCA降维/LDA分类/NMF非负矩阵)
  20. 第一章 Caché 函数大全 $ASCII 函数

热门文章

  1. 20170206(计算机网络名词解析)
  2. Python 写入XLSX文件的几种方法
  3. 达梦数据库监控正在执行的长SQL
  4. unable to register MBean
  5. MariaDB的安装步骤
  6. 图像的放大:双三次插值算法(C++实现)
  7. ios怎么用spotify_在iOS中通过Spotify进行身份验证
  8. 为什么说社区团购小程序开发更有利于社区团购模式开展?
  9. 有源带通滤波器电路频率案例
  10. 简单工厂模式---女娲造人