飞机大战 java 源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
package com;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Plane {
Image feijiImage = null;
int x = 300;
int y = 700;
int lifeCount=5;
public Plane() {
try {
feijiImage = ImageIO.read(Plane.class.getClassLoader()
.getResourceAsStream("images/feiji.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics g) {
//画飞机图片
g.drawImage(feijiImage, x, y, null);
//飞机移动
this.move();
// 血条
if(lifeCount>0){
g.setColor(Color.WHITE);
g.fillRect(20, 80, 100, 10);
g.setColor(Color.red);
g.fillRect(20, 80, (100/5)*lifeCount, 10);
g.setColor(Color.blue);
g.setFont(new Font("幼圆", Font.BOLD, 30));
g.drawString("Score:"+Play01.count, 20, 60);
}
}
public void move(){
if(isUP && !isDown && !isLeft && !isRight){
//上
y=y-5;
}else if(!isUP && isDown && !isLeft && !isRight){ //下
y=y+5;
}else if(!isUP && !isDown && isLeft && !isRight){ //左
x=x-5;
}else if(!isUP && !isDown && !isLeft && isRight){ //右
x=x+5;
}else if(isUP && !isDown && isLeft && !isRight){ //左上
x=x-5;
y=y-5;
}else if(!isUP && isDown && isLeft && !isRight){ //左下
x=x-5;
y=y+5;
}else if(isUP && !isDown && !isLeft && isRight){ //右上
x=x+5;
y=y-5;
}else if(!isUP && isDown && !isLeft && isRight){ //右下
x=x+5;
y=y+5;
}
}
boolean isUP = false;
boolean isDown = false;
boolean isLeft = false;
boolean isRight = false;
// 摁下
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) {
isRight=true;
} else if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) {
isLeft=true;
} else if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) {
isUP=true;
} else if (keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) { isDown=true;
}
}
// 放开
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_RIGHT || keyCode == KeyEvent.VK_D) {
isRight=false;
} else if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A) {
isLeft=false;
} else if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_W) {
isUP=false;
} else if (keyCode == KeyEvent.VK_DOWN || keyCode == KeyEvent.VK_S) { isDown=false;
}
}
public Rectangle getRectangle(){
return new Rectangle(x,y,feijiImage.getWidth(null),feijiImage.getHeight(null));
}
}
package com;
public class PlaneStatus {
public static int roleNum = 1;
public static int playStatus = 0;// 0 游戏开始前 1 第一关-1 游戏结束}
package com;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Power {
Image PowerImage = null;
int x = 20;
int y = 0;
public Power() {
this.x=(int)(Math.random()*540)+20;
try {
PowerImage = ImageIO.read(Gift.class.getClassLoader()
.getResourceAsStream("images/power.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics g) {
//画血瓶图片
g.drawImage(PowerImage, x, y, null);
//血瓶移动
y++;
}
public Rectangle getRectangle(){
return new Rectangle(x,y,PowerImage.getWidth(null),PowerImage.getHeight(null));
}
}
package com;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
import javax.imageio.ImageIO;
// 第一关
public class Play01 {
static int count=0;
Image bgImage = null;
// 战机
Plane plane = new Plane();
// 战机子弹
List<MyZiDan> mzds = new ArrayList<MyZiDan>();
// 敌机
List<Diji> dijis = new ArrayList<Diji>();
// 敌机子弹
//List<DijiZiDan> dijizidans = new ArrayList<DijiZiDan>();
// 血瓶
List<Gift> gifts = new ArrayList<Gift>();
List<Power> powers = new ArrayList<Power>();
public Play01() {
try {
bgImage = ImageIO.read(Play01.class.getClassLoader()
.getResourceAsStream("images/bg_01.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
int bgY1 = 0;
int bgY2 = -600;
int fireTime = 0;
boolean flag=false;
public void draw(Graphics g) {
// 画背景图片
g.drawImage(bgImage, 0, bgY1, null);
bgY1 += 5;
if (bgY1 <= 600) {
bgY1 = 0;
}
g.drawImage(bgImage, 0, bgY2, null);
bgY2 += 5;
if (bgY2 >= 0) {
bgY2 = -600;
}
// 清理战机子弹
for (int i = 0; i < mzds.size(); i++) {
MyZiDan myZidan = mzds.get(i);
if (myZidan.x > 800) {
mzds.remove(i);
}
}
// 添加子弹
if (isFire1 == true && flag==false) {
if (fireTime % 8 == 0) {
mzds.add(new MyZiDan(plane.x + 25, plane.y + 0));
}
fireTime++;
}
if (isFire1== true && flag==true) {
if (fireTime % 4 == 0) {
mzds.add(new MyZiDan(plane.x +8, plane.y +0));
mzds.add(new MyZiDan(plane.x +52, plane.y +0));
}
fireTime++;
}
// 画战机子弹
for (int i = 0; i < mzds.size(); i++) {
MyZiDan myZidan = mzds.get(i);
myZidan.draw(g);
}
// 清理敌机
for (int i = 0; i < dijis.size(); i++) {
Diji dj = dijis.get(i);
if (dj.x < -100) {
dijis.remove(i);
}
}
// 抽奖:添加敌机
if ((int) (Math.random() * 20) == 5) {
dijis.add(new Diji());
}
// 抽奖:添加血瓶
if ((int) (Math.random() * 1000) == 5) {
gifts.add(new Gift());
}
for (int i = 0; i < gifts.size(); i++) {
Gift gift = gifts.get(i);
gift.draw(g);
}
//
// 抽奖:添加power
if ((int) (Math.random() * 1000) == 5) {
powers.add(new Power());
}
for (int i = 0; i < powers.size(); i++) {
Power power = powers.get(i);
power.draw(g);
}
// 画敌机
for (int i = 0; i < dijis.size(); i++) {
Diji dj = dijis.get(i);
dj.draw(g);
}
// 画飞机
plane.draw(g);
// 判断战机相撞
for (int i = 0; i < dijis.size(); i++) {
// 先得到每一个敌机
Diji dj = dijis.get(i);
Rectangle r1 = dj.getRectangle();
Rectangle r2 = plane.getRectangle();
if (r1.intersects(r2)) {
dijis.remove(i);
plane.lifeCount = plane.lifeCount - 1;
if(plane.lifeCount>0)
flag=false;
if(plane.lifeCount<1){ PlaneStatus.playStatus=-1; }
}
// 判断战机和血瓶相撞
for (int i = 0; i < gifts.size(); i++) {
// 先得到每一个血瓶
Gift gift = gifts.get(i);
Rectangle r1 = gift.getRectangle();
Rectangle r2 = plane.getRectangle();
if (r1.intersects(r2)) {
gifts.remove(i);
if (plane.lifeCount <5) {
plane.lifeCount = plane.lifeCount + 1;
}
}
}
//// 判断战机和Power相撞
for (int i = 0; i < powers.size(); i++) {
// 先得到每一个power
Power power = powers.get(i);
Rectangle r1 = power.getRectangle();
Rectangle r2 = plane.getRectangle();
if (r1.intersects(r2)) {
powers.remove(i);
flag=true;
}
}
// 判断敌机在中弹
for (int i = 0; i < mzds.size(); i++) {
// 得到每个战机子弹
MyZiDan myzidan = mzds.get(i);
Rectangle r1 = myzidan.getRectangle();
for (int j = 0; j < dijis.size(); j++) {
// 每一个敌机
Diji diji = dijis.get(j);
Rectangle r2 = diji.getRectangle();
if (r1.intersects(r2)) {
mzds.remove(i);
dijis.remove(j);
count++;
}
}
}
boolean isFire1 = false;
boolean isFire2 = false;
public void keyPressed(KeyEvent e) {
plane.keyPressed(e);
if (e.getKeyCode() == KeyEvent.VK_J) {
isFire1 = true;
}
/*if (e.getKeyCode() == KeyEvent.VK_K) {
isFire2 = true;
}*/
}
public void keyReleased(KeyEvent e) {
plane.keyReleased(e);
if (e.getKeyCode() == KeyEvent.VK_J) {
isFire1 = false;
fireTime = 0;
}
/*if (e.getKeyCode() == KeyEvent.VK_K) {
isFire2 = false;
fireTime = 0;
}*/
if( e.getKeyCode()==KeyEvent.VK_P){
for(int i=0;i<dijis.size();i++)
dijis.remove(i);
}
}
}
package com;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.imageio.ImageIO;
// 游戏结束
public class Over {
Image obg=null;
Image ng=null;
public Over() {
try {
obg = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/obg.jpg"));
ng = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/ng.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics g){
g.drawImage(obg, 0, 0, null);
g.drawImage(ng, 120,100, null);
g.setColor(Color.black);
g.setFont(new Font("幼圆", Font.BOLD, 40));
g.drawString("游戏结束啦!",200 ,600 );
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
}
package com;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
public class MainFrame extends JFrame {
Before before =new Before();
Play01 play01 = new Play01();
Over over = new Over();
public MainFrame() {
//设置标题
this.setTitle(" 让子弹飞一会~"); //设置大小
this.setSize(600, 800);
//定位居中
this.setLocationRelativeTo(null);
//添加关闭操作
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //禁止重置大小z
this.setResizable(false);
//添加键盘监听器
//KeyListener --> KeyAdapter
this.addKeyListener(new KeyAdapter(){
@Override
public void keyPressed(KeyEvent e) {
if(PlaneStatus.playStatus == 0){
before.keyPressed(e);
}else if(PlaneStatus.playStatus ==1){
play01.keyPressed(e);
}else if(PlaneStatus.playStatus==-1){
over.keyPressed(e);
}
}
@Override
public void keyReleased(KeyEvent e) {
if(PlaneStatus.playStatus == 0){
before.keyReleased(e);
}else if(PlaneStatus.playStatus ==1){
play01.keyReleased(e);
}else if(PlaneStatus.playStatus==-1){
over.keyReleased(e);
}
}
});
//启动一个线程:每隔20 毫秒执行一次
new Thread(){
public void run(){
while(true){
MainFrame.this.repaint();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
//显示
this.setVisible(true);
}
Image bufferImage =null;
//这个方法也是20毫秒执行一次
public void paint(Graphics g){
if(bufferImage==null){
bufferImage = this.createImage(600, 800);
}
Graphics g4Image = bufferImage.getGraphics();
g4Image.setColor(Color.BLACK);
g4Image.fillRect(0, 0, 600, 800);
this.draw(g4Image);
g.drawImage(bufferImage, 0, 0, null);
}
public void draw(Graphics g){
if(PlaneStatus.playStatus == 0){
before.draw(g);
}else if(PlaneStatus.playStatus ==1){
play01.draw(g);
}else if(PlaneStatus.playStatus==-1){
over.draw(g);
}
}
public static void main(String[] args) {
new MainFrame();
}
}
package com;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.IOException;
import javax.imageio.ImageIO;
public class MyZiDan {
Image zidanImage = null;
int x ;
int y ;
public MyZiDan(int x,int y) {
this.x=x;
this.y=y;
try {
zidanImage = ImageIO.read(MyZiDan.class.getClassLoader()
.getResourceAsStream("images/zidan.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics g) {
//画我军子弹图片
g.drawImage(zidanImage, x, y, null);
//我的飞机子弹移动速度
y-=20;
}
public Rectangle getRectangle(){
return new Rectangle(x,y,zidanImage.getWidth(null),zidanImage.getHeight(null));
}
}
package com;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Diji {
Image dijiImage = null;
int y = -20;
int x = 10;//20 ~ 760
int r;
public Diji() {
this.x=(int)(Math.random()*540)+40;
try {
r = (int)(Math.random()*3)+1;
dijiImage = ImageIO.read(Diji.class.getClassLoader()
.getResourceAsStream("images/diji_"+r+".png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics g) {
//画敌机图片
g.drawImage(dijiImage, x, y, null);
//敌机移动
if(r==1){
y+=4;
}else if(r==2){
y+=4;
}else if(r==3){
y+=7;
}
}
public Rectangle getRectangle(){
return new Rectangle(x,y,dijiImage.getWidth(null),dijiImage.getHeight(null));
}
}
package com;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.imageio.ImageIO;
public class Gift {
Image GiftImage = null;
int x = 20;
int y = 0;
public Gift() {
this.x=(int)(Math.random()*540)+20;
try {
GiftImage = ImageIO.read(Gift.class.getClassLoader()
.getResourceAsStream("images/blood.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics g) {
//画血瓶图片
g.drawImage(GiftImage, x, y, null);
//血瓶移动
y++;
}
public Rectangle getRectangle(){
return new Rectangle(x,y,GiftImage.getWidth(null),GiftImage.getHeight(null));
}
}
package com;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.io.IOException;
import javax.imageio.ImageIO;
public class DijiZiDan {
Image zidanImage = null;
int x ;
int y ;
int fangxiang =0;
public DijiZiDan(int x,int y) {
this.x=x;
this.y=y;
fangxiang = (int)(Math.random()*5);//0 ~ 7
try {
zidanImage = ImageIO.read(DijiZiDan.class.getClassLoader()
.getResourceAsStream("images/dijizidan.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void draw(Graphics g) {
//画敌机子弹图片
g.drawImage(zidanImage, x, y, null);
//移动
this.move();
}
public void move(){
if(fangxiang==0){
//下
y=y+2;
}else if(fangxiang==1){
//左
x=x-2;
}else if(fangxiang==2){
//右
x=x+2;
}else if(fangxiang==3){
//左下
x=x-2;
y=y+2;
}else if(fangxiang==4){
//右下
x=x+2;
y=y+2;
}
}
public Rectangle getRectangle(){
return new Rectangle(x,y,zidanImage.getWidth(null),zidanImage.getHeight(null));
}
}
package com;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.io.IOException;
import javax.imageio.ImageIO;
// 游戏开始之前
public class Before {
Image bg=null;
Image wfeiji=null;
Image kdiji1=null;
Image kdiji2=null;
Image kdiji3=null;
public Before() {
try {
bg = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/bg.jpg"));
wfeiji = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/feiji_1.png"));
kdiji1 = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/kdiji_01.png"));
kdiji2 = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/kdiji_02.png"));
kdiji3 = ImageIO.read(Before.class.getClassLoader().getResourceAsStream("images/kdiji_03.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
int time=0;
public void draw(Graphics g){
if(PlaneStatus.roleNum==1){
// 画妹妹
g.drawImage(bg, 0, 0, null);
g.drawImage(wfeiji, 260, 600, null);
g.drawImage(kdiji1, 200, 50, null);
g.drawImage(kdiji1, 400, 50, null);
g.drawImage(kdiji1, 150, 480, null);
g.drawImage(kdiji1, 400, 480, null);
g.drawImage(kdiji2, 100, 200, null);
g.drawImage(kdiji2, 300, 100, null);
g.drawImage(kdiji2, 480, 200, null);
g.drawImage(kdiji3, 300, 300, null);
g.drawImage(kdiji3, 70, 400, null);
g.drawImage(kdiji3, 510, 400, null);
}
//画回车符
time++;
g.setColor(Color.YELLOW);
g.setFont(new Font("幼圆", Font.BOLD, 30));
if(time<=10){
g.drawString("[Enter]>>", 50, 750);
}else if(time<=20){
g.drawString("[Enter] >>", 50, 750);
}else if(time<=30){
g.drawString("[Enter] >>", 50, 750);
if(time==30){
time=0;
}
}
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_ENTER){
PlaneStatus.playStatus=1;
}
if(keyCode ==KeyEvent.VK_LEFT ||keyCode==KeyEvent.VK_RIGHT ){ PlaneStatus.roleNum = 3-PlaneStatus.roleNum;//1~2 互换}
}
public void keyReleased(KeyEvent e) {
}
}。