java打地鼠游戏

学习java中的图片处理

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{
	boolean isOver=false;//设置标记,游戏是否结束
	private String dir="./images/";//图片目录,当前工程下
	JLabel jlbMouse;//地鼠
	Timer timer;//时间定时器
	Random random;//随机数对象,即生成地鼠的位置
	int delay=1100;//延迟时间
	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(449, 395);
		this.setLocationRelativeTo(null);//设置窗口在屏幕中心
		setbackground();//设置背景
		this.getContentPane().setLayout(null);//设置框架布局模式为空,只有这样,才能知道图片的真正位置
		//设置鼠标为锤子图片
		tk = Toolkit.getDefaultToolkit();
		image = tk.createImage(dir+"chui1.png");
		myCursor = tk.createCustomCursor(image, new Point(10,10), "xxx");
		this.setCursor(myCursor);

		setMessage();//设置一些提示信息
		//在背景图片的基础上设置地鼠图片
		ImageIcon imageMouse = new ImageIcon(dir+"dishu.png");
		jlbMouse = new JLabel(imageMouse);
		jlbMouse.setSize(80,80);
		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);
		game.add(jitemNew);
		game.add(jitemPause);
		game.addSeparator();//菜单里设置分隔线
		game.add(jitemExit);
		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(110, 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(251, 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(391, 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(55, 63);break;
		case 1:jlbMouse.setLocation(321, 204);break;
		case 2:jlbMouse.setLocation(184, 204);break;
		case 3:jlbMouse.setLocation(47, 203);break;
		case 4:jlbMouse.setLocation(297, 133);break;
		case 5:jlbMouse.setLocation(161, 133);break;
		case 6:jlbMouse.setLocation(21, 133);break;
		case 7:jlbMouse.setLocation(310, 63);break;
		case 8:jlbMouse.setLocation(185, 63);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")) {//退出
			System.exit(EXIT_ON_CLOSE);
		}

		if (e.getActionCommand().equalsIgnoreCase("pause")) {//暂停
			timer.stop();
			JOptionPane.showMessageDialog(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) {

	}

}
时间: 2024-07-30 13:06:46

java打地鼠游戏的相关文章

java小游戏代码

一. 需求分析 曾几何时,游戏是海洛因的代名词,让人与玩物丧志联系在一起,一度遭到社会反感和家长抵制.但是,随着互联网的发展,和游戏潜在好处被发现,游戏的价值开始逐渐被社会认可,人们开始接受.认识和了解游戏带来的诸多好处. 现在学生的课业负担重,娱乐时间少,人际交往少,烦恼和压力也因此相应增加.其实玩游戏不仅帮助学生调节情绪,还可以锻炼与提高他们的反应能力和手脑的快速配合能力,同时帮助他们了解电脑和网络知识等,可谓是一举多得.据调查显示,经常玩游戏的学生思维活跃.善于表达.情绪乐观,解决问题时会

完美校招只分三个职位 c++ 、java、 游戏策划

完美校招的职位仅仅三个: c++ .java.  游戏策划(总之一句话,基础非常重要,而且一定要精通一门语言) 问题一:给出一个十六进制的数0xFF 0x80  (只有2"位") 将其转换成有符号的一字节的十进制整数 解:因为是转成有符号数  所以 可以先将其转成二进制  如:0xFF->1111 1111 可见符号位为1,为负数, 负数是以补码存储的,所以求其原码 补码减一 取反即为原码  1111 1110  ->1000 0001 -> -1  取反时符号位不变

Effective Java设定游戏 - 就是爱Java

首先,我们先设定游戏,一个网页游戏的基本场景,主角拥有各种能力,但一开始数值都只有系统初始,随着故事的发展,会接触到各种不同的场景,获得提升角色的道具与装备,来参与更高难度的任务. 阅读全文>> Effective Java设定游戏 - 就是爱Java,布布扣,bubuko.com

JS实现一个基本的打地鼠游戏

直入正题,用JS实现一个简单的打地鼠游戏 因为功能比较简单就直接裸奔JS了,先看看效果图,或者 在线玩玩 吧 如果点击颜色比较深的那个(俗称坏老鼠),将扣分50:如果点击颜色比较浅的那个(俗称好老鼠),将得分100 实现 老鼠好像有点难画,又不想用图片,就直接用CSS画个简单的图代表老鼠和坑吧 html结构 挺简单,用9个 li 标签代表坑,用9个 div 标签代表老鼠 <div class="container"> <h4>无聊打打地鼠</h4>

团队项目——打地鼠游戏(SPEC)系统性能评估测试

1.SPEC测试的目标: 本轮测试的目的是测试打地鼠游戏的需求以及确保每个需求都能得到满足的方法.编写此需求说明书是为了使用户和开发人员对所开发的系统有一致的理解.通过阅读此说明书,开发人员可以了解当前业务的具体需求和要实现的主要功能,用户通过阅读此说明书可以确认开发人员对其业务需求的认识是否正确,并对系统要实现功能有初步的了解. 本轮测试内容包括以下打地鼠游戏以下的子系统: 1.游戏功能子系统 2.积分功能子系统 3.DIY功能子系统 4.计时功能子系统 5.排行功能子系统  2. 项目的典型

Java 3D游戏引擎——JME(java Monkey Engine)

转自:http://bbs.gameres.com/forum.php?mod=viewthread&tid=180732 JME(java Monkey Engine),一个非常棒的Java 3D游戏引擎 一直以来,由于性能等原因,Java并不是3D图形应用的主流平台,但随着各种新技术的出现,这种情况有了很大改变.从开始的JIT.Static compilers,到现代的HotSpot技术,使Java程序的运行效率越来越高,目前已经接近于C++程序.此外,通过JNI技术,Java程序可以调用任

Android 多线程 打地鼠游戏

前言:最近比较喜欢多线程了,看到了一些线程案例,这里总结一下打地鼠游戏的整个过程. 1.首先是主活动要加载的布局,我一般就喜欢早点把这个写上,这样就好在主活动中玩弄这些控件了.闲话不多说,一个FrameLayout,一直以来我用的都是什么RelativeLayout,linearLayout,其实呢,这个东西就把它想做一个布局,仅此而已.里面有一个ImageView,主要就是老鼠的图片了. 2.其次在MainActivity中声明一些变量或者常量,这些变量的作用是暂时的-----从别人那得到东西

《Java小游戏实现》:坦克大战(续一)

<Java小游戏实现>:坦克大战(续一) 上篇博文(http://blog.csdn.net/u010412719/article/details/51712663)只介绍到了能够控制一个坦克在4个方向上移动就结束了,今天就在此基础上继续完成一个一个的小功能. 完成的功能:根据键盘的按键控制一个坦克在8个方向上移动 要完成这个功能,我们要做一下几个事情 1.记录下键盘的按键情况,即要重写键盘按下和抬起的监听事件 采用4个boolean变量来记录,按下为true,抬起为false 具体实现的代码

iOS版打地鼠游戏源码

打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款完整版休闲类游戏源码. 源码下载:http://code.662p.com/view/6306.html<ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> 详细说明:http://ios.662