代码如下

<font size="3">package Game;

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel; public class BackgroundPanel extends JPanel {
private static final long serialVersionUID = 1L;
private Image image;// 背景图片 public BackgroundPanel() {
setOpaque(false);
setLayout(null);
} public void setImage(Image image) {
this.image = image;
} /**
* 画出背景
*/
protected void paintComponent(Graphics g) {
if (image != null) {
// 图片宽度
int width = getWidth();
// 图片高度
int height = getHeight();
// 画出图片
g.drawImage(image, 0, 0, width, height, this);
}
super.paintComponent(g);
}
}
</font>

  

<font size="3">package Game;

import java.awt.Container;
import java.awt.event.*;
import javax.swing.*; public class BirdLabel extends JLabel implements Runnable {
private static final long serialVersionUID = 1L;
// 随机生成线程的休眠时间,即控制小鸟移动速度
private int sleepTime = (int) (Math.random() * 300) + 5;
private int y = 100;
private Thread thread;// 将线程作为成员变量
private Container parent;
private int score = 15;// 该类角色对应的分数 /**
* 构造方法
*/
public BirdLabel() {
super();
// 创建小鸟图标对象
ImageIcon icon = new ImageIcon(getClass().getResource("bird.gif"));
setIcon(icon);// 设置控件图标
addMouseListener(new MouseAction());// 添加鼠标事件监听器
// 添加控件事件监听器
addComponentListener(new ComponentAction());
thread = new Thread(this);// 创建线程对象
} /**
* 控件的控件事件监听器
*/
private final class ComponentAction extends ComponentAdapter {
public void componentResized(final ComponentEvent e) {
thread.start();// 线程启动
}
} /**
* 控件的鼠标事件监听器
*/
private final class MouseAction extends MouseAdapter {
public void mousePressed(final MouseEvent e) {
if (!MainFrame.readyAmmo())// 如果子弹没有准备好
return;// 什么也不做
MainFrame.useAmmo();// 消耗子弹
appScore();// 加分
destory();// 销毁本组件
}
} public void run() {
parent = null;
int width = 0;
try {
while (width <= 0 || parent == null) {
if (parent == null) {
parent = getParent();// 获取父容器
} else {
width = parent.getWidth();// 获取父容器的宽度
}
Thread.sleep(10);
}
for (int i = width; i > 0 && parent != null; i -= 8) {
setLocation(i, y);// 从右向左移动本组件位置
Thread.sleep(sleepTime);// 休眠片刻
}
} catch (InterruptedException e) {
e.printStackTrace();
}
if (parent != null) {
MainFrame.appScore(-score * 10); // 自然销毁将扣分
}
destory();// 移动完毕,销毁本组件
} /**
* 从容器移除本组件的方法
*/
public void destory() {
if (parent == null)
return;
parent.remove(this);// 从父容器中移除本逐渐
parent.repaint();
parent = null; // 通过该语句终止线程循环
} /**
* 加分的方法
*/
private void appScore() {
System.out.println("小鸟被击中");
MainFrame.appScore(15);
}
}
</font>

  详细说明:http://java.662p.com/thread-3575-1-1.html

Java Swing打猎射击游戏源码的更多相关文章

  1. Java写的斗地主游戏源码

    源码下载在最后 我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序.一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”, ...

  2. Java版的扫雷游戏源码

    package com.xz.sl; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; i ...

  3. 射击的乐趣:WIN32诠释打飞机游戏源码补充

    打飞机游戏源码补充 从指定位置加载bmp并显示到对话框. , TRUE);, , LR_LOADFROMFILE);          {         BITMAP bmpinfo;        ...

  4. HTML5小游戏源码收藏

    html5魅族创意的贪食蛇游戏源码下载 html5网页版打砖块小游戏源码下载 html5 3D立体魔方小游戏源码下载 html5网页版飞机躲避游戏源码下载 html5三国人物连连看游戏源码下载 js ...

  5. 3D坦克大战游戏源码

    3D坦克大战游戏源码,该游戏是基于xcode 4.3,ios sdk 5.1开发.在xcode4.3.3上完美无报错.兼容ios4.3-ios6.0 ,一款ios平台上难得的3D坦克大战游戏源码,有2 ...

  6. iOS版打地鼠游戏源码

    打地鼠游戏源码,游戏是一款多关卡基于cocos2d的iPad打地鼠游戏源码,这也是一款高质量的打地鼠游戏源码,可以拥有逐步上升的关卡的设置,大家可以在关卡时设置一些商业化的模式来盈利的,非常完美的一款 ...

  7. html5 canvas简易版捕鱼达人游戏源码

    插件描述:html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠标移出背景图,再移入的时候就可以控制炮的转动,因为是用的mouseover触 ...

  8. ios跑酷游戏源码完整版

    今天在网上看到了一个很流行的ios游戏源码,酷跑游戏源码,个人下载感觉非常不错,运行起来非常不错的,大家可以研究一下吧,由于源码文件较大,没有上传,请大家见谅. 由于文件较大,没有上传了,大家可以到这 ...

  9. ios源码-ios游戏源码-ios源码下载

    游戏源码   一款休闲类的音乐小游戏源码 该源码实现了一款休闲类的音乐小游戏源码,该游戏的源码很简单,而且游戏的玩法也很容易学会,只要我们点击视图中的grid,就可以 人气:2943运行环境:/Xco ...

随机推荐

  1. 关于微信网页调用js-sdk相关接口注意事项目(一级域名与二级域名互相干扰!!!)

    不知道有没有网友遇到过同一个web应用用不同的域名(一级或二级域名)在两个公众号中调用JSSDK相关接口实现功能, 这种做法本来没有问题,问题在于用二级域名(同属一级域名下的二级域名)绑定另一个web ...

  2. header('Content-type:text/html;charset = utf-8');出现中文乱码

    header('Content-type:text/html;charset = utf-8'); "="两旁不能留空格,必须紧密连写,否则出现乱码;

  3. 30天轻松学习javaweb_打包web项目成war

    jar -cvf news.war news 打包成 war 包后复制到webapps下,Tomcat将会解压.

  4. How To Easily Call WCF Services Properly z

    Please note: this article has been superceded by the documentation for the ChannelAdam WCF Library. ...

  5. minicom的安装及使用

    1.下载 sudo apt-get install minicom 2.运行 sudo minicom -s 3.修改端口 首先查看端口:ls /dev/tty...

  6. Python中为什么推荐使用isinstance来进行类型判断?而不是type

    转自:http://www.xinxingzhao.com/blog/2016/05/23/python-type-vs-isinstance.html Python在定义变量的时候不用指明具体的的类 ...

  7. 安装LINUX X86-64的10201出现链接ins_ctx.mk错误-转自yingtingkun

    详细错误信息为: Error in invoking target ‘install’ of makefile ‘/opt/oracle/product/10.2/ctx/lib/ins_ctx.mk ...

  8. es增量自定义更新的脚本

    安装需要可软件 sudo apt-get install python-pip sudo pip install elasticsearch; sudo apt-get install python- ...

  9. framMaker、Velocity模版引擎

    1.一种模板文件,可以自动加载数据到模板里面展现. 类似:Velocity 2.使用场景 1.web开发模式 WEB-INF/view/vm 在互联网公司的开发都是基于vm的开发,其次就是使用JS的框 ...

  10. 中南大学第一届长沙地区程序设计邀请赛 To Add Which?

    1350: To Add Which? Time Limit: 1 Sec  Memory Limit: 128 MB Description There is an integer sequence ...