JAVA:飞机大战游戏,让自己的飞机打出子弹,求指导

qaz1278 2015-04-17 03:05:31
代码如下:
主代码:
package com.direct.battlegame;

import java.awt.Color;
import java.awt.Frame;
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.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;

public class GameStart extends Frame{
//设置窗体的宽度和高度
int width = 600;
int height = 700;
int time=0;
//获取工具类的子类
Toolkit tool = Toolkit.getDefaultToolkit();
//获取图片对象
Image bgimg = tool.getImage(GameStart.class.getResource("/imgs/14.jpg"));
//实例化一个背景对象
Background bg = new Background(this);
//获取飞机对象
Image PlaneImg = tool.getImage(GameStart.class.getResource("/imgs/001.png"));
//实例化一个飞机对象
Plane plane = new Plane(255,480,true,this);
//构建方法
public GameStart(){
this.setSize(width, height);//设置窗体的大小
this.setResizable(false);//设置窗体的缩放
this.setLocationRelativeTo(null);//设置窗体位置
this.setTitle("雷霆战机");//设置窗体标题
this.setVisible(true);//设置窗体可见
//内部类设置监听
this.addWindowListener(new WindowAdapter(){
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//添加一个键盘时间监听
this.addKeyListener(new KeyAdapter(){
@Override
public void keyPressed(KeyEvent e){
plane.KeyPressed(e);
}
@Override
public void keyReleased(KeyEvent e){
plane.KeyReleased(e);
}
});
//启动多线程
new MyThread().start();
}
public void paint(Graphics g){
bg.drawMe(g);
plane.drawPlane(g);
}
//内部类加入多线程
class MyThread extends Thread{
//重写run()
@Override
public void run(){
while(true){
try{
sleep(30);
}catch(InterruptedException e)
{
e.printStackTrace();
}
repaint();//重绘图片
time++;
}
}
}
//双缓冲技术 消除闪烁
Image bgImg2 = null ;
@Override
public void update(Graphics g){
if(bgImg2==null){
bgImg2 = this.createImage(width,height);
}
Graphics gs = bgImg2.getGraphics();//画一个图在缓冲区里
//颜色
gs.setColor(Color.WHITE);
//填充物
gs.fillRect(0, 0, width, height);
//输出填充色
print(gs);
g.drawImage(bgImg2, 0, 0,null);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
new GameStart();
}
}

窗体背景图片代码:
package com.direct.battlegame;
import java.awt.Graphics;
public class Background {
//坐标
int x=0;
int y=0;
int y1 = 700;
//GameStart的属性
GameStart gs;

public Background(GameStart gs){
this.gs = gs;//调用GameStart里面的东西
}

//画背景
public void drawMe(Graphics g){
g.drawImage(gs.bgimg, x, y, gs.width,gs.height,null);
g.drawImage(gs.bgimg, x, y1, gs.width,gs.height,null);
move();
}
//背景移动
public void move(){
y+=10;
y1+=10;
if(y>700){
y=y1-700;
}else if(y1>700){
y1=y-700;
}
}
}

画飞机代码:
package com.direct.battlegame;

import java.awt.Graphics;
import java.awt.event.KeyEvent;

public class Plane{
//飞机坐标
int x;
int y;
//飞机尺寸
int width =80;
int height = 100;
//飞机是否存活
boolean alive;
//GameStart 属性
GameStart gs;
//定义方向
boolean isLeft;
boolean isRight;
boolean isUP;
boolean isDown;
//构造方法没有返回值
public Plane(int x,int y,boolean alive,GameStart gs){
this.x= x;
this.y= y;
this.alive= alive;
this.gs= gs;
}
//画飞机
public void drawPlane(Graphics g){
g.drawImage(gs.PlaneImg,x,y,width,height,null);
move();
}
//获取键盘的按键
public void KeyPressed(KeyEvent e){
int keyCode = e.getKeyCode();//获取按键的值
switch(keyCode){
case KeyEvent.VK_A:
isLeft = true;
break;
case KeyEvent.VK_D:
isRight = true;
break;
case KeyEvent.VK_W:
isUP = true;
break;
case KeyEvent.VK_S:
isDown = true;
break;
}
}
//获取按键弹起的值
public void KeyReleased(KeyEvent e){
int keyCode = e.getKeyCode();//获取按键的值
switch(keyCode){
case KeyEvent.VK_A:
isLeft = false;
break;
case KeyEvent.VK_D:
isRight = false;
break;
case KeyEvent.VK_W:
isUP = false;
break;
case KeyEvent.VK_S:
isDown = false;
break;
}
}
//移动飞机
public void move(){
//飞机坐标改变
if(isLeft&&!isRight&&!isUP&&!isDown&&x>0){//左
x-=8;
}
if(!isLeft&&isRight&&!isUP&&!isDown&&x<520){//右
x+=8;
}
if(!isLeft&&!isRight&&isUP&&!isDown&&y>0){//上
y-=8;
}
if(!isLeft&&!isRight&&!isUP&&isDown&&y<600){//下
y+=8;
}
if(isLeft&&!isRight&&isUP&&!isDown&&x>0&&y>0){//左上
x-=8;
y-=8;
}
if(isLeft&&!isRight&&!isUP&&isDown&&x>0&&y<600){//左下
x-=8;
y+=8;
}
if(!isLeft&&isRight&&isUP&&!isDown&&x<520&&y>0){//右上
x+=8;
y-=8;
}
if(!isLeft&&isRight&&!isUP&&isDown&&x<520&&y<600){//右下
x+=8;
y+=8;
}
}
}
...全文
427 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧