JAVA课程设计
题目: 扫 雷 游 戏
院(系) 计算机信息工程学院 专 业 网络工程 班 级 13级网络工程1班 学生姓名 方琴 刘莉虹 程子卿 薛中意 设计时间 2015年8月 指导教师 万中英 提交日期 2015年10月8日
摘要
《扫雷》是一款大众类的益智小游戏。游戏目标是在最短的时间
内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。先任意点开少量的方格,没有爆炸时,会出现一个数字,这个数字代表的意思是以它为中心的9个格子内所有雷的个数。一般围在一堆数字中间的有可能是雷,你在你认为是雷的那里插旗,就可以把它设定为雷,然后在数字区用鼠标左右键双击,可以打开非雷区,等打开所有非雷区,你就赢了。
采用GUI界面设计,窗口定位,绘图机制,鼠标监听等Java技术。用户可以自己选择地雷的数量,地雷随机分布在17*24的方块矩阵中,地雷数量越多,难度越大。鼠标放在方格上,单击鼠标左键开始游戏,按空格键插旗。如果插旗错误,或是点击到了地雷,则游戏失败。
1 引言
1.1 该设计的目的及意义 1.2 该设计的要求 1.3 相关技术
2 总体设计
2.1 功能设计
3 详细设计
3.1 系统界面设计
3.1.1 流程图 3.1.2 界面截图 3.2 程序描述
3.2.1 选择地雷数量 3.2.2 游戏界面
4 课程设计总结
4.1遇到问题解决问题过程
4.2 系统存在的问题,进一步要做的工作 4.3 课程设计心得体会
5 附录(程序代码)
1.1 该设计的目的及意义
1. 利用扫雷游戏巩固和Java语言程序设计这一课程的基本知识的
理解和掌握;
2. 掌握Java语言程序设计中编程和程序调试的基本技能; 3. 基本掌握完全面向对象程序设计的基本思路和方法; 4. 利用Java语言程序设计学会基本的软件设计; 5. 掌握书写程序设计说明文档的能力。
1.2 课程设计要求
1. 分析课程设计题目的思路及要求;
2. 编写程序代码,调试程序使其能正确运行;
3. 设计完成的软件要便于操作和使用,有整齐、美观的使用界面; 4. 能实现简单的扫雷游戏;
1.3 相关技术
1. GUI界面设计; 2. 窗口定位; 3. 绘画基础; 4. 事件监听;
5. 继承,以及接口技术;
2.1 功能设计
IndexPanel类 成员变量 变量意义
增加雷按钮值 减少雷按钮值 玩游戏按钮值 成员方法 方法名称 IndexPanel paint mousePressed mouseReleased
该类实现游戏的开始界面,继承了JPanel 同时实现了监听MouseListener (鼠标监听)事件。主要用于选定炸弹的数目,即游戏的难易程度,点击 play按钮 则开始游戏。炸弹数量默认为60。
功能 初始化参数 绘出游戏界面 实现鼠标单击事件 实现鼠标释放事件
备注 构造方法
接口方法 接口方法
变量类型 long boolean boolean boolean
名称
serialVersionUID buAdd buDec buPlay
public void paint(Graphics g){}
采用画笔的方式设计界面,布局清晰,实现窗口的定位。
例如:// 画 设置炸弹数目的小球 (40)
g.setColor(Color.white); // 画笔的颜色
g.fillOval(40, 120, 30, 30); // 画的图形是 实心圆 g.setColor(Color.gray); // 重新设置画笔的颜色 g.drawOval(40, 120, 30, 30); // 画的图形是 空心圆 g.drawString(\"40\图形上面的字符串
// 画PLAY按钮
g.setColor(Color.white);
g.draw3DRect(30, 320, 120, 30, buPlay); g.drawString(\"PLAY\
public void mousePressed(MouseEvent e) { ;} 鼠标点击事件,实现炸弹的选择。
MyPanel类
成员变量 变量意义 返回后重新开始 每插一旗变量加一 判断是否赢
判断是否结束 是否有雷的标志 方块周围雷数 雷坐标 判断是否插旗 判断插旗是否正确 插旗错误点的坐标
变量类型 int int int long int int[] int[] Int[] Int[] int int
名称 replay win gameWin
serialVersionUID gameOver bombFlag count bomb_x,bomb_y hadFlag check
check_x,check_y
判断是否点击过 判断是否已经清除过 成员方法 方法名称 MyPanel paint mousePressed clear keyPressed
Int[] Int[]
clicked clearFlag
功能
初始bombCount变量
绘出雷区,初始化雷区,及定义雷实现鼠标点击事件,挖开方块 清除点击处周围安全非提示方块 实现键盘事件,插旗
备注 构造方法
系统核心部分,使用了窗接口方法
接口方法
该类是游戏界面,也是最核心的类。不仅继承了JPanel类,也通过鼠标和键盘的监听事件,实现扫雷游戏。之前选择的炸弹随机分布在24*17个小方格内。
插旗提示:鼠标放在方格上,按空格键插旗。
public void paint(Graphics g) { //采用画布的方式添加方格
super.paint(g); if(replay == 1){
for (int i = 0; i < bombCount; i++) { }
for (int i = 0; i < 24*17; i++) { }
bombFlag[i] = 0; count[i] = 0; clicked[i] = 0; clearFlag[i] = 0;
bomb_x[i] = (int) (Math.random() * 24 - 0.1); bomb_y[i] = (int) (Math.random() * 16 - 0.1); hadFlag[i] = 0;
}
public void keyPressed( KeyEvent e ) { ; } //鼠标点击后游戏进程
public void clear(int i, int j) { ; }// 清除点击处周围的安全非提示方块
3. public class Index {
static IndexPanel panel1; static MyPanel panel2; . . . }
该类是游戏的主类,引用了 静态的IndexPanel 类 以及 MyPanel 类。主要决定页面设计,窗口大小,以及添加事件。
3.1.1 流程图 3.1.2 界面截图 运行程序
选择炸弹数量 点击 play按钮 开始游戏 点到雷,则游戏失败 否则成功
3.2.1 选择地雷数量 炸弹数量越多,难度越大。
public void mouseReleased(MouseEvent e) {
if (e.getX() >= 30 && e.getX() <= 80 && e.getY() >= 70 && e.getY() <= 100) {
buAdd = true; MyPanel.bombCount++; }
if (e.getX() >= 100 && e.getX() <= 150 && e.getY() >= 70 && e.getY() <= 100) {
buDec = true; MyPanel.bombCount--; }
if (e.getX() >= 30 && e.getX() <= 150 && e.getY() >= 320 && e.getY() <= 350) {
buPlay = true; this.setVisible(false); Index.panel2.setVisible(true); }
repaint(); }
public void mousePressed (MouseEvent e) {
if (e.getX() >= 30 && e.getX() <= 80 && e.getY() >= 70 && e.getY() <= 100) { buAdd = false; }
if (e.getX() >= 100 && e.getX() <= 150 && e.getY() >= 70 && e.getY() <= 100) { buDec = false; }
if (e.getX() >= 40 && e.getX() <= 70 && e.getY() >= 120 && e.getY() <= 150) { MyPanel.bombCount = 40; }
if (e.getX() >= 30 && e.getX() <= 150 && e.getY() >= 320 && e.getY() <= 350) { buPlay = false; }
repaint(); }
3.2.2 游戏界面
点击游戏主面板的任一方格
public void mousePressed(MouseEvent e) { replay = 0;
if((e.getX() > 420 && e.getX() < 480 && e.getY() > 380 && e.getY() < 405)){
System.out.println(\"fahui\"); check = 1; replay = 1; win = 0;
gameOver = 0; gameWin = 0; bombCount = 60; repaint();
this.setVisible(false);
Index.panel1.setVisible(true); } else{
if ((e.getY()<375)&&gameOver == 0 && gameWin == 0) { int mouse_i = e.getX() / 22; int mouse_j = e.getY() / 22;
clicked[mouse_i * 17 + mouse_j] = 1; for (int i = 0; i < bombCount; i++) {
if ((mouse_i == bomb_x[i]) && (mouse_j == bomb_y[i])) { gameOver = 1; break; } }
if ((count[mouse_i * 17 + mouse_j] == 0) && (gameOver == 0)) { clear(mouse_i, mouse_j); }
repaint(); } else{
if((gameOver == 1 || gameWin == 1)&&(e.getX() > 68 && e.getX() < 128 && e.getY() > 390 && e.getY() < 420)){ System.out.println(\"fahui\"); check = 1; replay = 1; win = 0;
gameOver = 0; gameWin = 0; bombCount = 60;
}
repaint();
this.setVisible(false);
Index.panel1.setVisible(true); } } }
4.1遇到问题解决问题过程
A. 没有返回键
相互讨论,添加replay按钮,点击后所有数据初始化,重新开始回到选择界面。
B. 插旗相关函数
查阅相关资料,讨论,最终设定 鼠标放在方格上,按空格键插旗。
4.2 系统存在的问题,进一步要做的工作
没有用文本或者是其他方式保存数据,每次用户结束游戏之后,数据没有保存。因此没办法实现排行榜等数据比较功能。
4.3 课程设计心得体会
Java程序语言设计一种可以撰写跨平台应用软件的面向对象的程序设计语言。在这次的课程设计中不仅检验了我们所学习的知识,也学会了完成一件事情的方法和技巧。在设计过程中,和同学们相互探讨,相互学习,相互监督。学会了宽容,学会了理解,课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工 作、一个必不少的过程.通过这次课程设计,明白除了日常的理论学习,还要多实践,把所学的知识运用在真正的实践上。而完成课程设计,不仅是对我们学习情况的检验,也是对自己的一次考验。
5 附录(程序代码) Index.java
package saolei;
import java.awt.CardLayout; import java.awt.Image;
import javax.swing.ImageIcon; import javax.swing.JFrame;
public class Index {
static IndexPanel panel1; static MyPanel panel2;
public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(546, 415 + 50); frame.setLocation(300,100);
panel1 = new IndexPanel(); panel2 = new MyPanel();
frame.add(panel1); // index界面面板 frame.add(panel2); // 游戏主面板
ImageIcon icon = new ImageIcon(\"Image/rightImage.png\"); Image rightImage = icon.getImage(); frame.setIconImage(rightImage);
frame.addMouseListener(panel1); panel1.addMouseListener(panel1);
frame.addMouseListener(panel2); panel2.addMouseListener(panel2); frame.addKeyListener(panel2); panel2.addKeyListener(panel2);
frame.setLayout(new CardLayout());
frame.setVisible(true); } }
MyPanel.java
package saolei;
import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.MouseInfo; import java.awt.Point;
import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;
import javax.swing.JPanel;
public class MyPanel extends JPanel implements MouseListener, KeyListener {
static int replay = 1; // 返回后从新开始 int win = 0; //每插一个旗就增一 int gameWin = 0;//判断游戏是否赢
private static final long serialVersionUID = 1L;
static int gameOver; // 判断游戏是否结束
int[] bombFlag = new int[24 * 17]; // bombFlag[] 为是否是雷的标志,如果该空格是雷则相应的位置的bombFlag为1,默认为0
int[] count = new int[24 * 17]; // count为此方块周围雷的个数
static int bombCount = 120;
// 雷的坐标数组,数值为整数,不是绝对坐标,而是相对坐标 int[] bomb_x = new int[bombCount]; int[] bomb_y = new int[bombCount];
int[] hadFlag = new int[bombCount]; // 判断是否有插旗
int check = 1; // 判断插旗是否正确
int check_x, check_y; // 插旗错误定点的相当坐标
int[] clicked = new int[24 * 17];// 判断是否点击过
int[] clearFlag = new int[24 * 17];// 判断是否已经clear过 public MyPanel() {
// System.out.println(bomb_x[55]); bombCount = 60; }
public void paint(Graphics g) { super.paint(g); if(replay == 1){
for (int i = 0; i < bombCount; i++) {
bomb_x[i] = (int) (Math.random() * 24 - 0.1); bomb_y[i] = (int) (Math.random() * 16 - 0.1); hadFlag[i] = 0; }
for (int i = 0; i < 24*17; i++) { bombFlag[i] = 0; count[i] = 0; clicked[i] = 0; clearFlag[i] = 0; } }
// 设置画笔的宽度
Graphics2D g2D = (Graphics2D) g; g2D.setStroke(new BasicStroke(3f));
// 画雷上的遮盖物
for (int i = 0; i < 24; i++) { for (int j = 0; j < 17; j++) {
// 将所有的方格都初始化为非炸弹 bombFlag[i * 17 + j] = 0;
// 注意这里是用或,否则同行,同列将都会被现实出来 if (clicked[i * 17 + j] == 0) {
g.setColor(new Color(150, 230, 250));
g.fillRect(22 * i + 2, 22 * j + 2, 20, 20); } } }
// 布雷,雷的个数为bombCount
for (int i = 0; i < bombCount; i++) {
// bomb_x和bomb_y分别为炸弹的列数和行数,都是从0开始
g.setColor(Color.red);
g.fillOval(22 * bomb_x[i] + 2, 22 * bomb_y[i] + 2, 20, 20); if (hadFlag[i] == 1) {
g.setColor(Color.green);
g.fillRect(22 * bomb_x[i] + 8, 22 * bomb_y[i] + 8, 10, 8); g.setColor(Color.white);
g.fillRect(22 * bomb_x[i] + 8, 22 * bomb_y[i] + 8, 2, 12); }
bombFlag[bomb_x[i] * 17 + bomb_y[i]] = 1; }
// 计算当前方块周围有几个雷,再写出来 // 注意数组下表越界不会报错但是运行不了 g.setColor(Color.black);
for (int i = 0; i < 24; i++) { for (int j = 0; j < 17; j++) { count[i * 17 + j] = 0;
if ((i - 1 >= 0) && (j - 1 >= 0)
&& (bombFlag[(i - 1) * 17 + (j - 1)] == 1)) { count[i * 17 + j]++; }
if ((j - 1 >= 0) && (bombFlag[i * 17 + (j - 1)] == 1)) { count[i * 17 + j]++; }
if ((i + 1 <= 23) && (j - 1 >= 0)
&& (bombFlag[(i + 1) * 17 + (j - 1)] == 1)) { count[i * 17 + j]++; }
if ((i + 1 <= 23) && (bombFlag[(i + 1) * 17 + j] == 1)) { count[i * 17 + j]++; }
if ((i + 1 <= 23) && (j + 1 <= 16)
&& (bombFlag[(i + 1) * 17 + (j + 1)] == 1)) { count[i * 17 + j]++; }
if ((j + 1 <= 16) && (bombFlag[i * 17 + (j + 1)] == 1)) { count[i * 17 + j]++; }
if ((i - 1 >= 0) && (j + 1 <= 16)
&& (bombFlag[(i - 1) * 17 + (j + 1)] == 1)) { count[i * 17 + j]++; }
if ((i - 1 >= 0) && (bombFlag[(i - 1) * 17 + j] == 1)) { count[i * 17 + j]++;
+ 20, + 4,
}
}
}
if (count[i * 17 + j] != 0 && bombFlag[i * 17 + j] != 1) g.drawString(\" \" + count[i * 17 + j], 22 * i + 2, 22 * j + 20);
if (check == 0) {
g.setColor(Color.blue);
// System.out.println(check_x*17+check_y); clicked[check_x * 17 + check_y] = 1;
g.drawLine(check_x * 22 + 4, check_y * 22 + 4, check_x * 22
check_y * 22 + 20);
g.drawLine(check_x * 22 + 20, check_y * 22 + 4, check_x * 22
check_y * 22 + 20); gameOver = 1; }
for(int i=0;i<24;i++){ for(int j=0;j<17;j++){
if(clicked[i*17+j] == 0){ g.setColor(new Color(150,230,250)); g.fillRect(22*i+2, 22*j+2, 20, 20); } } }
if(gameWin == 1){
g.setColor(Color.red);
g.setFont(new Font(\"\
g.drawString(\"GameWin,再接再厉!\ g.setFont(new Font(\"\ g.setFont(new Font(\"\ g.fillOval(68, 390, 60, 30); g.setColor(Color.white);
g.drawString(\"返回\
g.setColor(new Color(150, 230, 250)); g2D.drawOval(68, 390, 60, 30); }
if (gameOver == 0 && gameWin == 0) { g.setColor(Color.red);
g.setFont(new Font(\"\
g.drawString(\"炸弹:\" + bombCount, 30, 405); g.setFont(new Font(\"\ g.setColor(Color.blue);
g.drawString(\"replay\ g.setColor(Color.red);
g.setFont(new Font(\"\
g.drawString(\"鼠标放在方格上,按空格键插旗\ } else {
if(gameWin == 0){
g2D.setPaint(new Color(0, 0, 0, 40)); g2D.fillRect(0, 0, 546, 380);
g.setFont(new Font(\"\ g.setColor(Color.red);
g.drawString(\"GameOver\ g.setFont(new Font(\"\ g.fillOval(68, 390, 60, 30); g.setColor(Color.white);
g.drawString(\"返回\
g.setColor(new Color(150, 230, 250)); g2D.drawOval(68, 390, 60, 30); } }
}
public void mouseClicked(MouseEvent arg0) {
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent e) { replay = 0;
if((e.getX() > 420 && e.getX() < 480 && e.getY() > 380 && e.getY() < 405)){
System.out.println(\"fahui\"); check = 1; replay = 1; win = 0;
gameOver = 0;
gameWin = 0; bombCount = 60; repaint();
this.setVisible(false);
Index.panel1.setVisible(true); }else{
if ((e.getY()<375)&&gameOver == 0 && gameWin == 0) { int mouse_i = e.getX() / 22; int mouse_j = e.getY() / 22;
clicked[mouse_i * 17 + mouse_j] = 1; for (int i = 0; i < bombCount; i++) {
if ((mouse_i == bomb_x[i]) && (mouse_j == bomb_y[i])) { gameOver = 1; break; } }
if ((count[mouse_i * 17 + mouse_j] == 0) && (gameOver == 0)) {
clear(mouse_i, mouse_j); }
repaint(); } else{
if((gameOver == 1 || gameWin == 1)&&(e.getX() > 68 && e.getX() < 128 && e.getY() > 390 && e.getY() < 420)){ System.out.println(\"fahui\"); check = 1; replay = 1; win = 0;
gameOver = 0; gameWin = 0; bombCount = 60; repaint();
this.setVisible(false);
Index.panel1.setVisible(true); } } } }
public void mouseReleased(MouseEvent arg0) { }
// 清除点击处周围的安全非提示方块 public void clear(int i, int j) { clearFlag[i * 17 + j] = 1;
if ((i - 1 >= 0) && (j - 1 >= 0)) {
clicked[(i - 1) * 17 + (j - 1)] = 1; if (count[(i - 1) * 17 + (j - 1)] == 0
&& clearFlag[(i - 1) * 17 + (j - 1)] == 0) { clear(i - 1, j - 1); } }
if ((j - 1 >= 0)) {
clicked[i * 17 + (j - 1)] = 1; if (count[i * 17 + (j - 1)] == 0
&& clearFlag[i * 17 + (j - 1)] == 0) { clear(i, j - 1); } }
if ((i + 1 <= 23) && (j - 1 >= 0)) { clicked[(i + 1) * 17 + (j - 1)] = 1; if (count[(i + 1) * 17 + (j - 1)] == 0
&& clearFlag[(i + 1) * 17 + (j - 1)] == 0) { clear(i + 1, j - 1); } }
if ((i + 1 <= 23)) {
clicked[(i + 1) * 17 + j] = 1; if (count[(i + 1) * 17 + j] == 0
&& clearFlag[(i + 1) * 17 + j] == 0) { clear(i + 1, j); } }
if ((i + 1 <= 23) && (j + 1 <= 16)) { clicked[(i + 1) * 17 + (j + 1)] = 1; if (count[(i + 1) * 17 + (j + 1)] == 0
&& clearFlag[(i + 1) * 17 + (j + 1)] == 0) { clear(i + 1, j + 1); } }
if ((j + 1 <= 16)) {
clicked[i * 17 + (j + 1)] = 1; if (count[i * 17 + (j + 1)] == 0
&& clearFlag[i * 17 + (j + 1)] == 0) { clear(i, j + 1); }
}
if ((i - 1 >= 0) && (j + 1 <= 16)) { clicked[(i - 1) * 17 + (j + 1)] = 1; if (count[(i - 1) * 17 + (j + 1)] == 0
&& clearFlag[(i - 1) * 17 + (j + 1)] == 0) { clear(i - 1, j + 1); } }
if ((i - 1 >= 0)) {
clicked[(i - 1) * 17 + j] = 1; if (count[(i - 1) * 17 + j] == 0
&& clearFlag[(i - 1) * 17 + j] == 0) { clear(i - 1, j); } } }
public void keyPressed(KeyEvent e) {
replay = 0;
if (gameOver == 0) {
if (e.getKeyCode() == 32) {
Point point = MouseInfo.getPointerInfo().getLocation(); int location_x = point.x-300; int location_y = point.y-100;
check = 0; // 判断插旗是否正确
for (int i = 0; i < bombCount; i++) {
if ((bomb_x[i] * 22 <= location_x - 8)
&& (bomb_x[i] * 22 + 20 >= location_x - 8) && (bomb_y[i] * 22 <= location_y - 32)
&& (bomb_y[i] * 22 + 20 >= location_y - 32)) { if(hadFlag[i] == 0){ hadFlag[i] = 1; win ++;
clicked[bomb_x[i] * 17 + bomb_y[i]] = 1; check = 1; // 正确插旗 }else{ win--;
hadFlag[i] = 0;
clicked[bomb_x[i] * 17 + bomb_y[i]] = 0; check = 1; // 正确插旗 } }
}
if(win == bombCount){ gameWin = 1; } }
if (check == 0) {
check_x = (location_x - 8) / 22; check_y = (location_y - 32) / 22; }
repaint(); } } }
public void keyReleased(KeyEvent arg0) { }
public void keyTyped(KeyEvent arg0) { }
IndexPanel.java
package saolei;
import java.awt.BasicStroke; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image;
import java.awt.event.MouseEvent; import java.awt.event.MouseListener;
import javax.swing.ImageIcon; import javax.swing.JPanel;
public class IndexPanel extends JPanel implements MouseListener {
private static final long serialVersionUID = 1L;
boolean buAdd = true; // 增加按钮,按下该值就为false boolean buDec = true; // 减少按钮,按下该值就为false boolean buPlay = true; // 玩游戏按钮,按下该值就为false
public IndexPanel() {
this.setBackground(new Color(150, 230, 250)); // 设置背景颜色 }
public void paint(Graphics g) { super.paint(g); Graphics2D g2D = (Graphics2D) g; g2D.setStroke(new BasicStroke(3f));
// 显示炸弹数目
g.setFont(new Font(\"\ g.setColor(Color.white);
g.drawString(\"炸弹数量:\" + MyPanel.bombCount, 20, 50); g.setFont(new Font(\"\ // 画增加按钮
g.draw3DRect(30, 70, 50, 30, buAdd); g.drawString(\"增加\
// 画减少按钮
g.draw3DRect(100, 70, 50, 30, buDec); g.drawString(\"减少\ // 画设置炸弹数目的小球 g.setColor(Color.white); g.fillOval(40, 120, 30, 30); g.setColor(Color.gray);
g.drawOval(40, 120, 30, 30); g.drawString(\"40\ g.setColor(Color.white);
g.fillOval(110, 120, 30, 30); g.setColor(Color.gray);
g.drawOval(110, 120, 30, 30); g.drawString(\"60\ g.setColor(Color.white); g.fillOval(40, 170, 30, 30);
g.setColor(Color.gray);
g.drawOval(40, 170, 30, 30); g.drawString(\"65\g.setColor(Color.white);
g.fillOval(110, 170, 30, 30); g.setColor(Color.gray);
g.drawOval(110, 170, 30, 30); g.drawString(\"70\g.setColor(Color.white); g.fillOval(40, 220, 30, 30); g.setColor(Color.gray);
g.drawOval(40, 220, 30, 30); g.drawString(\"75\g.setColor(Color.white);
g.fillOval(110, 220, 30, 30); g.setColor(Color.gray);
g.drawOval(110, 220, 30, 30); g.drawString(\"80\g.setColor(Color.white); g.fillOval(40, 270, 30, 30); g.setColor(Color.gray);
g.drawOval(40, 270, 30, 30); g.drawString(\"85\g.setColor(Color.white);
g.fillOval(110, 270, 30, 30); g.setColor(Color.gray);
g.drawOval(110, 270, 30, 30); g.drawString(\"90\
// 画PLAY按钮
g.setColor(Color.white);
g.draw3DRect(30, 320, 120, 30, buPlay); g.drawString(\"PLAY\
ImageIcon icon = new ImageIcon(\"Image/rightImage.png\"); Image rightImage = icon.getImage();
Image top = new ImageIcon(\"Image/top.png\").getImage(); Image hudie = new ImageIcon(\"Image/hudie.png\").getImage(); g.drawImage(top, 380, 320, 80, 80, null); g.drawImage(hudie, 300, 80, 150, 120, null);
g.drawImage(rightImage, 250, 50, 200, 300, null); }
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e) {
if (e.getX() >= 30 && e.getX() <= 80 && e.getY() >= 70 && e.getY() <= 100) { buAdd = false; }
if (e.getX() >= 100 && e.getX() <= 150 && e.getY() >= 70 && e.getY() <= 100) { buDec = false; }
if (e.getX() >= 40 && e.getX() <= 70 && e.getY() >= 120 && e.getY() <= 150) { MyPanel.bombCount = 40; }
if (e.getX() >= 110 && e.getX() <= 140 && e.getY() >= 120 && e.getY() <= 150) { MyPanel.bombCount = 60; }
if (e.getX() >= 40 && e.getX() <= 70 && e.getY() >= 170 && e.getY() <= 200) { MyPanel.bombCount = 65; }
if (e.getX() >= 110 && e.getX() <= 140 && e.getY() >= 170 && e.getY() <= 200) { MyPanel.bombCount = 70; }
if (e.getX() >= 40 && e.getX() <= 70 && e.getY() >= 220 && e.getY() <= 250) { MyPanel.bombCount = 75; }
if (e.getX() >= 110 && e.getX() <= 140 && e.getY() >= 220
}
}
&& e.getY() <= 250) { MyPanel.bombCount = 80; }
if (e.getX() >= 40 && e.getX() <= 70 && e.getY() >= 270 && e.getY() <= 300) { MyPanel.bombCount = 85; }
if (e.getX() >= 110 && e.getX() <= 140 && e.getY() >= 270 && e.getY() <= 300) { MyPanel.bombCount = 90; }
if (e.getX() >= 30 && e.getX() <= 150 && e.getY() >= 320 && e.getY() <= 350) { buPlay = false; }
repaint();
public void mouseReleased(MouseEvent e) { // TODO Auto-generated method stub
if (e.getX() >= 30 && e.getX() <= 80 && e.getY() >= 70 && e.getY() <= 100) { buAdd = true;
MyPanel.bombCount++; }
if (e.getX() >= 100 && e.getX() <= 150 && e.getY() >= 70 && e.getY() <= 100) { buDec = true;
MyPanel.bombCount--; }
if (e.getX() >= 30 && e.getX() <= 150 && e.getY() >= 320 && e.getY() <= 350) { buPlay = true;
this.setVisible(false);
Index.panel2.setVisible(true); }
repaint(); }
因篇幅问题不能全部显示,请点此查看更多更全内容