java之线程飞机大战制作
import java.awt.Graphics;
import java.util.ArrayList; import javax.swing.JFrame;
import javax.swing.JPanel; public class PlaneMain extends JPanel { public static void main(String[] args) {
new PlaneMain();
} private ArrayList<View> list; public PlaneMain() {
list = new ArrayList<View>();
View background = new View("background.jpg", 0, -60, 700, 460, 2, this);
list.add(background);
initUI();
} private void initUI() {
JFrame frame = new JFrame("飞机大战");
frame.setSize(700, 400);
frame.setDefaultCloseOperation(3);
frame.setLocationRelativeTo(null);
frame.setResizable(false); frame.add(this); frame.setVisible(true); AddListener al = new AddListener(this, list); this.addMouseListener(al); Thread t = new Thread(al);
t.start();// 启动线程
} /**
* 重写JPanel的重绘方法
*/
public void paint(Graphics g) {
super.paint(g); for (int i = 0; i < list.size(); i++) {
View v = list.get(i);
g.drawImage(v.getBackground(), v.getX(), v.getY(), v.getWidth(),
v.getHeight(), this);
}
} }
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList; import javax.swing.JPanel; public class AddListener extends MouseAdapter implements Runnable { private int count = 0; private JPanel panel;
private ArrayList<View> list; public AddListener(JPanel panel, ArrayList<View> list) {
this.panel = panel;
this.list = list;
} public void mouseReleased(MouseEvent e) {
if (count % 2 == 0) {
View plane = new View("plane.jpg", e.getX(), e.getY(), 50, 50, 3,
panel);
list.add(plane);
count++;
} else {
View bullet = new View("bullet.png", e.getX(), e.getY(), 10, 20, 5,
panel);
list.add(bullet);
count++;
}
} public void run() {
while (true) {
for (int i = 0; i < list.size(); i++) {
View v = list.get(i);
v.move();
if(i!=0)
v.collisions(list);
} panel.repaint(); try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
} }
} }
import java.awt.Image;
import java.util.ArrayList; import javax.swing.ImageIcon;
import javax.swing.JPanel; public class View { private Image background;
private int x = 0, y = -60, moveY, width, height;
private JPanel panel;
private String imageName; /**
* 构造方法
*
* @param background背景图片的对象
* @param x起始X坐标
* @param y起始Y坐标
*/
public View(String imageName, int x, int y, int width, int height,
int moveY, JPanel panel) {
this.imageName = imageName;
this.background = new ImageIcon(this.getClass().getResource(imageName))
.getImage();
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.moveY = moveY;
this.panel = panel;
} public int getWidth() {
return width;
} public void setWidth(int width) {
this.width = width;
} public int getHeight() {
return height;
} public void setHeight(int height) {
this.height = height;
} public Image getBackground() {
return background;
} public void setBackground(Image background) {
this.background = background;
} public int getX() {
return x;
} public void setX(int x) {
this.x = x;
} public int getY() {
return y;
} public void setY(int y) {
this.y = y;
} public int getMoveY() {
return moveY;
} public void setMoveY(int moveY) {
this.moveY = moveY;
} public JPanel getPanel() {
return panel;
} public void setPanel(JPanel panel) {
this.panel = panel;
} public void move() {
if (imageName.equals("background.jpg")) {
y += moveY;
if (y == 0)
y = -60;
} else if (imageName.equals("bullet.png")) {
y += moveY;
if (y >= 400)
y = 0;
} else if (imageName.equals("plane.jpg")) {
y -= moveY;
if (y <= 0)
y = 400;
}
} /**
* 碰撞方法
*/
public void collisions(ArrayList<View> list) {
for (int i = 1; i < list.size(); i++) {
View v = list.get(i);
if (this != v) {
double distance = Math.sqrt((this.x - v.x) * (this.x - v.x)
+ Math.pow(this.y - v.y, 2));
if (distance <= this.height + v.height) {
System.out.println(v.imageName + "和" + this.imageName
+ "发生了碰撞");
}
}
}
} }
java之线程飞机大战制作的更多相关文章
- Python版飞机大战
前面学了java用java写了飞机大战这次学完python基础后写了个python版的飞机大战,有兴趣的可以看下. 父类是飞行物类是所有对象的父类,setting里面是需要加载的图片,你可以换称自己的 ...
- Java飞机大战源代码
刚学不久java,做了一个飞机大战的小小小小游戏,现在把这个思路总结以及代码分享出来.大佬别吐槽(emmmmmm .....开发环境:jdk1.7 开发工具:eclipese PlanelJPanel ...
- java飞机大战之子弹的自动生成
import java.awt.Graphics; import java.util.ArrayList; import javax.swing.JFrame; import javax.swing. ...
- 飞机大战编写以及Java的面向对象总结
面向对象课程完结即可编写一个简单的飞机大战程序.我觉得我需要总结一下 飞机大战中类的设计: 父类:FlyingObject(抽象类) 接口:Award .Enemy 子类:Hero.Bullet.Ai ...
- java版飞机大战 实战项目详细步骤.md
[toc] 分析 飞机大战 首先对这个游戏分析,在屏幕上的物体都是飞行物,我们可以把建一个类,让其他飞行物继承这个类.游戏中应有英雄机(也就是自己控制的飞机).敌人.而敌人应该分为打死给分的飞机(就是 ...
- 用面向对象的编程方式实现飞机大战小游戏,java版
概述 本文将使用java语言以面向对象的编程方式一步一步实现飞机大战这个小游戏 本篇文章仅供参考,如有写的不好的地方或者各位读者哪里没看懂可以在评论区给我留言 或者邮件8274551712@qq.co ...
- Java飞机大战MVC版
PlaneWar Java飞机大战MVC版 //无聊时偷的雷霆战机素材写了一个飞机大战,本意是练习mvc,但写得还是不清晰 github下载:https://github.com/dejavudwh/ ...
- 制作python程序windows安装包(飞机大战源码)
本文以飞机大战源码为例: 1.首先使用pyinstaller -w xxx.py打包 -w的意思是不显示命令行:飞机大战源码由多个.py文件以及一些图片,音乐文件组成,我们将main.py打包, ...
- Java实现飞机大战游戏
飞机大战详细文档 文末有源代码,以及本游戏使用的所有素材,将plane2文件复制在src文件下可以直接运行. 实现效果: 结构设计 角色设计 飞行对象类 FlyObject 战机类 我的飞机 MyPl ...
随机推荐
- 2017-01-15 微信小程序胡诌一
2017年1月9日,正值iphone发布10周年,在2007年的1月9日,乔布斯发布了震惊世界的iphone,10年后张小龙正式推出了他的小程序,究竟何意也没有具体深究.最初的时候小程序并不叫小程序, ...
- Wannafly挑战赛4 B,小AA的数列
题意:求子区间异或和,要求区间长度在l到r之间,并且为偶数 题解:对于每一位算贡献,可以分奇偶来记录,计算的时候只加上奇偶性相同的就保证了为偶数,从大于l的点开始每次++,从大于r的点每次--,记录二 ...
- 格式化SQL和逆格式SQL
上篇说过SQLyog中的计算合适数据类型的功能,现在说下Navicat格式化SQL和逆格式化SQL 啥也不说了,一看图,一目了然,Beautify SQL(格式化,即变成最美的语句)和Minify S ...
- JAX-RS介绍——Java API forRESTful WebServices,JAX-RS的目标是Web Services开发(这与HTML Web应用不同)而Spring MVC的目标则是Web应用开发
JAX-RS Java API forRESTful WebServices旨在定义一个统一的规范,使得 Java 程序员可以使用一套固定的接口来开发 REST 应用,避免了依赖于第三方框架.是一个J ...
- EXCEL对比重复数据
一. EXCEL 突出重复项 1. 选择对应的数据 EXCEL 里选择好数据 2. 选择条件格式 这样就完成了数据重复的突出,可以按条件筛选.选择自己想要的数据
- LNMP安装及配置
LNMP官方网站:http://lnmp.org http://oneinstack.com/install/ 安装详细介绍:http://lnmp.org/install.html 1,安装LNMP ...
- Linux-软件安装管理
1.软件包分类 源码包:脚本安装包 二进制包:RPM包.系统默认包 2.rpm命令管理 @rmp包在系统光盘中 mkdir /mnt/cdrom mount /dev/sr0 /mnt/cdrom c ...
- C#多线程操作
static void Main(string[] args) { Thread thread = Thread.CurrentThread; thread.Name = "Main Thr ...
- 剑指offer--19.重建二叉树
先序:根>左>右 中序:左>根>右 后序:左>右>根 e.g. {1,2,4,7,3,5,6,8} {4,7,2,1,5,3,8,6} 先序第一个元素是根节点,在中 ...
- Boost 读写锁
//#########测试多线程,读写锁,递归锁 #include <boost/thread.hpp> #include <boost/thread/recursive_mutex ...