1、IndexPanel类成员变量变量意义变量类型名称long serialVersionUID 增加雷按钮值boolean buAdd 减少雷按钮值buDec 玩游戏按钮值buPlay 成员方法方法名称功能备注IndexPanel 初始化参数构造方法paint 绘出游戏界面mousePressed 实现鼠标单击事件接口方法mouseReleased 实现鼠标释放事件 该类实现游戏的开始界面,继承了JPanel 同时实现了监听MouseListener (鼠标监听)事件。主要用于选定炸弹的数目,即游戏的难易程度,点击 play按钮 则开始游戏。炸弹数量默认为60。publicvoid paint(
2、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, 47, 142); /图形上面的字符串/ 画PLAY按钮 g.setColor(Color.white); g.draw3DRect(30, 320, 120
3、, 30, buPlay);PLAY, 70, 340);publicvoid mousePressed(MouseEvent e) ;鼠标点击事件,实现炸弹的选择。MyPanel类返回后重新开始int replay 每插一旗变量加一win 判断是否赢gameWin 判断是否结束gameOver 是否有雷的标志int bombFlag 方块周围雷数count 雷坐标Int bomb_x,bomb_y 判断是否插旗hadFlag 判断插旗是否正确check 插旗错误点的坐标check_x,check_y 判断是否点击过clicked 判断是否已经清除过clearFlag MyPanel 初始bo
4、mbCount变量绘出雷区,初始化雷区,及定义雷区功能,包括插旗、判断输赢等系统核心部分,使用了窗口定位,绘画等技术实现鼠标点击事件,挖开方块clear 清除点击处周围安全非提示方块keyPressed 实现键盘事件,插旗该类是游戏界面,也是最核心的类。不仅继承了JPanel类,也通过鼠标和键盘的监听事件,实现扫雷游戏。之前选择的炸弹随机分布在24*17个小方格内。 插旗提示:鼠标放在方格上,按空格键插旗。 publicvoid paint(Graphics g) /采用画布的方式添加方格super.paint(g);if(replay = 1)for (int i = 0; i = 30 &
5、 e.getX() = 70 e.getY() 420 & 480 & 380 & 405)System.out.println(fahui);check = 1;replay = 1;win = 0;gameOver = 0;gameWin = 0;bombCount = 60;this.setVisible(false);Index.panel1.setVisible(true);elseif (e.getY() 68 & 128 & 390 & 420)A. 没有返回键 相互讨论,添加replay按钮,点击后所有数据初始化,重新开始回到选择界面。 B. 插旗相关函数 查阅相关资料,讨论,
6、最终设定 鼠标放在方格上,按空格键插旗。没有用文本或者是其他方式保存数据,每次用户结束游戏之后,数据没有保存。因此没办法实现排行榜等数据比较功能。 Java程序语言设计一种可以撰写跨平台应用软件的面向对象的程序设计语言。在这次的课程设计中不仅检验了我们所学习的知识,也学会了完成一件事情的方法和技巧。在设计过程中,和同学们相互探讨,相互学习,相互监督。学会了宽容,学会了理解,课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工 作、一个必不少的过程通过这次课程设计,明白除了日常的理论学习,还要多实践,把所学的知识运用在真正的实践上。而完成课程设计,不仅是对我们学习情况的检验
7、,也是对自己的一次考验。Index.javapackage saolei;import java.awt.CardLayout;import java.awt.Image;import javax.swing.ImageIcon;import javax.swing.JFrame;public class Index public static void main(String args) JFrame frame = new JFrame();frame.setSize(546, 415 + 50);frame.setLocation(300,100);panel1 = new IndexP
8、anel();panel2 = new MyPanel();frame.add(panel1); / index界面面板frame.add(panel2); / 游戏主面板ImageIcon icon = new ImageIcon(Image/rightImage.pngImage rightImage = icon.getImage();frame.setIconImage(rightImage);frame.addMouseListener(panel1);panel1.addMouseListener(panel1);frame.addMouseListener(panel2);pan
9、el2.addMouseListener(panel2);frame.addKeyListener(panel2);panel2.addKeyListener(panel2);frame.setLayout(new CardLayout();frame.setVisible(true);MyPanel.javaimport java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Mouse
10、Info;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
11、 = 0; /每插一个旗就增一int gameWin = 0;/判断游戏是否赢private static final long serialVersionUID = 1L;static int gameOver; / 判断游戏是否结束int bombFlag = new int24 * 17; / bombFlag 为是否是雷的标志,如果该空格是雷则相应的位置的bombFlag为1,默认为0int count = new int24 * 17; / count为此方块周围雷的个数static int bombCount = 120;/ 雷的坐标数组,数值为整数,不是绝对坐标,而是相对坐标in
12、t bomb_x = new intbombCount;int bomb_y = new intbombCount;int hadFlag = new intbombCount; / 判断是否有插旗int check = 1; / 判断插旗是否正确int check_x, check_y; / 插旗错误定点的相当坐标int clicked = new int24 * 17;/ 判断是否点击过int clearFlag = new int24 * 17;/ 判断是否已经clear过public MyPanel() / System.out.println(bomb_x55);public voi
13、d paint(Graphics g) / 设置画笔的宽度Graphics2D g2D = (Graphics2D) g;g2D.setStroke(new BasicStroke(3f);/ 画雷上的遮盖物 24;for (int j = 0; j = 0) & (j - 1 = 0) (bombFlag(i - 1) * 17 + (j - 1) = 1) counti * 17 + j+;if (j - 1 (bombFlagi * 17 + (j - 1) = 1) if (i + 1 = 23) & (bombFlag(i + 1) * 17 + (j - 1) = 1) (bomb
14、Flag(i + 1) * 17 + j = 1) (j + 1 = 16) (bombFlag(i + 1) * 17 + (j + 1) = 1) if (j + 1 = 16) & (bombFlagi * 17 + (j + 1) = 1) (bombFlag(i - 1) * 17 + (j + 1) = 1) (bombFlag(i - 1) * 17 + j = 1) if (counti * 17 + j != 0 & bombFlagi * 17 + j != 1) + counti * 17 + j, 22 * i + 2,22 * j + 20);if (check = 0) g.setColor(Color.blue);/ System.out.println(check_x*17+check_y);clickedcheck_x * 17 + check_y = 1;g.drawLine(check_x * 22 + 4, check_y * 22 + 4, check_x * 22 + 20,check_y * 22 + 20);g.drawLine(check_x * 22 + 20, check_y * 22 + 4, check_x * 22 + 4, for(int i=0;i24;i+) for(int j=0;j
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1