Java版的扫雷游戏源码
package com.xz.sl; import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane; public class Saolei extends JFrame{ final int ROW = 20;
final int COL = 20;
final int LEI = 30;
JButton[][] buttons = new JButton[ROW][COL];
int[][] counts = new int[ROW][COL];
final int LCODE = 11; //雷的编码 Container container = new Container(); public Saolei() {
init(); } private void init() {
JButton restBtn = new JButton("重来");
restBtn.setOpaque(true);
restBtn.setBackground(Color.PINK);
restBtn.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
buttons[i][j].setText("");
buttons[i][j].setEnabled(true);
buttons[i][j].setBackground(Color.YELLOW);
counts[i][j] = 0; }
}
mailei();
jslsl();
}
}); setLayout(new BorderLayout());
add(restBtn,BorderLayout.NORTH);
add(container,BorderLayout.CENTER);
container.setLayout(new GridLayout(ROW,COL));
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
JButton button = new JButton();
button.setMargin(new Insets(0, 0, 0, 0));
button.setBackground(Color.YELLOW);
button.setOpaque(true);
buttons[i][j] = button;
button.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
if(button.equals(restBtn)) { }else {
int count = 0;
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
if(button.equals(buttons[i][j])) {
count = counts[i][j];
//踩到雷了
if(count == LEI) {
clcl();
}else {
openCell(i,j);
checkWin();
}
return;
}
}
}
}
} private void checkWin() {
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
//说明还没有赢
if(buttons[i][j].isEnabled() == true && counts[i][j] != LEI) {
return;
}
}
} JOptionPane.showMessageDialog(container, "恭喜您赢了..."); } private void openCell(int i,int j ) { //如果格子已经打开,直接返回
if(buttons[i][j].isEnabled() == false) {
return ;
} buttons[i][j].setText(counts[i][j]+"");
buttons[i][j].setEnabled(false);
buttons[i][j].setBackground(Color.CYAN); if(counts[i][j] == 0) {
//左上角
if(i > 0 && j > 0 && counts[i-1][j-1] != LEI) {
openCell(i-1, j-1);
} if(i > 0 && j > 0 && counts[i-1][j] != LEI) {
openCell(i-1, j);
} if(i > 0 && j < 19 && counts[i-1][j+1] != LEI) {
openCell(i-1, j+1);
} if(i > 0 && j > 0 && counts[i][j-1] != LEI) {
openCell(i, j-1);
} if(i > 0 && j < 19 && counts[i][j+1] != LEI) {
openCell(i, j+1);
} if(i < 19 && j > 0 && counts[i+1][j-1] != LEI) {
openCell(i+1, j-1);
} if(i < 19 && j > 0 && counts[i+1][j] != LEI) {
openCell(i+1, j);
} if(i < 19 && j < 19 && counts[i+1][j+1] != LEI) {
openCell(i+1, j+1);
}
}else {
buttons[i][j].setText(counts[i][j]+"");
}
} });
container.add(button);
}
}
mailei();
//计算周边的雷的数量
jslsl(); setVisible(true);
setTitle("扫雷游戏");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,700);
} private void jslsl() {
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
int count = 0;
if(counts[i][j] == LEI) {
continue;
} //左上角
if(i > 0 && j > 0 && counts[i-1][j-1] == LEI) {
count++;
} if(i > 0 && j > 0 && counts[i-1][j] == LEI) {
count++;
} if(i > 0 && j < 19 && counts[i-1][j+1] == LEI) {
count++;
} if(i > 0 && j > 0 && counts[i][j-1] == LEI) {
count++;
} if(i > 0 && j < 19 && counts[i][j+1] == LEI) {
count++;
} if(i < 19 && j > 0 && counts[i+1][j-1] == LEI) {
count++;
} if(i < 19 && j > 0 && counts[i+1][j] == LEI) {
count++;
} if(i < 19 && j < 19 && counts[i+1][j+1] == LEI) {
count++;
} counts[i][j] = count;
// buttons[i][j].setText(counts[i][j]+" "); }
}
} private void clcl() {
for(int i=0;i<ROW;i++) {
for(int j=0;j<COL;j++) {
int c = counts[i][j];
if(c == LEI) {
buttons[i][j].setText("X");
buttons[i][j].setBackground(Color.RED);
buttons[i][j].setEnabled(false);
}else {
buttons[i][j].setText(c+"");
buttons[i][j].setEnabled(false);
}
}
}
} private void mailei() {
Random random = new Random();
int randRow,randCol;
for(int i=0;i<LEI;i++) {
randRow = random.nextInt(ROW);
randCol = random.nextInt(COL);
if(counts[randRow][randCol] == LEI) {
i--;
}else {
counts[randRow][randCol] = LEI;
// buttons[randRow][randCol].setText(LEI+"");
}
}
} public static void main(String[] args) {
new Saolei();
} }
以上代码纯属练习用,没有经过任何的封装,有兴趣的小伙伴可以自行封装一下哦。
Java版的扫雷游戏源码的更多相关文章
- 基于jQuery经典扫雷游戏源码
分享一款基于jQuery经典扫雷游戏源码.这是一款网页版扫雷小游戏特效代码下载.效果图如下: 在线预览 源码下载 实现的代码. html代码: <center> <h1>j ...
- html5 canvas简易版捕鱼达人游戏源码
插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...
- ios版弹珠游戏源码
这个是我们比较喜欢玩的一直小游戏的,ios版弹珠游戏源码,该游戏源码来着IOS教程网其他网友提供上传的,大家可以了解一下吧. nore_js_op> <ignore_js_op&g ...
- Android版的疯狂猜图游戏源码完整版分享
这个游戏源码是在安装教程网那么分享过来的,Android版的疯狂猜图游戏源码完整版分享,也是本人之前很早以前发的一款游戏源码的,大家如果想了解一下,可以看看吧,不说多了,上一个图先吧. > ...
- Java写的斗地主游戏源码
源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...
- jQuery网页版五子棋小游戏源码下载
体验效果:http://hovertree.com/texiao/game/4/ 网页五子棋源代码: <!DOCTYPE html> <html> <head> & ...
- Java Swing打猎射击游戏源码
代码如下 <font size="3">package Game; import java.awt.Graphics; import java.awt.Image; i ...
- HTML5小游戏源码收藏
html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js ...
- android版猜拳游戏源码分享
android版猜拳游戏源码分享安卓版猜拳游戏源码,该文件中带有安装测试包的,这个游戏源码比较简单的,现在有两个代码,一个自定义VIEW的,一个就是普通的imageView图片,游戏非常适合一些新手的 ...
随机推荐
- Python深入:setuptools进阶
作者:gqtcgq 来源:CSDN 原文:https://blog.csdn.net/gqtcgq/article/details/49519685 Setuptools是Python Distuti ...
- 攻防世界 reverse Guess-the-Number
Guess-the-Number su-ctf-quals-2014 使用jd-gui 反编译jar import java.math.BigInteger; public class guess ...
- 7、MyBatis教程之分页实现
8.分页实现 1.limit实现分页 思考:为什么需要分页? 在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,我们往往使 ...
- 基于SageMath的数学网站——本科毕业开发项目
1 绪论 1.1研究背景 我国是一个拥有15亿人口的大国.其中,据2017年的统计,全国共有大学生2600万左右.如此数量众多的大学生,都会有着学习基础数理课程的需求.而在高校的数学教学中,教授最多最 ...
- kubernetes使用statefulset部署mongoDB 单机版 自定义配置文件、密码等
注: 官方镜像地址: https://hub.docker.com/_/mongo?tab=description docker版的mongo移除了默认的/etc/mongo.conf, 修改了db数 ...
- HTML5和CSS3提高
一.HTML5的新特性 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签.新的表单和新的表单属性等. 这些新特性都有兼容性问题,基本是 IE9+ 以上版本的浏览器才支持,如果不考虑兼容 ...
- A. 1.划分数列
A . 1. 划 分 数 列 A. 1.划分数列 A.1.划分数列 氵水沝淼㵘解析 先预处理,然后公式推(详见代码) Code #include <bits/stdc++.h> using ...
- Java基础 Java-IO流 深入浅出
建议阅读 重要性由高到低 Java基础-3 吃透Java IO:字节流.字符流.缓冲流 廖雪峰Java IO Java-IO流 JAVA设计模式初探之装饰者模式 为什么我觉得 Java 的 IO 很复 ...
- [Python]import使用的疑难杂症与包管理
概念:模块与包 模块module:一般是以.py为后缀的文件,也包括.pyo..pyc..pyd..so和.dll后缀的文件,模块内定义了函数.类以及变量 包package:包是含有若干个模块的文件夹 ...
- 使用gradle插件发布项目到nexus中央仓库
目录 简介 Gradle Nexus Publish Plugin历史 插件的使用 Groovy DSL Kotlin DSL 插件背后的故事 总结 简介 Sonatype 提供了一个叫做开源软件资源 ...