package javaes.zixue.wangshang.daima;
  2
3 import java.awt.Cursor;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random; import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.Timer; public class HitMouse extends JFrame implements ActionListener,MouseListener{ private static final long serialVersionUID = 1L;
boolean isOver=false;//设置标记,游戏是否结束
private String dir="./images/";//图片目录,当前工程下
JLabel jlbMouse;//地鼠
Timer timer;//时间定时器
Random random;//随机数对象,即生成地鼠的位置
int delay=1000;//延迟时间
Toolkit tk;
Image image;
Cursor myCursor;
JLabel showNum,currentGrade,hitNum;
int showNumber=0,hitNumber=0,currentGrades=1; public HitMouse(){
super("打地鼠");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(500, 300);
this.setLocationRelativeTo(null);//设置窗口在屏幕中心
setbackground();//设置背景
this.getContentPane().setLayout(null);//设置框架布局模式为空,只有这样,才能知道图片的真正位置
//设置鼠标为锤子图片
tk = Toolkit.getDefaultToolkit();
image = tk.createImage(dir+"chui1.png");
myCursor = tk.createCustomCursor(image, new Point(30,30), "xxx");
this.setCursor(myCursor); setMessage();//设置一些提示信息
//在背景图片的基础上设置地鼠图片
ImageIcon imageMouse = new ImageIcon(dir+"datou.png");
jlbMouse = new JLabel(imageMouse);
jlbMouse.setSize(100,100);
this.getContentPane().add(jlbMouse);
jlbMouse.setVisible(false);
jlbMouse.addMouseListener(this);//添加鼠标监听
//定时器
timer = new Timer(delay,this);
random = new Random();
timer.start(); addMenu();//添加菜单 this.setResizable(false);//设置窗口大小不能改变
this.setVisible(true);
} private void addMenu() {
JMenuBar menubar = new JMenuBar();
this.setJMenuBar(menubar);
JMenu game = new JMenu("游戏");
JMenuItem jitemNew = new JMenuItem("新游戏");
jitemNew.setActionCommand("new");
jitemNew.addActionListener(this);
JMenuItem jitemPause = new JMenuItem("暂停");
jitemPause.setActionCommand("pause");
jitemPause.addActionListener(this);
JMenuItem jitemExit = new JMenuItem("退出");
jitemExit.setActionCommand("exit");
jitemExit.addActionListener(this);
/* JMenuItem jitemEasy= new JMenuItem("简单");
jitemExit.setActionCommand("easy");
jitemExit.addActionListener(this);
JMenuItem jitemYiban= new JMenuItem("中等");
jitemExit.setActionCommand("yiban");
jitemExit.addActionListener(this);
JMenuItem jitemKunnan= new JMenuItem("困难");
jitemExit.setActionCommand("kunnan");
jitemExit.addActionListener(this)*/
game.add(jitemNew);
game.add(jitemPause);
game.addSeparator();//菜单里设置分隔线
game.add(jitemExit);
game.addSeparator();//菜单里设置分隔线
/* game.add(jitemEasy);
game.add(jitemYiban);
game.add(jitemKunnan); */
menubar.add(game);
} private void setbackground() {
((JPanel)(this.getContentPane())).setOpaque(false);//如果为 true,则该组件绘制其边界内的所有像素。否则该组件可能不绘制部分或所有像素,从而允许其底层像素透视出来。
ImageIcon bgImage = new ImageIcon("images/beijing.jpg");
JLabel bgLabel = new JLabel(bgImage);
bgLabel.setBounds(0, 25, bgImage.getIconWidth(), bgImage.getIconHeight());
this.getLayeredPane().add(bgLabel, new Integer(Integer.MIN_VALUE));//设置背景图片的层次最低 } private void setMessage() {
ImageIcon showNumb = new ImageIcon(dir+"chuxiancishu.png");
JLabel showLabel = new JLabel(showNumb);
showLabel.setBounds(8, 8, 92, 80);
this.getContentPane().add(showLabel);
showNum = new JLabel("0");
showNum.setBounds(8, 8, 92, 80);
this.getContentPane().add(showNum); ImageIcon hitNumb = new ImageIcon(dir+"chuxiancishu.png");
JLabel hitLabel = new JLabel(hitNumb);
hitLabel.setBounds(148, 8, 92, 80);
this.getContentPane().add(hitLabel);
hitNum = new JLabel("0");
hitNum.setBounds(148, 8, 92, 80);
this.getContentPane().add(hitNum); ImageIcon grade = new ImageIcon(dir+"dangqiandengji.png");
JLabel gradeLabel = new JLabel(grade);
gradeLabel.setBounds(288, 8, 92, 80);
this.getContentPane().add(gradeLabel);
currentGrade = new JLabel("1");
currentGrade.setBounds(288, 8, 92, 80);
this.getContentPane().add(currentGrade);
} public static void main(String[] args) {
new HitMouse();
} public void actionPerformed(ActionEvent e) {
//对菜单项注册事件监听
if(e.getSource() instanceof JMenuItem){
menuItemFun(e);
} int ran=random.nextInt(9);//随机生成一个0~9(不包括9)的随机数
ImageIcon imageMouse = new ImageIcon(dir+"dishu.png");//保证每次随机生成的地鼠图片都是为没被打时的图片
jlbMouse.setIcon(imageMouse);
switch(ran){
case 0:jlbMouse.setLocation(70, 40);break;
case 1:jlbMouse.setLocation(185, 35);break;
case 2:jlbMouse.setLocation(315,40);break;
case 3:jlbMouse.setLocation(55,95);break;
case 4:jlbMouse.setLocation(190,95);break;
case 5:jlbMouse.setLocation(315,90);break;
case 6:jlbMouse.setLocation(50, 155);break;
case 7:jlbMouse.setLocation(190, 160);break;
case 8:jlbMouse.setLocation(320, 160);break;
} jlbMouse.setVisible(true); showNumber++;
showNum.setText(""+showNumber); if( !gamePlan() ){//判断游戏是否结束,并显示游戏进程
timer.stop();
} }
//监听菜单功能功能
private void menuItemFun(ActionEvent e) {
if (e.getActionCommand().equalsIgnoreCase("new")) {//新游戏
timer.stop();
showNumber=0;
hitNumber=0;
currentGrades=1;
delay=1000;
isOver=false;
showNum.setText(""+showNumber);
hitNum.setText(""+hitNumber);
currentGrade.setText(""+currentGrades);
timer = new Timer(delay,this);
timer.start();
}
if (e.getActionCommand().equalsIgnoreCase("exit")) {//退出
isOver=true;
System.exit(EXIT_ON_CLOSE);
} if (e.getActionCommand().equalsIgnoreCase("pause")) {//暂停
timer.stop();
JOptionPane.showMessageDialog(this, "继续请按“确定”");
timer.start();
} /* if (e.getActionCommand().equalsIgnoreCase("easy")) {
timer.stop();
showNumber=0;
hitNumber=0;
currentGrades=1;
delay=2500;
isOver=false;
showNum.setText(""+showNumber);
hitNum.setText(""+hitNumber);
currentGrade.setText(""+currentGrades);
timer = new Timer(delay,this);
timer.start();
} if (e.getActionCommand().equalsIgnoreCase("yiban")) {
timer.stop();
showNumber=0;
hitNumber=0;
currentGrades=1;
delay=1000;
isOver=false;
showNum.setText(""+showNumber);
hitNum.setText(""+hitNumber);
currentGrade.setText(""+currentGrades);
timer = new Timer(delay,this);
timer.start();
} if (e.getActionCommand().equalsIgnoreCase("kunnan")) {
timer.stop();
showNumber=0;
hitNumber=0;
currentGrades=1;
delay=100;
isOver=false;
showNum.setText(""+showNumber);
hitNum.setText(""+hitNumber);
currentGrade.setText(""+currentGrades);
timer = new Timer(delay,this);
timer.start(); } */ } private boolean gamePlan() {
if(showNumber-hitNumber > 8){
JOptionPane.showMessageDialog(this, "Game Over !");
isOver=true;
return false;
}
if(hitNumber > 5){
hitNumber=0;
showNumber=0;
currentGrades++;
if(delay>100){
delay-=50;
}else if(delay>=500){
delay=500;
}
timer.setDelay(delay);
hitNum.setText(""+hitNumber);
showNum.setText(""+showNumber);
currentGrade.setText(""+currentGrades);
}
return true;
} public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) {
if(isOver){
return ;
}
image = tk.createImage(dir+"chui2.png");
myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");
this.setCursor(myCursor);//鼠标按下时,鼠标显示打下去的图片,模拟打的动作
//如果打中地鼠,则地鼠换成被打中的图片,模拟地鼠被打
if(e.getSource()==jlbMouse){
ImageIcon imageIconHit = new ImageIcon(dir+"datou.png");
jlbMouse.setIcon(imageIconHit);
jlbMouse.setVisible(true);
} hitNumber++;
hitNum.setText(""+hitNumber);
} public void mouseReleased(MouseEvent e) {
if(isOver){
return ;
}
//当鼠标放松以后,鼠标变回原来没按下时的图片
image = tk.createImage(dir+"chui1.png");
myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");
this.setCursor(myCursor);
} public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } }

一个基于Myeclipse开发的Java打地鼠小游戏(Appletcation)的更多相关文章

  1. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏

    前言  这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示    ...

  2. 一个基于RSA算法的Java数字签名例子

    原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...

  3. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  4. Java太阳系小游戏分析和源代码

    Java太阳系小游戏分析和源代码 -20150809 近期看了面向对象的一些知识.然后跟着老师的解说做了一个太阳系各行星绕太阳转的小游戏,来练习巩固一下近期学的知识: 用到知识点:类的继承.方法的重载 ...

  5. Java五子棋小游戏(控制台纯Ai算法)

    Java五子棋小游戏(控制台纯Ai算法) 继续之前的那个五子棋程序 修复了一些已知的小Bug 这里是之前的五子棋程序 原文链接 修复了一些算法缺陷 本次增加了AI算法 可以人机对战 也可以Ai对Ai看 ...

  6. 从零开始开发一款H5小游戏(二) 创造游戏世界,启动发条

    本系列文章对应游戏代码已开源 Sinuous game 上一节介绍了canvas的基础用法,了解了游戏开发所要用到的API.这篇文章开始,我将介绍怎么运用这些API来完成各种各样的游戏效果.这个过程更 ...

  7. 从零开始开发一款H5小游戏(三) 攻守阵营,赋予粒子新的生命

    本系列文章对应游戏代码已开源 Sinuous game. 每个游戏都会包含场景和角色.要实现一个游戏角色,就要清楚角色在场景中的位置,以及它的运动规律,并能通过数学表达式表现出来. 场景坐标 canv ...

  8. 一个基于NodeJS开发的APP管理CMS系统

    花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...

  9. Java经典小游戏——贪吃蛇简单实现(附源码)

    一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...

随机推荐

  1. PyAMF and django ForeignKey

    In order to support this, PyAMF needs to provide a synonym mapping between fields. Until then, you c ...

  2. C#通过ODBC查询HANA数据库数据

    创建HANA的ODBC数据库连接. 默认在控制面板——>管理工具——>数据源(ODBC) 提示:如果系统是64位的,要运行 C:\Windows\SysWOW64\odbcad32.exe ...

  3. Android JNI开发生成.h头文件问题

    在JNI开发中,首先要将建立的anroid类编译成.h文件,编译用到命令javah,由于第一次用,以前对java的编译过程也不怎么了解,所以走了好多弯路,网络没有对这一步的详细介绍,这里讲一下: 通过 ...

  4. 数据可视化(3)--Google Charts

    Google Chart API 是谷歌提供的一项动态生成图表的服务.你可以随时自定义图表,以适应网站的外观和感觉.图表使用HTML5/SVG技术提供给iPhone手机, iPad和Android的跨 ...

  5. 【分布式】RPC初探

    事先声明:本文代码参考自Dubbo作者的博客. RPC(Remote Procedure Call)远程过程调用,是分布式系统当中必不可少的一个玩意.比如说在单机系统当中,我想调用某个方法,直接调就可 ...

  6. Socket.IO 1.0 正式发布,快速可靠的实时引擎

    Socket.IO 是目前 Web 领域最火的实时引擎,用于实现基于事件的双向实时的通信.它适用于任何平台,浏览器或设备,专注于可靠性和速度.您可以将数据推送到客户端,并获得实时的计数,日志或图表. ...

  7. API Design

    REST API Design Guidelines V 1.0.201208 Draft 5 Last Updated: 08/31/2012 1       简介 本文档旨在规范REST API的 ...

  8. IOS开发UI基础文本属性Attributes

    文本属性Attributes 1.NSKernAttributeName: @10 调整字句 kerning 字句调整 2.NSFontAttributeName : [UIFont systemFo ...

  9. Spring应用——事务管理

    事务基础:请参看:http://www.cnblogs.com/solverpeng/p/5720306.html 一.Spring 事务管理 1.前提:事务管理器 在使用 Spring 声明式事务管 ...

  10. 领域驱动设计(DDD)实现之路

    2004年,当Eric Evans的那本<领域驱动设计——软件核心复杂性应对之道>(后文简称<领域驱动设计>)出版时,我还在念高中,接触到领域驱动设计(DDD)已经是8年后的事 ...