JAVA 扫雷 程序
文件列表

2.主程序入口

3.1部分源代码
package MineSweeper; import java.awt.BorderLayout;
import java.awt.Font;
import java.util.Enumeration;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.Timer;
import javax.swing.UIManager; public class SartFrame extends JFrame{ private static final long serialVersionUID = -1585043387266273492L;
private MineState mineState; // 记雷数
private MineField mineField; // 布置labble和雷数
private MineMenu mineMenu;
private Timer timer;
private Timers timers;
/**
* 游戏是否开始
*/
private boolean isStart;
JLabel jLabel_start = new JLabel(); // 开始图片 public SartFrame() {
// 改变系统默认字体
Font font = new Font("Dialog", Font.PLAIN, 12);
Enumeration<Object> keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof javax.swing.plaf.FontUIResource) {
UIManager.put(key, font);
}
}
this.setTitle("扫雷");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
setIconImage(Tools.iicon); // 利用tools来做的作法 this.setResizable(false); // 这样让窗口不会可放大 // ..................状态栏.....................
mineState = new MineState(this);
this.add(mineState, BorderLayout.NORTH); // ...................雷区......................
mineField = new MineField(this);
this.add(mineField, BorderLayout.CENTER); jLabel_start.setIcon(Tools.start);
this.add(jLabel_start, BorderLayout.CENTER); // ....................菜单栏................
mineMenu = new MineMenu(this);
this.setJMenuBar(mineMenu); // .....................时间................
Tools.time = 0;
timers = new Timers(mineState);
timer = new Timer(1000, timers); // ...................声音...................
// AudioClip s1=loadSound("alarm1.wav"); //AudioClip类的对象s1通过方法 loadSound()装载声音
// public AudioClip loadSound(String filename){ //返回一个AudioClip对象
// URL url=null; //因为newAudioClip()的参数为URL型
// try{
// url=new URL("file:"+filename); //指定文件,“file:"不能少
// }
// catch(MalformedURLException e){ }
// return Applet.newAudioClip(url); //通过newAudioClip(
// )方法装载声音,此方法为JDK后添加的方法,太老的JDK里可能没有
// }
//
//
//
//
pack();
this.setVisible(true);
} // 重新布局
public void restart() { this.remove(mineState); this.remove(mineField); this.remove(jLabel_start); // ..................状态栏.....................
mineState = new MineState(this);
this.add(mineState, BorderLayout.NORTH); // ...................雷区......................
mineField = new MineField(this);
this.add(mineField, BorderLayout.CENTER); // .....................时间................
Tools.time = 0;
Timers timers = new Timers(mineState);
timer = new Timer(1000, timers); pack();
validate();// 刷新窗体
} public static long getSerialversionuid() {
return serialVersionUID;
} public MineState getMineState() {
return mineState;
} public MineField getMineField() {
return mineField;
} public MineMenu getMineMenu() {
return mineMenu;
} public Timer getTimer() {
return timer;
} public Timers getTimers() {
return timers;
} public boolean isStart() {
return isStart;
} public void setStart(boolean isStart) {
this.isStart = isStart;
} public static void main(String[] args) {
new SartFrame();
}
}
SartFrame.java
About.java
package MineSweeper; import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField; public class About extends JDialog {
private static final long serialVersionUID = 1L;
private JTextField jTextField1,jTextField2,jTextField3;
private JButton butyes,butno;
SartFrame sartFrame;
public About(SartFrame sartFrame) {
this.sartFrame = sartFrame;
this.setTitle("");
this.setLocationRelativeTo(null);
this.setModal(true);
this.setSize(new Dimension(200,200));
this.init();
this.setVisible(true);
} private void init() {
JPanel jPanel = new JPanel();
new JLabel("");
jTextField1=new JTextField(12);
jTextField2=new JTextField(12);
jTextField3=new JTextField(12); JLabel jLabelTotalx=new JLabel("行数:");
JLabel jLabelTotaly=new JLabel("列数:");
JLabel jLabelTotalMine=new JLabel("雷数:"); jPanel.add(jLabelTotalx);
jPanel.add(jTextField1); jPanel.add(jLabelTotaly);
jPanel.add(jTextField2); jPanel.add(jLabelTotalMine);
jPanel.add(jTextField3); butyes = new JButton("确定");
butno = new JButton("取消");
jPanel.add(butyes);
jPanel.add(butno); butyes.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try {
Tools.totalx=Integer.parseInt(jTextField1.getText());
Tools.totaly=Integer.parseInt(jTextField2.getText());
Tools.totalMine=Integer.parseInt(jTextField3.getText());
if(Tools.totalx>9&&Tools.totalx<30){
if(Tools.totaly>9&&Tools.totaly<30){
if(Tools.totalMine>=10&&Tools.totalMine<Tools.totalx*Tools.totaly*4/5){
sartFrame.restart();
About.this.dispose();
}else{
JOptionPane.showMessageDialog(null, "布雷有误请重试!!!\n布雷数应少于总格子数!!!", "提示消息", JOptionPane.NO_OPTION);
}
}else {
JOptionPane.showMessageDialog(null, "您输入的列数有误\n请重试!!!", "提示消息", JOptionPane.NO_OPTION);
}
}else {
JOptionPane.showMessageDialog(null, "您输入的行数有误\n请重试!!!", "提示消息", JOptionPane.NO_OPTION); }
} catch (Exception e2) {
JOptionPane.showMessageDialog(null, "必须是数字类型", "提示消息", JOptionPane.NO_OPTION);
return;
} }
}); butno.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
About.this.dispose();
}
});
this.add(jPanel);
}
}
About.java
源代码下载 https://pan.baidu.com/s/1c1UlluC
JAVA 扫雷 程序的更多相关文章
- Java扫雷游戏: JMine
JMine是用Java和Swing编写的扫雷程序.作者是Jerry Shen(火鸟),代码有一定年头了,最开始是作者的课程设计.阅读这种小程序对编程语言的学习挺有帮助.本文只简单介绍一些关键的地方,实 ...
- Java基础-输入输出-3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。
3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc. try { FileInputStream in = ...
- Java基础-输入输出-2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt
2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt ...
- JAVA基础-输入输出:1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上。
1.编写TextRw.java的Java应用程序,程序完成的功能是:首先向TextRw.txt中写入自己的学号和姓名,读取TextRw.txt中信息并将其显示在屏幕上. package Test03; ...
- 《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》
Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和 ...
- 《Java应用程序(Application)》
在编写Java应用程序(Application)时可以这样: 1,定义包名. 2, 导入相关的包. 3, 定义一个类. 4,定义相关变量. 5,定义构造函数.(在构造函数内调用init()方法和add ...
- Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,
36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- 类的继承和多态性-编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount()。定义Fish类,是Animal类的子类,
编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 ...
随机推荐
- ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决办法
ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决办法: 1.首先打开cmd命令 查看本地TNSPING配置 是否ok?然后找到 Oracle 安装文件 中 listener. ...
- C#中关于静态与非静态的一个疑问
关于静态方法.变量和非静态方法.变量的区别,园里的大神早就有了许多详细的总结,个人觉得静态方法.变量与非静态方法.变量的区别可以总结为以下两句话: 静态的是属于类的 非静态是属于对象的 就是说调用静态 ...
- 微信小程序电商实战-首页(下)
好了,上一期我们把首页搜索.导航栏和广告轮播给做完了,那么接下来会继续完成我们首页的剩余部分,先看我们要实现的效果吧! 本期实现效果图.gif 本期我们要实现首页的实时热销榜.福利专场和左下方个人 ...
- Dynamics CRM 2011通过客户端代码选择视图
在实施的过程中我们经常会遇到这样的场景,有个系统标准的Lookup字段对应的不是一种Entity,如很多地方的客户实际上可选account或者contact,有的地方可选systemuser或者tea ...
- <Android 基础(十七)> ViewPager介绍
介绍 Layout manager that allows the user to flip left and right through pages of data. You supply an i ...
- python模块详解 XML
XML模块 XML是实现不同语言或程序之间进行数据交换的协议,和json一样. XML格式: <?xml version="1.0" encoding="UTF-8 ...
- Java 开发小常识
从理论上来讲Java做的系统并不比其他语言开发出来的系统更占用内存,那么为什么却有这么多理由来证明它确实占内存呢?两个字,陋习. 1.别用new Boolean().在很多场景中Boolean类型是必 ...
- PHP设计模式之单例模式
<?php #千锋PHP http://www.qfedu.com/php/? #千锋PHP http://www.qfedu.com/php/? namespace app; /** * Cl ...
- Maven安装以及使用
maven安装 1.解压maven安装包 2.右键“计算机”,选择“属性”,之后点击“高级系统设置”,点击“环境变量”,来设置环境变量. 3. 新建系统变量 MAVEN_HOME 变量值:C:\apa ...
- Oracle 日期加减运算
-- Start 我们都知道数字可以进行加.减.乘.除等运算.那么,日期可不可以呢?答案是,日期只能进行加.减运算. 在开始操作日期之前,我们先了解一下 Oracle 支持哪些日期数据类型,如下所示: ...