package test;

 import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent; import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
/**
* 打地鼠游戏
* @author mike
*
*/
public class Shrewmouse extends JFrame implements Runnable {
private JLabel[] mouses;// 存放显示地鼠标签的数组
private ImageIcon imgMouse;// 地鼠图片对象
private int clickedNumber = 0;// 击中的地鼠数量
private long[] jumpTime;// 地鼠跳出的当前时间数组 public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
Shrewmouse frame = new Shrewmouse();// 创建窗体
frame.setVisible(true);// 显示窗体
new Thread(frame).start();// 启动线程
} catch (Exception e) {
e.printStackTrace();
}
}
});
} public Shrewmouse() {
super();
setResizable(false);// 禁止调整窗体大小
getContentPane().setLayout(null);// 设窗体不使用布局管理器
setTitle("简易打地鼠游戏");// 标题
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 初始化背景图像对象
ImageIcon img = new ImageIcon(getClass().getResource("background.jpg"));
// 初始化地鼠图片对象
imgMouse = new ImageIcon(getClass().getResource("mouse.png"));
mouses = new JLabel[6];// 创建显示地鼠的标签数组
jumpTime = new long[6];// 创建显示地鼠跳出的当前时间数组
for (int i = 0; i < mouses.length; i++) {// 遍历数组
mouses[i] = new JLabel(); // 初始化每个数组
// 设置标签与地鼠图片同样的大小
mouses[i].setSize(imgMouse.getIconWidth(), imgMouse.getIconHeight());
mouses[i].addMouseListener(new MouseAdapter() {// 为标签添加鼠标事件监听适配器
/**
* 处理鼠标单击事件的方法
*/
@Override
public void mouseClicked(MouseEvent e) {
Object source = e.getSource();// 获取事件源,即地鼠标签
JLabel mouse = (JLabel) source;
if (mouse.getIcon() != null) {// 如果地鼠标签存在地鼠图片,设置为空
mouse.setIcon(null);
clickedNumber++;// 被击中地鼠数量自增
}
}
});
getContentPane().add(mouses[i]); }
mouses[0].setLocation(253, 300);
mouses[1].setLocation(333, 250);
mouses[2].setLocation(388, 296);
mouses[3].setLocation(362, 364);
mouses[4].setLocation(189, 353);
mouses[5].setLocation(240, 409); final JLabel backLabel = new JLabel();
// 设置标签与背景图片相同的大小
backLabel.setBounds(0, 0, img.getIconWidth(), img.getIconHeight()); // 设置窗体近似背景图片大小
setBounds(100, 100, img.getIconWidth(), img.getIconHeight() + 30);
backLabel.setIcon(img);// 添加背景到标签
getContentPane().add(backLabel);// 添加背景图片到窗体 } /**
* 线程的核心方法
*/
@Override
public void run() {
while (true) { // 使用无限循环
for (int i = 0; i < jumpTime.length; i++) {// 循环地鼠跳出的当前时间数组
if (System.currentTimeMillis() - jumpTime[i] > 1000) {// 如果地鼠显示时间超过1秒,设置图片为空
mouses[i].setIcon(null);
}
}
try {
Thread.sleep(1000);// 使线程休眠1秒
int index = (int) (Math.random() * 6);// 生成随机的地鼠索引
if (mouses[index].getIcon() == null) {// 如果地鼠索引没有设置图片
mouses[index].setIcon(imgMouse);// 为该标签添加地鼠图片
jumpTime[index] = System.currentTimeMillis();
}
if (clickedNumber == 10) {// 如果击中10个地鼠就赢了
int result =JOptionPane.showConfirmDialog(this, "<html><body>You Win!!<br/>是否继续?</body></html>", "提示信息", JOptionPane.YES_NO_OPTION,
JOptionPane.INFORMATION_MESSAGE);
if (result==JOptionPane.YES_OPTION) {
clickedNumber=0;
continue;//继续循环
}else {
break;// 跳出循环
}
} } catch (InterruptedException e) {
e.printStackTrace();
} }
}
}

Java敲地鼠代码的更多相关文章

  1. JNI_最简单的Java调用C/C++代码

    JNI_最简单的Java调用C/C++代码 JNI.是Java Native Interface的简称,中文是"Java本地调用".通过这种技术能够做到下面两点: Java程序中的 ...

  2. Cocos2D iOS之旅:如何写一个敲地鼠游戏(七):弹出地鼠

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  3. (转载)JAVA动态编译--字节代码的操纵

    在一般的Java应用开发过程中,开发人员使用Java的方式比较简单.打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java 程序就可以了.这种开发模式背后的过程是:开发人员编写的 ...

  4. 转:java怎么用一行代码初始化ArrayList

    java怎么用一行代码初始化ArrayList 您可以创建一个工厂方法: public static ArrayList<String> createArrayList(String .. ...

  5. java中的静态代码块、构造代码块、构造方法

    运行下面这段代码,观察其结果: package com.test; public class HelloB extends HelloA { public HelloB() { } { System. ...

  6. 在Java中执行js代码

    在某些特定场景下,我们需要用Java来执行Js代码(如模拟登录时,密码被JS加密了的情况),操作如下: ScriptEngineManager mgr = new ScriptEngineManage ...

  7. java中执行js代码

    要在java中执行js代码,首先明白,java不支持浏览器本身的方法.支持自定义的js方法,否则会报错 先新建一个js文件:jsss.js 内容如下: function aa(a,b){ return ...

  8. 如何把java代码转换成smali代码

    1.概述 Smali是Android系统中Dalvik虚拟机指令语言,在apk逆向过程中有许多工具可以把smali代码转化成java代码.但是在学习Smali语法的过程中,有时候需要进行java代码和 ...

  9. 收藏的一段关于java大数运算的代码

    收藏的一段关于java大数运算的代码: package study_02.number; import java.math.BigDecimal; import java.math.BigIntege ...

随机推荐

  1. HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

    今天在用idea搭建spring mvc时候报了这个错误,缺少jstl的依赖包.由于是使用的spring-core的依赖,而spring-core里面是有jstl的.这就郁闷了,最后是在自己的pom. ...

  2. ES6/ES2015常用知识点和概念

    越来越多的开源库开始使用ES2015来构建代码了,大家知道ES6=ES2015,ES6在2015年被ECMAScript标准化组织approve,各大浏览器厂商要完全支持ES6的强大功能还须一些时日, ...

  3. redis持久化方法

    1.redis持久化,来自官方说明 如何选择使用哪种持久化方式? 一般来说, 如果想达到足以媲美 PostgreSQL 的数据安全性, 你应该同时使用两种持久化功能. 如果你非常关心你的数据, 但仍然 ...

  4. My SQL 和SQL Server区别

    MySQL 与SQL Server区别 今天了解了二者区别,整理网上查阅资料,总结列举如下: MSSQL == SQL server 是sybase与微软合作时期的产物. 对于程序开发人员而言,目前使 ...

  5. 如何给Docker hub用户上传头像

    我第一次使用Docker hub时,觉得很奇怪,这个网站上面没有允许用户上传头像的地方. 后来经过研究才发现,需要用在Docker hub上注册用户的同一个邮箱到Gravatar这个网站上再注册一个账 ...

  6. C# 解决组合优化问题

    Google Optimization Tools介绍 Google Optimization Tools(OR-Tools)是一款专门快速而便携地解决组合优化问题的套件.它包含了: 约束编程求解器. ...

  7. [原]零基础学习SDL开发之在Android使用SDL2.0加载字体

    在上一篇文章我们知道了如何在android使用SDL2.0来渲染显示一张png图,而且在上上一篇我们知道如何使用sdl来渲染输出bmp图,那么sdl是否可以渲染输出自己喜爱的字体库的字体呢?答案是当然 ...

  8. [原创] 腾讯RTX二次开发相关的一些注意事项

    在企业即时通信方面,腾讯的RTX在国内的占有率应该是很高的 所以,就避免不了要与其他系统进行消息集成 腾讯为此提供了二次开发的工具包,支持JAVA.C#.VB等多种开发语言 但是,目前为止,腾讯官方提 ...

  9. virtualbox 安装 mac os x lion 10.7实现全屏显示!

    1. 启动Virtual Box虚拟机,在虚拟机里编辑 /Library/Preferences/SystemConfiguration/com.apple.Boot.plist,找到 <dic ...

  10. 【[HNOI2005]狡猾的商人】

    加权并查集 由于给出信息的是一些一个区间的和为多少,我们显然并不好处理出每一个点应该为多少,这我们根本做不到 但是我们想一下,如果要求一个区间\([l,r]\)的和,那么我们是不是可以利用前缀和\(p ...