Java敲地鼠代码

  1 package test;
  2 
  3 import java.awt.EventQueue;
  4 import java.awt.event.MouseAdapter;
  5 import java.awt.event.MouseEvent;
  6 
  7 import javax.swing.ImageIcon;
  8 import javax.swing.JFrame;
  9 import javax.swing.JLabel;
 10 import javax.swing.JOptionPane;
 11 /**
 12  * 打地鼠游戏
 13  * @author mike
 14  *
 15  */
 16 public class Shrewmouse extends JFrame implements Runnable {
 17     private JLabel[] mouses;// 存放显示地鼠标签的数组
 18     private ImageIcon imgMouse;// 地鼠图片对象
 19     private int clickedNumber = 0;// 击中的地鼠数量
 20     private long[] jumpTime;// 地鼠跳出的当前时间数组
 21 
 22     public static void main(String[] args) {
 23         EventQueue.invokeLater(new Runnable() {
 24             @Override
 25             public void run() {
 26                 try {
 27                     Shrewmouse frame = new Shrewmouse();// 创建窗体
 28                     frame.setVisible(true);// 显示窗体
 29                     new Thread(frame).start();// 启动线程
 30                 } catch (Exception e) {
 31                     e.printStackTrace();
 32                 }
 33             }
 34         });
 35     }
 36 
 37     public Shrewmouse() {
 38         super();
 39         setResizable(false);// 禁止调整窗体大小
 40         getContentPane().setLayout(null);// 设窗体不使用布局管理器
 41         setTitle("简易打地鼠游戏");// 标题
 42         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 43      
 44         // 初始化背景图像对象
 45         ImageIcon img = new ImageIcon(getClass().getResource("background.jpg"));
 46         // 初始化地鼠图片对象
 47         imgMouse = new ImageIcon(getClass().getResource("mouse.png"));
 48         mouses = new JLabel[6];// 创建显示地鼠的标签数组
 49         jumpTime = new long[6];// 创建显示地鼠跳出的当前时间数组
 50         for (int i = 0; i < mouses.length; i++) {// 遍历数组
 51             mouses[i] = new JLabel(); // 初始化每个数组
 52             // 设置标签与地鼠图片同样的大小
 53             mouses[i].setSize(imgMouse.getIconWidth(), imgMouse.getIconHeight());
 54             mouses[i].addMouseListener(new MouseAdapter() {// 为标签添加鼠标事件监听适配器
 55                 /**
 56                  * 处理鼠标单击事件的方法
 57                  */
 58                 @Override
 59                 public void mouseClicked(MouseEvent e) {
 60                     Object source = e.getSource();// 获取事件源,即地鼠标签
 61                     JLabel mouse = (JLabel) source;
 62                     if (mouse.getIcon() != null) {// 如果地鼠标签存在地鼠图片,设置为空
 63                         mouse.setIcon(null);
 64                         clickedNumber++;// 被击中地鼠数量自增
 65                     }
 66                 }
 67             });
 68             getContentPane().add(mouses[i]);
 69             
 70         }
 71         mouses[0].setLocation(253, 300);
 72         mouses[1].setLocation(333, 250);
 73         mouses[2].setLocation(388, 296);
 74         mouses[3].setLocation(362, 364);
 75         mouses[4].setLocation(189, 353);
 76         mouses[5].setLocation(240, 409);
 77 
 78         final JLabel backLabel = new JLabel();
 79         // 设置标签与背景图片相同的大小
 80         backLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
 81    
 82         // 设置窗体近似背景图片大小
 83         setBounds(100, 100, img.getIconWidth(), img.getIconHeight() + 30);
 84         backLabel.setIcon(img);// 添加背景到标签
 85         getContentPane().add(backLabel);// 添加背景图片到窗体
 86 
 87     }
 88 
 89     /**
 90      * 线程的核心方法
 91      */
 92     @Override
 93     public void run() {
 94         while (true) { // 使用无限循环
 95             for (int i = 0; i < jumpTime.length; i++) {// 循环地鼠跳出的当前时间数组
 96                 if (System.currentTimeMillis() - jumpTime[i] > 1000) {// 如果地鼠显示时间超过1秒,设置图片为空
 97                     mouses[i].setIcon(null);
 98                 }
 99             }
100             try {
101                 Thread.sleep(1000);// 使线程休眠1秒
102                 int index = (int) (Math.random() * 6);// 生成随机的地鼠索引
103                 if (mouses[index].getIcon() == null) {// 如果地鼠索引没有设置图片
104                     mouses[index].setIcon(imgMouse);// 为该标签添加地鼠图片
105                     jumpTime[index] = System.currentTimeMillis();
106                 }
107                 if (clickedNumber == 10) {// 如果击中10个地鼠就赢了
108                     int result =JOptionPane.showConfirmDialog(this, "<html><body>You Win!!<br/>是否继续?</body></html>", "提示信息", JOptionPane.YES_NO_OPTION,
109                             JOptionPane.INFORMATION_MESSAGE);
110                     if (result==JOptionPane.YES_OPTION) {
111                         clickedNumber=0;
112                         continue;//继续循环
113                     }else {
114                         break;// 跳出循环
115                     }
116                 }
117 
118             } catch (InterruptedException e) {
119                 e.printStackTrace();
120             }
121 
122         }
123     }
124 }

 

转载于:https://www.cnblogs.com/hmxin/p/8188770.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值