package zuoye;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class MyJpanel extends JPanel implements MouseMotionListener, MouseListener,
Runnable {
Hero hero = new Hero();
Random ran = new Random();
Image[] img = new Image[15];//定义敌机图片数组
Image[] imgbj = new Image[6];//定义背景图片数组
int hight=-640;
int hight1= 1280;
int m = 1;//定义初始
int epNum = 6;//初始化敌机的数量
// 所有的子弹的集合
ArrayList<Bullet> bulList = new ArrayList<Bullet>();
// 所有敌机的集合
ArrayList<EnemyPlane> epList = new ArrayList<EnemyPlane>();
public MyJpanel() {
hero.setGk(1);
hero.setR(25);
hero.setX(150);
hero.setY(450);
hero.setAllBlood(140);
hero.setBlood(140);
for(int i=0;i<img.length;i++){
if(i<10){
img[i] = new ImageIcon("img/ep0"+i+".png").getImage();
}else{
img[i] = new ImageIcon("img/ep"+i+".png").getImage();
}
}
for(int i=1;i<imgbj.length;i++){
imgbj[i] = new ImageIcon("img/bg"+i+".jpg").getImage();
}
for (int i = 0; i < epNum; i++) {
EnemyPlane ep = new EnemyPlane();
ep.setR(ran.nextInt(11) + 20);
ep.setSpeed(ran.nextInt(2) + 1);
ep.setX(ran.nextInt(430 - 15 - 2 * ep.getR()));
ep.setY(ran.nextInt(640 - 35 - 2 * ep.getR()) - 640);
ep.setImg1(img[i]);
epList.add(ep);
}
}
public void paint(Graphics g) {
//绘制背景
if(hight==0){
m++;
hight=-640;
hight1= 1280;
}
if(m==6){
m=1;
}
ImageIcon imgIcon = new ImageIcon(imgbj[m]);
Image img = imgIcon.getImage();
g.drawImage(img, 0, hight, 430,hight1,null);
// 绘制所有的子弹
for (int i = 0; i < bulList.size(); i++) {
bulList.get(i).paint(g);
}
// 绘制所有的敌机
for (int i = 0; i < epList.size(); i++) {
epList.get(i).paint(g);
}
// 绘制英雄机
//if(hero.getScore()%10000==0&&hero.getScore()!=0){
// hero.setGk(hero.getGk()+1);
//}
hero.paint(g);
//结束游戏字体
if(hero.getBlood()<=0){
g.setFont(new Font("宋体",Font.BOLD,36));
g.drawString("Game Over !", 100, 260);
g.drawString("得分为:"+hero.getScore(), 100, 340);
g.drawString("通过关卡数为:"+hero.getGk(), 100, 420);
}
}
public void run() {
int count = 0;
int repaintNum=0;
while (hero.getBlood()>0) {
if (hero.isFire() && count % 10 == 0) {
Bullet bul = new Bullet();
bul.setR(10);
bul.setSpeed(15);
bul.setY(hero.getY());
bul.setX(hero.getX() + 25 - bul.getR());
bulList.add(bul);
}
count++;
// 让敌机飞
for (int i = 0; i < epList.size(); i++) {
EnemyPlane ep = epList.get(i);
if (ep.getY() >= 640) {
ep.setY(-2 * ep.getR());
ep.setX(ran.nextInt(430 - 15 - 2 * ep.getR()));
} else {
ep.move();
boolean epByIsHit = false;
for (int j = 0; j < bulList.size(); j++) {
Bullet bt = bulList.get(j);
if (isHit(ep, bt)) {
ep.setY(-2 * ep.getR());
ep.setX(ran.nextInt(430 - 15 - 2 * ep.getR()));
bulList.remove(j);
// 修改得分
hero.setScore(hero.getScore()+100);
if(hero.getScore()%10000==0&&hero.getScore()!=0){
hero.setGk(hero.getGk()+1);
}
// j--;
break;
}
}
if(!epByIsHit){
if(isHit(ep,hero)){
//敌机销毁
ep.setY(-2*ep.getR());
ep.setX(ran.nextInt(430)-15-2*ep.getR());
//修改得分
hero.setScore(hero.getScore()+100);
if(hero.getScore()%10000==0&&hero.getScore()!=0){
hero.setGk(hero.getGk()+1);
}
//英雄减血
hero.setBlood(hero.getBlood()-20);
}
}
}
}
// 让所有子弹飞
for (int i = 0; i < bulList.size(); i++) {
Bullet bul = bulList.get(i);
if (bul.getY() <= -25) {
bulList.remove(i);
i--;
} else {
bul.move();
}
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
repaintNum++;
if(repaintNum%1==0){
hight++;
hight1++;
}
repaint();
}
}
public boolean isHit(EnemyPlane ep, Bullet bt) {
int sumR = ep.getR() + bt.getR();
int xxLen = ep.getX() + ep.getR() - (bt.getX() + bt.getR());
int yyLen = ep.getY() + ep.getR() - (bt.getY() + bt.getR());
int cc = xxLen * xxLen + yyLen * yyLen;
return cc <= sumR * sumR;
}
public boolean isHit(EnemyPlane ep, Hero bt) {
int sumR = ep.getR() + bt.getR();
int xxLen = ep.getX() + ep.getR() - (bt.getX() + bt.getR());
int yyLen = ep.getY() + ep.getR() - (bt.getY() + bt.getR());
int cc = xxLen * xxLen + yyLen * yyLen;
return cc <= sumR * sumR;
}
// 鼠标按键在组件上按下时并拖动时调整
public void mouseDragged(MouseEvent e) {
if(hero.getBlood()>0){
hero.setX(e.getX() - 25);
hero.setY(e.getY() - 35);
hero.setFire(true);
repaint();
}
}
// 鼠标我按键时被调用
public void mouseMoved(MouseEvent e) {
repaint();
}
public void mouseReleased(MouseEvent e) {
hero.setFire(false);
repaint();
}
// 鼠标
public void mouseClicked(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
java实现飞机大战纯java窗口代码,使用多线程.zip
共40个文件
png:20个
jpg:6个
class:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 200 浏览量
2023-02-01
18:41:56
上传
评论
收藏 1.32MB ZIP 举报
温馨提示
java实现飞机大战纯java窗口代码,使用多线程.zip
资源推荐
资源详情
资源评论
收起资源包目录
java实现飞机大战纯java窗口代码,使用多线程.zip (40个子文件)
PlGame
.classpath 301B
.settings
org.eclipse.jdt.core.prefs 629B
src
zuoye
Hero.java 2KB
Bullet.java 879B
EnemyPlane.java 1002B
MyJpanel.java 5KB
StartGame.java 499B
img
bg5.jpg 74KB
ep08.png 7KB
star.jpg 3KB
ep12.png 13KB
Thumbs.db 76KB
ep01.png 6KB
ep14.png 29KB
bg1.jpg 388KB
ep03.png 6KB
ep13.png 27KB
ep05.png 7KB
bg4.jpg 55KB
ep10.png 17KB
hero.png 17KB
8.png 39KB
bg3.jpg 358KB
fire.png 13KB
ep09.png 10KB
bg2.jpg 190KB
ep15.png 10KB
7.png 5KB
ep04.png 5KB
score.png 4KB
ep06.png 9KB
ep02.png 5KB
ep11.png 16KB
ep07.png 7KB
bin
zuoye
Bullet.class 2KB
MyJpanel.class 6KB
Hero.class 3KB
EnemyPlane.class 2KB
StartGame.class 1KB
.project 382B
G
H
共 40 条
- 1
资源评论
GZM888888
- 粉丝: 177
- 资源: 2955
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功