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图片,游戏非常适合一些新手的 ...
随机推荐
- PTA 找出不是两个数组共有的元素
7-2 找出不是两个数组共有的元素 (20 分) 给定两个整型数组,本题要求找出不是两者共有的元素. 输入格式: 输入分别在两行中给出两个整型数组,每行先给出正整数N(≤),随后是N个整数,其间以 ...
- [图论]最短路径问题 :Floyed-Warshall
最短路径问题 目录 最短路径问题 Description Input Output Sample Input Sample Output 解析 了解Floyed算法 Floyed算法的核心思想: 代码 ...
- html+css写出响应式侧边导航栏
html部分:先写用div画好六个导航的卡片,再利用css添加响应效果 <div class='card-holder'> <div class='card-wrapper'> ...
- Java中对象的生与灭- 核心篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中对象的生与灭- 核心篇>,希望对大家有帮助,谢谢 文章纯属原创,个人总结难免有差错,如果有,麻烦在评论区回复或后台私信,谢啦 简介 ...
- Dynamics CRM安装教程六:CRM产品安装
接下来就要开始进行CRM产品的安装了 首先要安装IIS,以及.NET FrameWork4.6及相关功能 打开服务器管理器,在添加角色功能向导中勾选IIS,点击添加功能 默认下一步 选择角色服务这里的 ...
- Dynamics CRM安装教程四:DNS配置
在为MS CRM 配置Claims-based认证之前,你需要在域控服务器的DNS中添加一些记录,来解析CRM的各个断点,添加內容如下(本次环境全部安装在一台机子中): AD FS 服务器(例: ad ...
- 软工个人阅读作业2 —— 构建之法与CI/CD
项目 内容 这个作业属于哪个课程 2021春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 个人阅读作业#2 我在这个课程的目标是 阅读思考教材,调研软工工具 这个作业在哪个具体方面帮助我实 ...
- Scala进阶(1)—— 反射 object 和 class
1. Scala 的 反射 关于 Scala 反射的具体内容,可以参考官方文档:https://docs.scala-lang.org/overviews/reflection/overview.ht ...
- k8s 运行单实例 mysql
配置文件mysql.yaml --- apiVersion: v1 kind: Service metadata: name: mysql-01 spec: ports: - port: 3306 s ...
- 无所不能的PowerMock,mock私有方法,静态方法,测试私有方法,final类
1.为什么要用mock 我的一本书的解释: (1)创建所需的DB数据可能需要很长时间,如:调用别的接口,模拟很多数据 (2)调用第三方API接口,测试很慢, (3)编写满足所有外部依赖的测试可能很复杂 ...