import java.awt.event.*
import javax.swing.*
public class Frame
extends JFrame {
JTextField text
JLabel nowBomb, setBomb
int BombNum, BlockNum//禅滑闷 当前雷数,当前方块数
int rightBomb, restBomb, restBlock/贺弯/ 找到的地雷数,剩余雷数,剩余方块数
JButton start = new JButton("让旦 开始 ")
JPanel MenuPamel = new JPanel()
JPanel bombPanel = new JPanel()
Bomb[][] bombButton
JPanel c
BorderLayout borderLayout1 = new BorderLayout()
GridLayout gridLayout1 = new GridLayout()
public Frame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE)
jbInit()
}
catch (Exception exception) {
exception.printStackTrace()
}
}
private void jbInit() throws Exception {
c = (JPanel) getContentPane()
setTitle("扫雷")
c.setBackground(Color.WHITE)
MenuPamel.setBackground(Color.GRAY)
c.setLayout(borderLayout1)
setSize(new Dimension(600, 600))
setResizable(false)
BlockNum = 144
BombNum = 10
text = new JTextField("10 ", 3)
nowBomb = new JLabel("当前雷数" + ":" + BombNum)
setBomb = new JLabel("设置地雷数")
start.addActionListener(new Frame1_start_actionAdapter(this))
MenuPamel.add(setBomb)
MenuPamel.add(text)
MenuPamel.add(start)
MenuPamel.add(nowBomb)
c.add(MenuPamel, java.awt.BorderLayout.SOUTH)
bombPanel.setLayout(gridLayout1)
gridLayout1.setColumns( (int) Math.sqrt(BlockNum))
gridLayout1.setRows( (int) Math.sqrt(BlockNum))
bombButton = new Bomb[ (int) Math.sqrt(BlockNum)][ (int) Math.sqrt(BlockNum)]
for (int i = 0i <(int) Math.sqrt(BlockNum)i++) {
for (int j = 0j <(int) Math.sqrt(BlockNum)j++) {
bombButton[i][j] = new Bomb(i, j)
//bombButton[i][j].setSize(10, 10)
bombButton[i][j].setFont(new Font("", Font.PLAIN, 14))//设置字体大小
bombButton[i][j].setForeground(Color.white)
bombButton[i][j].addMouseListener(new Bomb_mouseAdapter(this))
bombButton[i][j].addActionListener(new Bomb_actionAdapter(this))
bombPanel.add(bombButton[i][j])
}
}
c.add(bombPanel, java.awt.BorderLayout.CENTER)
startBomb()
}
/* 开始按钮 */
public void start_actionPerformed(ActionEvent e) {
int num=Integer.parseInt(text.getText().trim())
if (num >= 5 &&num <50) {
BombNum = num
startBomb()
}
else if (num <5) {
JOptionPane.showMessageDialog(null, "您设置的地雷数太少了,请重设!", "错误",
JOptionPane.ERROR_MESSAGE)
num=10
BombNum = num
}
else {
JOptionPane.showMessageDialog(null, "您设置的地雷数太多了,请重设!", "错误",
JOptionPane.ERROR_MESSAGE)
num=10
BombNum = num
}
}
/* 开始,布雷 */
public void startBomb() {
nowBomb.setText("当前雷数" + ":" + BombNum)
for (int i = 0i <(int) Math.sqrt(BlockNum)i++) {
for (int j = 0j <(int) Math.sqrt(BlockNum)j++) {
bombButton[i][j].isBomb = false
bombButton[i][j].isClicked = false
bombButton[i][j].isRight = false
bombButton[i][j].BombFlag = 0
bombButton[i][j].BombRoundCount = 9
bombButton[i][j].setEnabled(true)
bombButton[i][j].setText("")
bombButton[i][j].setFont(new Font("", Font.PLAIN, 14))//设置字体大小
bombButton[i][j].setForeground(Color.BLUE)
rightBomb = 0
restBomb = BombNum
restBlock = BlockNum - BombNum
}
}
for (int i = 0i <BombNum) {
int x = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1))
int y = (int) (Math.random() * (int) (Math.sqrt(BlockNum) - 1))
if (bombButton[x][y].isBomb != true) {
bombButton[x][y].isBomb = true
i++
}
}
CountRoundBomb()
}
/* 计算方块周围雷数 */
public void CountRoundBomb() {
for (int i = 0i <(int) Math.sqrt(BlockNum)i++) {
for (int j = 0j <(int) Math.sqrt(BlockNum)j++) {
int count = 0
// 当需要检测的单元格本身无地雷的情况下,统计周围的地雷个数
if (bombButton[i][j].isBomb != true) {
for (int x = i - 1x <i + 2x++) {
for (int y = j - 1y <j + 2y++) {
if ( (x >= 0) &&(y >= 0)
&&(x <( (int) Math.sqrt(BlockNum)))
&&(y <( (int) Math.sqrt(BlockNum)))) {
if (bombButton[x][y].isBomb == true) {
count++
}
}
}
}
bombButton[i][j].BombRoundCount = count
}
}
}
}
/* 是否挖完了所有的雷 */
public void isWin() {
restBlock = BlockNum - BombNum
for (int i = 0i <(int) Math.sqrt(BlockNum)i++) {
for (int j = 0j <(int) Math.sqrt(BlockNum)j++) {
if (bombButton[i][j].isClicked == true) {
restBlock--
}
}
}
if (rightBomb == BombNum || restBlock == 0) {
JOptionPane.showMessageDialog(this, "您挖完了所有的雷,您胜利了!", "胜利",
JOptionPane.INFORMATION_MESSAGE)
startBomb()
}
}
/** 当选中的位置为空,则翻开周围的地图* */
public void isNull(Bomb ClickedButton) {
int i, j
i = ClickedButton.num_x
j = ClickedButton.num_y
for (int x = i - 1x <i + 2x++) {
for (int y = j - 1y <j + 2y++) {
if ( ( (x != i) || (y != j)) &&(x >= 0) &&(y >= 0)
&&(x <( (int) Math.sqrt(BlockNum)))
&&(y <( (int) Math.sqrt(BlockNum)))) {
if (bombButton[x][y].isBomb == false
&&bombButton[x][y].isClicked == false
&&bombButton[x][y].isRight == false) {
turn(bombButton[x][y])
}
}
}
}
}
/* 翻开 */
public void turn(Bomb ClickedButton) {
ClickedButton.setEnabled(false)
ClickedButton.isClicked = true
if (ClickedButton.BombRoundCount >0) {
ClickedButton.setText(ClickedButton.BombRoundCount + "")
}
else {
isNull(ClickedButton)
}
}
/* 左键点击 */
public void actionPerformed(ActionEvent e) {
if ( ( (Bomb) e.getSource()).isClicked == false
&&( (Bomb) e.getSource()).isRight == false) {
if ( ( (Bomb) e.getSource()).isBomb == false) {
turn( ( (Bomb) e.getSource()))
isWin()
}
else {
for (int i = 0i <(int) Math.sqrt(BlockNum)i++) {
for (int j = 0j <(int) Math.sqrt(BlockNum)j++) {
if (bombButton[i][j].isBomb == true) {
bombButton[i][j].setText("b")
}
}
}
( (Bomb) e.getSource()).setForeground(Color.RED)
( (Bomb) e.getSource()).setFont(new Font("", Font.BOLD, 20))
( (Bomb) e.getSource()).setText("X")
JOptionPane.showMessageDialog(this, "你踩到地雷了,按确定重来", "踩到地雷", 2)
startBomb()
}
}
}
/* 右键点击 */
public void mouseClicked(MouseEvent e) {
Bomb bombSource = (Bomb) e.getSource()
boolean right = SwingUtilities.isRightMouseButton(e)
if ( (right == true) &&(bombSource.isClicked == false)) {
bombSource.BombFlag = (bombSource.BombFlag + 1) % 3
if (bombSource.BombFlag == 1) {
if (restBomb >0) {
bombSource.setForeground(Color.RED)
bombSource.setText("F")
bombSource.isRight = true
restBomb--
}
else {
bombSource.BombFlag = 0
}
}
else if (bombSource.BombFlag == 2) {
restBomb++
bombSource.setText("Q")
bombSource.isRight = false
}
else {
bombSource.setText("")
}
if (bombSource.isBomb == true) {
if (bombSource.BombFlag == 1) {
rightBomb++
}
else if (bombSource.BombFlag == 2) {
rightBomb--
}
}
nowBomb.setText("当前雷数" + ":" + restBomb)
isWin()
}
}
public static void main(String[] args) {
Frame frame = new Frame()
frame.setVisible(true)
}
}
class Frame1_start_actionAdapter
implements ActionListener {
private Frame adaptee
Frame1_start_actionAdapter(Frame adaptee) {
this.adaptee = adaptee
}
public void actionPerformed(ActionEvent e) {
adaptee.start_actionPerformed(e)
}
}
////////////////////////////
class Bomb
extends JButton {
int num_x, num_y// 第几号方块
int BombRoundCount// 周围雷数
boolean isBomb// 是否为雷
boolean isClicked// 是否被点击
int BombFlag// 探雷标记
boolean isRight// 是否点击右键
public Bomb(int x, int y) {
num_x = x
num_y = y
BombFlag = 0
BombRoundCount = 9
isBomb = false
isClicked = false
isRight = false
}
}
class Bomb_actionAdapter
implements ActionListener {
private Frame adaptee
Bomb_actionAdapter(Frame adaptee) {
this.adaptee = adaptee
}
public void actionPerformed(ActionEvent e) {
adaptee.actionPerformed(e)
}
}
class Bomb_mouseAdapter
extends MouseAdapter {
private Frame adaptee
Bomb_mouseAdapter(Frame adaptee) {
this.adaptee = adaptee
}
public void mouseClicked(MouseEvent e) {
adaptee.mouseClicked(e)
}
}
首先你返灶要在你的电脑上安装jdk。你可以在后面链接地址下载适合你自己的版本(http://www.oracle.com/technetwork/java/javase/downloads/index.html),如果这个链接过期了,请在http://www.oracle.com/这个首先找一找。
在你的电脑上配置java环境变量,主要是配置path和classpath。你可以百度java环境变量配置,可以找到很多java环境变量配置方法。配置完毕,可以在cmd窗口下用java -version来查看是否配置成功。如果显示出java版本相关的信息表示配置成功,可以进行下一步了。
编译你的源代码,cmd窗口下把路径改变(cd)到你源代码文件所在的路径,然后用javac 源文件名编译,例如javac Hello.java(需要注意的是源文件名需要是你文件public类的类名,如果你的文件有public类的话)。当然你也可以不改变(cd)到源文件所在的路径,你的文件就需要加上绝对路径就可以了。例如:javac e:\src\Hello.java.
运行你编译并世瞎好的文件,java Hello(需要注意运行的时候没有后缀.java或者.class),同样你可以不改变路径用绝对路径运行,例如:java e:\src\Hello.如果你的绝空代码中有窗口这样的类似的图形化界面,你就需要用javaw来运行。
另外,你可以使用eclipse,NetBeans这样的集成开发环境(IDE)来写代码,这样方便很多。
使用Java语言编写的源程序保存时的文件扩展名为“.java”。经过编译之后会生成“.class”为后缀的文件。
源代码(也称源程序)是指未编译的按照一定的程序设计语言规范书写的文本文件,是一系列人类可读的计算机语言指令。
计算机源程序的最终目的是将人类可读的文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,通过编译器完成。
扩展资料:
Java语言的特点:
1、编译和解释性,Java编译程序生成字节码,而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统的系统上运行。
2、稳健性,Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。
Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。
3、可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据的可能性。类似地,Java自动的“无用单元收集”预防存储掘伍漏泄和其它有关动态存储分配和解除分配的有害错误。
4、安全性,Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。
5、可移植性,Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为。Java环境本身肢散岁对新的硬件平台和 *** 作系统是可移植的。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。
6、高性能,Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时历睁”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。
Java源程序(.java文件)-java字节码文件(.class文件)-由解释执行器(java.exe)将字节码文件加载到java虚拟机(jvm)-字节码文件(.class)就会在java虚拟机中执行。
参考资料来源:百度百科-Java
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)