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图片,游戏非常适合一些新手的 ...
随机推荐
- 用 Numba 加速 Python 代码
原文出自微信公众号:Python那些事 一.介绍 pip install numba Numba 是 python 的即时(Just-in-time)编译器,即当你调用 python 函数时,你的全部 ...
- spring-boot记录sql探索
目标记录每次请求内的http.es.mysql耗时,本篇讨论mysql部分 为什么说要探索,这不是很简单的事么?但是能满足以下几点么? 能记录limit等参数 能将参数和sql写一起,能直接使用 能记 ...
- Android 之 SimpleAdapter 学习笔记
•SimpleAdapter简介 simpleAdapter 的扩展性最好,可以定义各种各样的布局出来: 可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框) ...
- K8S 上部署 Redis-cluster 三主三从 集群
介绍 Redis代表REmote DIctionary Server是一种开源的内存中数据存储,通常用作数据库,缓存或消息代理.它可以存储和操作高级数据类型,例如列表,地图,集合和排序集合. 由于Re ...
- MyBatis笔记(七)
1. 简介 什么是缓存? 存在内存中的临时数据 将用户经常查询的数据存放在缓存(内存)中,用户取查询就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问 ...
- python学习 -- operator.itemgetter(), list.sort/sorted 以及lambda函数
Python 中有非常方便高效的排序函数,下面主要介绍如何sort/sorted对list,dict进行排序. 1. 用list.sort /sorted 对list of tuples中第二个值进行 ...
- 请使用管理员权限执行pip install命令
重要的事情说三遍! 请使用管理员权限执行pip install命令 请使用管理员权限执行pip install命令 请使用管理员权限执行pip install命令 踩坑记录 当时一切还是从一题Misc ...
- Java学习IO流第一天
今日内容介绍 字节流 字符流 1 字节流 在前面的学习过程中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现在我们就要开始给文件中写数据,或者读取文件中的数据. 1.1 字节输出流Ou ...
- 记一次 .NET WPF布草管理系统 挂死分析
一:背景 1. 讲故事 这几天看的 dump 有点多,有点伤神伤脑,晚上做梦都是dump,今天早上头晕晕的到公司就听到背后同事抱怨他负责的WPF程序挂死了,然后测试的小姑娘也跟着抱怨...嗨,也不知道 ...
- 假如kubernetes不支持docker了该怎么办
假如kubernetes不支持docker了该怎么办 从官网安装文档可以看到kubernetes支持一下几种: https://kubernetes.io/docs/setup/production- ...