java小游戏,打飞机
来源:华佗健康网
废话少说,先上结果图:
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.ArrayList;
import java.util.Random;
import javax.swing.JFrame;
public class GameFrame extends JFrame {
int frameWidth=800;
int frameHeight=640;
Image backgroundimage=Toolkit.getDefaultToolkit().getImage("F:\\JAVA\\gamepciture\\sky.jpg");
int state=0;
int a=0;
PlayerPlane Plyer=new PlayerPlane("F:\\JAVA\\gamepciture\\planePlayer.png",200,400,this);
//子弹列表
ArrayList<Bullet> bulletList=new ArrayList<Bullet>();
//敌方飞机列表
ArrayList<EnemyPlane> enemyList=new ArrayList<EnemyPlane>();
//清除出界和击中子弹
ArrayList<Bullet> removebullet=new ArrayList<Bullet>();
int count=0;
int timecount=0;
public GameFrame() {
setTitle("飞机游戏");
setSize(frameWidth, frameHeight);
//是屏幕居中
setLocationRelativeTo(null);
//添加关闭事件
setDefaultCloseOperation(3);
//用户不能调整窗口大小
setResizable(false);
//添加键盘监听器
addKeyListener(new GameFrame.KeyMonitor());
setVisible(true);
while(true) {
repaint();
if(enemyList.size()<4 && timecount%20==1) {
Random random=new Random();
int rnum=random.nextInt(700);
EnemyPlane enemy =new EnemyPlane("F:\\JAVA\\gamepciture\\emenyplane.png",rnum ,100,this);
enemyList.add(enemy);
}
timecount++;
try {
Thread.sleep(100);
}catch(Exception e) {
e.printStackTrace();
}
}
}
class KeyMonitor extends KeyAdapter{//添加监听器
public void keyPressed(KeyEvent e) {
int key=e.getKeyCode();
if(key==KeyEvent.VK_ENTER) {
state=1;
}else {
//玩家控制飞机
Plyer.keyPressed(e);
}
}
public void keyReleased(KeyEvent e) {
Plyer.keyReleased(e);
}
}
Image offScreem=null;
public void paint(Graphics g) {
if(offScreem==null) {
offScreem=this.createImage(frameWidth, frameHeight);
}
Graphics Gimage=offScreem.getGraphics();
Gimage.setColor(Color.blue);
Gimage.setFont(new Font("黑体",Font.BOLD,50));
Gimage.drawImage(backgroundimage, 0, 0,getWidth(),getHeight(), null);
if(state==0) {
Gimage.drawString("打飞机", 325, 150);
Gimage.drawString("开始游戏", 300, 300);
}else if(state==1) {
//Gimage.drawString("游戏进行中", 300, 300);
//绘制自己飞机
Plyer.paintSelf(Gimage);
//绘制敌方飞机
for(EnemyPlane enemy:enemyList) {
enemy.paintSelf(Gimage);
}
//绘制子弹
bulletList.remove(removebullet);
for(Bullet bullet :bulletList) {
bullet.paintSelf(Gimage);
}
}
//最后把图片画出来
g.drawImage(offScreem,0,0,null );
}
public static void main(String[] args) {
GameFrame gameframe=new GameFrame();
}
}
下面是游戏物体的位置类:
import java.awt.Image;
import java.awt.Toolkit;
public class GameLocation {
int x,y;
Image img;
GameFrame gameFrame;
public GameLocation(String img,int x,int y,GameFrame gameFrame){
this.img=Toolkit.getDefaultToolkit().getImage(img);
this.x=x;
this.y=y;
this.gameFrame=gameFrame;
}
}
再写飞机的父类:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Toolkit;
public abstract class Plane extends GameLocation{
int speed=15;
public Plane(String img,int x,int y ,GameFrame gameFrame) {
super(img,x,y,gameFrame);
}
public abstract void attack();
public abstract void paintSelf(Graphics g);
public abstract Rectangle getRec();
public abstract Point getHeadPoint();
}
再写玩家飞机的类,即飞机类的一个子类:
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
public class PlayerPlane extends Plane {
boolean up,down,left,right;
public PlayerPlane(String img, int x, int y, GameFrame gameFrame) {
super(img, x, y, gameFrame);
// TODO Auto-generated constructor stub
}
@Override
public void paintSelf(Graphics g) {
g.drawImage(img,x,y,null);
move();
attack();
// TODO Auto-generated method stub
}
@Override
public Rectangle getRec() {
// TODO Auto-generated method stub
return new Rectangle(x,y,img.getWidth(null),img.getHeight(null));
}
public void right() {
if(x-speed>-50) {
x=x-speed;
}
}
public void left() {
if(x+speed<700) {
x=x+speed;
}
}
public void up() {
if(y-speed>-50) {
y=y-speed;
}
}
public void down() {
if(y+speed<550) {
y=y+speed;
}
}
public void keyPressed(KeyEvent e) {//当键盘按下的时候
int key=e.getKeyCode();
switch(key) {
case KeyEvent.VK_A:
right=true;
break;
case KeyEvent.VK_S:
down=true;
break;
case KeyEvent.VK_D:
left=true;
break;
case KeyEvent.VK_W:
up=true;
break;
default:
break;
}
}
public void keyReleased(KeyEvent e) {//当键盘按下释放的时候
int key=e.getKeyCode();
switch(key) {
case KeyEvent.VK_A:
right=false;
break;
case KeyEvent.VK_S:
down=false;
break;
case KeyEvent.VK_D:
left=false;
break;
case KeyEvent.VK_W:
up=false;
break;
default:
break;
}
}
private void move() {
if(up) {
up();
}else if(down) {
down();
}else if(left) {
left();
}else if(right) {
right();
}
// TODO Auto-generated method stub
}
//攻击冷却状态
private boolean attackCoolDown=true;
//攻击冷却时间毫秒间隔1000ms
private int attackCoolDownTime=400;
@Override
public void attack() {
// TODO Auto-generated method stub
Point p=this.getHeadPoint();
if(attackCoolDown) {
String s="F:\\JAVA\\gamepciture\\bullet1.png";
PlayerBullet bullet1=new PlayerBullet(s,p.x+15,p.y+40,this.gameFrame);
PlayerBullet bullet2=new PlayerBullet(s,p.x+135,p.y+40,this.gameFrame);
this.gameFrame.bulletList.add(bullet1);
this.gameFrame.bulletList.add(bullet2);
new AttackCD().start();
}
}
class AttackCD extends Thread{
//攻击设为冷却状态
public void run() {
attackCoolDown=false;
//休眠
try {
Thread.sleep(attackCoolDownTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//攻击冷却解除
attackCoolDown=true;
}
}
@Override
public Point getHeadPoint() {
// TODO Auto-generated method stub
return new Point(x,y) ;
}
}
敌方飞机的代码类:
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
public class EnemyPlane extends Plane {
public EnemyPlane(String img, int x, int y, GameFrame gameFrame) {
super(img, x, y, gameFrame);
// TODO Auto-generated constructor stub
}
@Override
public void attack() {
// TODO Auto-generated method stub
}
@Override
public void paintSelf(Graphics g) {
// TODO Auto-generated method stub
g.drawImage(img, x, y, gameFrame);
down();
attack();
}
public void down() {
if(flyspeed) {
y=y+5;
}
new FlySpeed().start();
}
//敌机飞行速度控制
private boolean flyspeed=true;
//攻击冷却时间毫秒间隔1000ms
private int flyspeedTime=100;
class FlySpeed extends Thread{
//攻击设为冷却状态
public void run() {
flyspeed=false;
//休眠
try {
Thread.sleep(flyspeedTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//攻击冷却解除
flyspeed=true;
}
}
@Override
public Rectangle getRec() {
// TODO Auto-generated method stub
return new Rectangle(x,y,img.getWidth(null),img.getHeight(null));
}
@Override
public Point getHeadPoint() {
// TODO Auto-generated method stub
return null;
}
}
子弹类:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;
public abstract class Bullet extends GameLocation {
int speed=15;
public Bullet(String img,int x,int y, GameFrame gameFrame) {
super(img,x,y,gameFrame);
}
public abstract void paintSelf(Graphics g) ;
public abstract Rectangle getRec();
public abstract void bulletMove() ;
}
玩家子弹的类需要继承子弹类:
import java.awt.Graphics;
import java.awt.Rectangle;
import java.util.ArrayList;
public class PlayerBullet extends Bullet {
public PlayerBullet(String img,int x,int y,GameFrame gameFrame) {
super(img, x, y,gameFrame);
// TODO Auto-generated constructor stub
}
@Override
public void paintSelf(Graphics g) {
// TODO Auto-generated method stub
g.drawImage(img, x, y, null);
bulletMove();
bullethot();
bulletBorder();
}
public void bullethot() {
// TODO Auto-generated method stub
ArrayList<EnemyPlane> enemyList =this.gameFrame.enemyList;
for(EnemyPlane enemy:enemyList) {
if(this.getRec().intersects(enemy.getRec())) {
enemyList.remove(enemy);
this.gameFrame.removebullet.add(this);
break;
}
}
}
public void bulletBorder() {
if(y+img.getHeight(null)<0) {
this.gameFrame.removebullet.add(this);
}
}
@Override
public Rectangle getRec() {
// TODO Auto-generated method stub
return new Rectangle(x,y,img.getWidth(null),img.getHeight(null));
}
@Override
public void bulletMove() {
// TODO Auto-generated method stub
for(int i=0;i<=100;i++) {
if(i==100) {
y=y-speed;
}
}
}
}
最后一个类(可用可无)启动游戏的类:
public class StatrUpGame {
public static void main(String[] args) {
GameFrame gameframe=new GameFrame();
}
}
游戏所需要的图片这是图片尺寸,飞机和子弹照片,大家可以自己找:
因篇幅问题不能全部显示,请点此查看更多更全内容