一个基于Myeclipse开发的Java打地鼠小游戏(Appletcation)
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)的更多相关文章
- [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏
前言 这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示 ...
- 一个基于RSA算法的Java数字签名例子
原文地址:一个基于RSA算法的Java数字签名例子 一.前言: 网络数据安全包括数据的本身的安全性.数据的完整性(防止篡改).数据来源的不可否认性等要素.对数据采用加密算法加密可以保证数据本身的安全性 ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
- Java太阳系小游戏分析和源代码
Java太阳系小游戏分析和源代码 -20150809 近期看了面向对象的一些知识.然后跟着老师的解说做了一个太阳系各行星绕太阳转的小游戏,来练习巩固一下近期学的知识: 用到知识点:类的继承.方法的重载 ...
- Java五子棋小游戏(控制台纯Ai算法)
Java五子棋小游戏(控制台纯Ai算法) 继续之前的那个五子棋程序 修复了一些已知的小Bug 这里是之前的五子棋程序 原文链接 修复了一些算法缺陷 本次增加了AI算法 可以人机对战 也可以Ai对Ai看 ...
- 从零开始开发一款H5小游戏(二) 创造游戏世界,启动发条
本系列文章对应游戏代码已开源 Sinuous game 上一节介绍了canvas的基础用法,了解了游戏开发所要用到的API.这篇文章开始,我将介绍怎么运用这些API来完成各种各样的游戏效果.这个过程更 ...
- 从零开始开发一款H5小游戏(三) 攻守阵营,赋予粒子新的生命
本系列文章对应游戏代码已开源 Sinuous game. 每个游戏都会包含场景和角色.要实现一个游戏角色,就要清楚角色在场景中的位置,以及它的运动规律,并能通过数学表达式表现出来. 场景坐标 canv ...
- 一个基于NodeJS开发的APP管理CMS系统
花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...
- Java经典小游戏——贪吃蛇简单实现(附源码)
一.使用知识 Jframe GUI 双向链表 线程 二.使用工具 IntelliJ IDEA jdk 1.8 三.开发过程 3.1素材准备 首先在开发之前应该准备一些素材,已备用,我主要找了一个图片以 ...
随机推荐
- 文本框不够长,显示“XXX...”
WPF: How to make the TextBox/TextBlock/Label show "xxx..." if the text content too long? 设 ...
- POJ 3345 Bribing FIPA 树形DP
题目链接: POJ 3345 Bribing FIPA 题意: 一个国家要参加一个国际组织, 需要n个国家投票, n个国家中有控制和被控制的关系, 形成了一颗树. 比如: 国家C被国家B控制, 国 ...
- Eclipse中使用Junit编写测试用例
Eclipse自带Junit插件,不用安装就能在项目中编写测试用例,非常方便. 在项目中添加Junit库 在编写测试用例之前,需要先引入Junit.对项目根目录右键,选择Properties,Java ...
- 【Java】一次SpringMVC+ Mybatis 配置多数据源经历
需求 现在在维护的是学校的一款信息服务APP的后台,最近要开发一些新功能,其中一个就是加入学校电影院的在线购票.在线购票实际上已经有一套系统了,但是是外包给别人开发的,我们拿不到代码只能拿到数据库,并 ...
- Linux磁盘操作命令
查看本地磁盘使用情况:df或者df -l单位为k 容量便于查看,以1024单位换算为M或者G等:df -h或者df -lh 以1000为单位换算:df -H 显示文件系统类型:df -T 显示指定文件 ...
- 浅谈java类集框架和数据结构(1)
在另外一篇博客我简单介绍了java类集框架相关代码和理论. 这一篇博客我主要分析一下各个类集框架的原理以及源码分析. 一:先谈谈LinkedList 这是LinkedList源码的开头,我们能看到几点 ...
- Android学习笔记之使用百度地图实现Poi搜索
PS:装个系统装了一天.心力憔悴.感觉不会再爱了. 学习内容: 1.使用百度Map实现Poi搜索. 2.短串分享 3.在线建议查询 百度地图的研究也算是过半了.能够实现定位,实现相关信息的搜索,实 ...
- ADO.NET学习系列(四)---窗体版的登录小程序
1.需求分析:做一个登录的小程序,基于Winform的窗体小程序.基本要求:登录成功:弹框显示登录成功,登录失败就弹框显示失败. 扩展功能:登录次数超过3次,就”锁定“用户,提示登录错误次数过多,不能 ...
- 译:c#生成条码的web控件
译文:http://www.codeproject.com/Tips/846860/Csharp-Barcode-Generator-Web-Control 在asp.net的web页用c#的web控 ...
- Android Fragment 基本介绍
Fragment 源码:http://www.jinhusns.com/Products/Download/?type=xcj Android是在Android 3.0 (API level 11)开 ...