1. package com.xz.sl;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Container;
  6. import java.awt.GridLayout;
  7. import java.awt.Insets;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.util.Random;
  11.  
  12. import javax.swing.JButton;
  13. import javax.swing.JFrame;
  14. import javax.swing.JOptionPane;
  15.  
  16. public class Saolei extends JFrame{
  17.  
  18. final int ROW = 20;
  19. final int COL = 20;
  20. final int LEI = 30;
  21. JButton[][] buttons = new JButton[ROW][COL];
  22. int[][] counts = new int[ROW][COL];
  23. final int LCODE = 11; //雷的编码
  24.  
  25. Container container = new Container();
  26.  
  27. public Saolei() {
  28. init();
  29.  
  30. }
  31.  
  32. private void init() {
  33. JButton restBtn = new JButton("重来");
  34. restBtn.setOpaque(true);
  35. restBtn.setBackground(Color.PINK);
  36. restBtn.addActionListener(new ActionListener() {
  37.  
  38. @Override
  39. public void actionPerformed(ActionEvent e) {
  40. for(int i=0;i<ROW;i++) {
  41. for(int j=0;j<COL;j++) {
  42. buttons[i][j].setText("");
  43. buttons[i][j].setEnabled(true);
  44. buttons[i][j].setBackground(Color.YELLOW);
  45. counts[i][j] = 0;
  46.  
  47. }
  48. }
  49. mailei();
  50. jslsl();
  51. }
  52. });
  53.  
  54. setLayout(new BorderLayout());
  55. add(restBtn,BorderLayout.NORTH);
  56. add(container,BorderLayout.CENTER);
  57. container.setLayout(new GridLayout(ROW,COL));
  58. for(int i=0;i<ROW;i++) {
  59. for(int j=0;j<COL;j++) {
  60. JButton button = new JButton();
  61. button.setMargin(new Insets(0, 0, 0, 0));
  62. button.setBackground(Color.YELLOW);
  63. button.setOpaque(true);
  64. buttons[i][j] = button;
  65. button.addActionListener(new ActionListener() {
  66.  
  67. @Override
  68. public void actionPerformed(ActionEvent e) {
  69. JButton button = (JButton) e.getSource();
  70. if(button.equals(restBtn)) {
  71.  
  72. }else {
  73. int count = 0;
  74. for(int i=0;i<ROW;i++) {
  75. for(int j=0;j<COL;j++) {
  76. if(button.equals(buttons[i][j])) {
  77. count = counts[i][j];
  78. //踩到雷了
  79. if(count == LEI) {
  80. clcl();
  81. }else {
  82. openCell(i,j);
  83. checkWin();
  84. }
  85. return;
  86. }
  87. }
  88. }
  89. }
  90. }
  91.  
  92. private void checkWin() {
  93. for(int i=0;i<ROW;i++) {
  94. for(int j=0;j<COL;j++) {
  95. //说明还没有赢
  96. if(buttons[i][j].isEnabled() == true && counts[i][j] != LEI) {
  97. return;
  98. }
  99. }
  100. }
  101.  
  102. JOptionPane.showMessageDialog(container, "恭喜您赢了...");
  103.  
  104. }
  105.  
  106. private void openCell(int i,int j ) {
  107.  
  108. //如果格子已经打开,直接返回
  109. if(buttons[i][j].isEnabled() == false) {
  110. return ;
  111. }
  112.  
  113. buttons[i][j].setText(counts[i][j]+"");
  114. buttons[i][j].setEnabled(false);
  115. buttons[i][j].setBackground(Color.CYAN);
  116.  
  117. if(counts[i][j] == 0) {
  118. //左上角
  119. if(i > 0 && j > 0 && counts[i-1][j-1] != LEI) {
  120. openCell(i-1, j-1);
  121. }
  122.  
  123. if(i > 0 && j > 0 && counts[i-1][j] != LEI) {
  124. openCell(i-1, j);
  125. }
  126.  
  127. if(i > 0 && j < 19 && counts[i-1][j+1] != LEI) {
  128. openCell(i-1, j+1);
  129. }
  130.  
  131. if(i > 0 && j > 0 && counts[i][j-1] != LEI) {
  132. openCell(i, j-1);
  133. }
  134.  
  135. if(i > 0 && j < 19 && counts[i][j+1] != LEI) {
  136. openCell(i, j+1);
  137. }
  138.  
  139. if(i < 19 && j > 0 && counts[i+1][j-1] != LEI) {
  140. openCell(i+1, j-1);
  141. }
  142.  
  143. if(i < 19 && j > 0 && counts[i+1][j] != LEI) {
  144. openCell(i+1, j);
  145. }
  146.  
  147. if(i < 19 && j < 19 && counts[i+1][j+1] != LEI) {
  148. openCell(i+1, j+1);
  149. }
  150. }else {
  151. buttons[i][j].setText(counts[i][j]+"");
  152. }
  153. }
  154.  
  155. });
  156. container.add(button);
  157. }
  158. }
  159. mailei();
  160. //计算周边的雷的数量
  161. jslsl();
  162.  
  163. setVisible(true);
  164. setTitle("扫雷游戏");
  165. setResizable(false);
  166. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  167. setSize(600,700);
  168. }
  169.  
  170. private void jslsl() {
  171. for(int i=0;i<ROW;i++) {
  172. for(int j=0;j<COL;j++) {
  173. int count = 0;
  174. if(counts[i][j] == LEI) {
  175. continue;
  176. }
  177.  
  178. //左上角
  179. if(i > 0 && j > 0 && counts[i-1][j-1] == LEI) {
  180. count++;
  181. }
  182.  
  183. if(i > 0 && j > 0 && counts[i-1][j] == LEI) {
  184. count++;
  185. }
  186.  
  187. if(i > 0 && j < 19 && counts[i-1][j+1] == LEI) {
  188. count++;
  189. }
  190.  
  191. if(i > 0 && j > 0 && counts[i][j-1] == LEI) {
  192. count++;
  193. }
  194.  
  195. if(i > 0 && j < 19 && counts[i][j+1] == LEI) {
  196. count++;
  197. }
  198.  
  199. if(i < 19 && j > 0 && counts[i+1][j-1] == LEI) {
  200. count++;
  201. }
  202.  
  203. if(i < 19 && j > 0 && counts[i+1][j] == LEI) {
  204. count++;
  205. }
  206.  
  207. if(i < 19 && j < 19 && counts[i+1][j+1] == LEI) {
  208. count++;
  209. }
  210.  
  211. counts[i][j] = count;
  212. // buttons[i][j].setText(counts[i][j]+" ");
  213.  
  214. }
  215. }
  216. }
  217.  
  218. private void clcl() {
  219. for(int i=0;i<ROW;i++) {
  220. for(int j=0;j<COL;j++) {
  221. int c = counts[i][j];
  222. if(c == LEI) {
  223. buttons[i][j].setText("X");
  224. buttons[i][j].setBackground(Color.RED);
  225. buttons[i][j].setEnabled(false);
  226. }else {
  227. buttons[i][j].setText(c+"");
  228. buttons[i][j].setEnabled(false);
  229. }
  230. }
  231. }
  232. }
  233.  
  234. private void mailei() {
  235. Random random = new Random();
  236. int randRow,randCol;
  237. for(int i=0;i<LEI;i++) {
  238. randRow = random.nextInt(ROW);
  239. randCol = random.nextInt(COL);
  240. if(counts[randRow][randCol] == LEI) {
  241. i--;
  242. }else {
  243. counts[randRow][randCol] = LEI;
  244. // buttons[randRow][randCol].setText(LEI+"");
  245. }
  246. }
  247. }
  248.  
  249. public static void main(String[] args) {
  250. new Saolei();
  251. }
  252.  
  253. }

以上代码纯属练习用,没有经过任何的封装,有兴趣的小伙伴可以自行封装一下哦。

Java版的扫雷游戏源码的更多相关文章

  1. 基于jQuery经典扫雷游戏源码

    分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览   源码下载 实现的代码. html代码: <center> <h1>j ...

  2. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  3. ios版弹珠游戏源码

    这个是我们比较喜欢玩的一直小游戏的,ios版弹珠游戏源码,该游戏源码来着IOS教程网其他网友提供上传的,大家可以了解一下吧. nore_js_op>     <ignore_js_op&g ...

  4. Android版的疯狂猜图游戏源码完整版分享

    这个游戏源码是在安装教程网那么分享过来的,Android版的疯狂猜图游戏源码完整版分享,也是本人之前很早以前发的一款游戏源码的,大家如果想了解一下,可以看看吧,不说多了,上一个图先吧.   > ...

  5. Java写的斗地主游戏源码

    源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...

  6. jQuery网页版五子棋小游戏源码下载

    体验效果:http://hovertree.com/texiao/game/4/ 网页五子棋源代码: <!DOCTYPE html> <html> <head> & ...

  7. Java Swing打猎射击游戏源码

    代码如下 <font size="3">package Game; import java.awt.Graphics; import java.awt.Image; i ...

  8. HTML5小游戏源码收藏

    html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js ...

  9. android版猜拳游戏源码分享

    android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...

随机推荐

  1. PTA 找出不是两个数组共有的元素

    7-2 找出不是两个数组共有的元素 (20 分)   给定两个整型数组,本题要求找出不是两者共有的元素. 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤),随后是N个整数,其间以 ...

  2. [图论]最短路径问题 :Floyed-Warshall

    最短路径问题 目录 最短路径问题 Description Input Output Sample Input Sample Output 解析 了解Floyed算法 Floyed算法的核心思想: 代码 ...

  3. html+css写出响应式侧边导航栏

    html部分:先写用div画好六个导航的卡片,再利用css添加响应效果 <div class='card-holder'> <div class='card-wrapper'> ...

  4. Java中对象的生与灭- 核心篇

    前言 大家好啊,我是汤圆,今天给大家带来的是<Java中对象的生与灭- 核心篇>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦 简介 ...

  5. Dynamics CRM安装教程六:CRM产品安装

    接下来就要开始进行CRM产品的安装了 首先要安装IIS,以及.NET FrameWork4.6及相关功能 打开服务器管理器,在添加角色功能向导中勾选IIS,点击添加功能 默认下一步 选择角色服务这里的 ...

  6. Dynamics CRM安装教程四:DNS配置

    在为MS CRM 配置Claims-based认证之前,你需要在域控服务器的DNS中添加一些记录,来解析CRM的各个断点,添加內容如下(本次环境全部安装在一台机子中): AD FS 服务器(例: ad ...

  7. 软工个人阅读作业2 —— 构建之法与CI/CD

    项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 阅读思考教材,调研软工工具 这个作业在哪个具体方面帮助我实 ...

  8. Scala进阶(1)—— 反射 object 和 class

    1. Scala 的 反射 关于 Scala 反射的具体内容,可以参考官方文档:https://docs.scala-lang.org/overviews/reflection/overview.ht ...

  9. k8s 运行单实例 mysql

    配置文件mysql.yaml --- apiVersion: v1 kind: Service metadata: name: mysql-01 spec: ports: - port: 3306 s ...

  10. 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类

    1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...