java代码-急求java高手,帮忙看下面的游戏代码,为何只能运行界面类然后其他都看不见也不能玩

问题描述

急求java高手,帮忙看下面的游戏代码,为何只能运行界面类然后其他都看不见也不能玩

//子弹Bullet类
package hy;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

public class Bullet {
//坐标
public int x,y;
//子弹大小
public int width,height;
//子弹杀伤力
public int kill;
//速度
public int speed;
//子弹图片
public String img;
//是否存活
public boolean isLive=true;
//子弹类型(好坏)
public boolean isGood;

public void drawBullet(Graphics g)
{
    Toolkit tk=Toolkit.getDefaultToolkit();
    Image img1=tk.getImage(Bullet.class.getClassLoader().getResource("hy.image/"+img));
    //画图
    g.drawImage(img1, x,y,width,height,null);
}

}
//Person 类
package hy;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.Toolkit;

import javax.tools.Tool;

public class Person {
//敌机坐标
private int x,y;
private int width,height;
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 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 int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public int getKill() {
return kill;
}
public void setKill(int kill) {
this.kill = kill;
}
public String getImgurl() {
return imgurl;
}
public void setImgurl(String imgurl) {
this.imgurl = imgurl;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
//血量
private int hp;
public Person(int x, int y, int width, int height, int hp, int kill,
String imgurl, int speed) {
super();
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.hp = hp;
this.kill = kill;
this.imgurl = imgurl;
this.speed = speed;
}
//杀伤力
private int kill;
//定义图片路径
private String imgurl;
//是否存活
public boolean isLive=true;
//速度
private int speed;
public void drawPerson(Graphics g)
{
//定义系统工具类
Toolkit tk=Toolkit.getDefaultToolkit();
//创建图片对象
Image img=tk.getImage(Person.class.getClassLoader().getResource("hy.image/"+imgurl));
g.drawImage(img,x,y,width,height,null);
move();

}
public void move()
{
    y+=speed;
    if(y>=MyFrame.HEIGHT)
    {
        isLive=false;
    }
    //捡查子弹是否出屏幕
    for (int i = 0; i < MyFrame.bulletAll.size(); i++) {
        if(MyFrame.bulletAll.get(i).y<0)
        {
            MyFrame.bulletAll.get(i).isLive=false;
        }
    }
    this.hitPerson();
    this.hitBullet();
}
//反回当前敌机的矩形
public Rectangle getPersonRectangle()
{
    return new Rectangle(x,y,width,height);
}
//判断相撞
public void hitPerson()
{
    //得到敌机矩形
    Rectangle personRec=this.getPersonRectangle();
    //得到主机矩形
    Rectangle myRec=new Rectangle(MyFrame.my_x,MyFrame.my_y,55,60);
    if(myRec.intersects(personRec)==true)
    {
        this.isLive=false;
        //产生爆炸效果
        Explode e=new Explode(x,y);
        //将e放入爆炸效果集合
        MyFrame.explodeAll.add(e);
    }
}
//判断和玩家子弹的相撞
public void hitBullet()
{
    //得到敌机矩形
    Rectangle personRec=this.getPersonRectangle();
    //得到子弹的矩形
    for (int i = 0; i < MyFrame.bulletAll.size(); i++) {
        Rectangle bulletRec=new Rectangle(MyFrame.bulletAll.get(i).x,MyFrame.bulletAll.get(i).y,20,20);
        if(personRec.intersects(bulletRec)==true)
        {
            MyFrame.score+=10;
            this.isLive=false;
            //产生爆炸效果
            Explode e=new Explode(x,y);
            //将e放入爆炸效果集合
            MyFrame.explodeAll.add(e);
        }
    }

}

}
//MyFrame界面类
package hy;
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 java.util.ArrayList;
import java.util.Random;

import javax.swing.JFrame;

public class MyFrame extends Frame {
public static final int WIDTH=900;
public static final int HEIGHT=700;
public static int my_x=450;
public static int my_y=600;
//分数
public static int score=0;

//定义变量,专门表示键盘按下的键
public static boolean a=false;public static boolean s=false;
public static boolean d=false;public static boolean w=false;
public static boolean j=false;
//敌机的集合
public ArrayList<Person> personAll=new ArrayList<Person>();
//存放爆炸效果的集合
public static ArrayList<Explode> explodeAll=new ArrayList<Explode>();
//存放子弹的集合
public static ArrayList<Bullet> bulletAll=new ArrayList<Bullet>();
public MyFrame()
{
    this.setTitle("雷电飞机射击"+score);
    this.setSize(WIDTH,HEIGHT);
    this.setLocationRelativeTo(null);
    this.setResizable(false);
    this.addWindowListener(new MyWindowClose());
    //添加键盘监听器
    this.addKeyListener(new MyKeyDown());
    this.setVisible(true);
    MyThread t=new MyThread();
    t.start();

}
//定义背景Y座标
int bg_y=0;
@Override
public void paint(Graphics g) {
    Toolkit tk=Toolkit.getDefaultToolkit();
    Image bg_img=tk.getImage(MyFrame.class.getClassLoader()
            .getResource("hy.image/bg2.jpg"));
    g.drawImage(bg_img, 0, bg_y, WIDTH, HEIGHT, null);
    bg_y+=10;
    g.drawImage(bg_img, 0, -HEIGHT+bg_y, WIDTH, HEIGHT, null);
    //判断bg_y的值是否超过窗体的高度
    if(bg_y>HEIGHT)
    {
        bg_y=0;
    }
    Image my_img=tk.getImage(MyFrame.class.getClassLoader()
            .getResource("hy.image/my_img.jpg"));
    g.drawImage(my_img, my_x, my_y, 55, 60, null);
    //创建随机对象
    Random rd=new Random();
    if(rd.nextInt(10)==5)
    {
        //创建敌机
        Person person=new Person(rd.nextInt(850), 45, 32, 58, 100, 100, "enemy1.jpg", 15);
        personAll.add(person);

    }
    for (int i = 0; i < personAll.size(); i++) {
        Person person=personAll.get(i);
        if(person.isLive)
        {
            person.drawPerson(g);
        }
        else
            personAll.remove(person);
    }
    //绘画爆炸
    for (int i = 0; i < explodeAll.size(); i++) {
        Explode e=explodeAll.get(i);
        //判断是否是活字弹
        if(e.isLive)
        {
            e.drawExplode(g);
        }
        else {
            explodeAll.remove(e);
        }
    }
    //绘画子弹
    for (int i = 0; i < bulletAll.size(); i++) {
        Bullet bullet=bulletAll.get(i);
        //判断是否是活子弹
        if(bullet.isLive)
        {
            bullet.drawBullet(g);
        }
        else {
            bulletAll.remove(bullet);
        }
    }
    this.setTitle("雷电飞机射击游戏                            分数:"+score);
}
public void move()
{
    if(a)
        MyFrame.my_x-=20;
    if(d)
        MyFrame.my_x+=20;
    if(s)
        MyFrame.my_y+=20;
    if(w)
        MyFrame.my_y-=20;
    if(j)
    {
        Fire();
    }
}
//开火方法
public void Fire()
{
    Bullet bullet=new Bullet();
    bullet.x=my_x+22;
    bullet.y=my_y+30;
    bullet.img="bullet.jpg";
    bullet.speed=40;
    bullet.width=20;
    bullet.height=20;
    bulletAll.add(bullet);
}
Image img=null;
@Override
public void update(Graphics g) {
    if(img==null)
    {
        img=this.createImage(WIDTH, HEIGHT);
    }
    //利用img创建虚拟画笔
    Graphics gb=img.getGraphics();
    //调用paint方法
    paint(gb);
    //利用真实的画笔g来画图片
    g.drawImage(img, 0,0,WIDTH,HEIGHT,null);
}
public static void main(String[] args) {
    new MyFrame();
}
//内部类,线程类,用来刷新当前窗体S
class MyThread extends Thread
{
    @Override
    public void run() {
        while(true)
        {
            repaint();
            //每时每刻都判断是否要移动飞机
            move();
            try {
                //让子弹前进,速度要比玩家速度快很多
                for (int i = 0; i < bulletAll.size(); i++) {
                    Bullet bullet=bulletAll.get(i);
                    bullet.y-=bullet.speed;
                }
                Thread.sleep(65);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }
}

}
//MyWindowClose类
package hy;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

class MyWindowClose extends WindowAdapter

{

@Override 

 public void windowClosing(WindowEvent e) {  

     System.exit(0);  

}

}

class MyKeyDown extends KeyAdapter

{

 @Override 

public void keyPressed(KeyEvent e) {  

     switch (e.getKeyCode()) {  

    case KeyEvent.VK_A:  

         MyFrame.a=true;           

         break;  

    case KeyEvent.VK_S:  

         MyFrame.s=true;  

         break;  

     case KeyEvent.VK_D:  

         MyFrame.d=true;  

         break;  

    case KeyEvent.VK_W:  

        MyFrame.w=true;  

         break;  

     case KeyEvent.VK_J:  

        MyFrame.j=true;  

         break;  

    default:  

         break;  

     }  

 }  

 @Override 

public void keyReleased(KeyEvent e) {  

    switch (e.getKeyCode()) {  

    case KeyEvent.VK_A:  

        MyFrame.a=false;              

         break;  

    case KeyEvent.VK_S:  

        MyFrame.s=false;  

        break;  

    case KeyEvent.VK_D:  

         MyFrame.d=false;  

         break;  

    case KeyEvent.VK_W:  

         MyFrame.w=false;  

         break;  

     case KeyEvent.VK_J:  

        MyFrame.j=false;  

         break;  

     default:  

         break;  

    }  

}

}
//Explode爆炸类
package hy;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;

public class Explode {
//坐标
private int x;
private int y;
//定义爆炸显示的图片
String img[]={"boom1.jpg","boom2.jpg","boom3.jpg","boom4.jpg","boom5.jpg","boom6.jpg","boom7.jpg","boom8.jpg","boom9.jpg"};
//爆炸的生命
public boolean isLive=true;
//定义下标
private int index=0;
public Explode(int x, int y) {
this.x = x;
this.y = y;
index++;
}
public void drawExplode(Graphics g)
{
//得到工具类
Toolkit tkToolkit=Toolkit.getDefaultToolkit();
//得到图片对象
//得到数组中的图片
String image=img[index];
Image img1=tkToolkit.getImage(Explode.class.getClassLoader().getResource("hy.image/"+image));
g.drawImage(img1, x,y,null);
index++;
if(index>=img.length)
{
index=0;
//生命消失
isLive=false;
}
}
}
//Sound背景音乐类
package hy;
import java.applet.AudioClip;
import java.io.*;
import java.applet.Applet;
import javax.swing.JFrame;
import java.net.MalformedURLException;
import java.net.URL;
public class Sound extends JFrame{
public Sound(){
super();
}
public static void main(String args[]) {
try {
URL cb;
File f = new File("hy.musict.wav"); //引号里面的是音乐文件所在的绝对路径
cb = f.toURL();
AudioClip aau;
aau = Applet.newAudioClip(cb);
//aau.play();
aau.loop();
//循环播放 aau.play() 单曲 aau.stop()停止播放
Sound frame=new Sound();

//frame.setBounds(0, 0, 300, 200);
//frame.setVisible(true);
}
catch (MalformedURLException e) {
e.printStackTrace();
}
}
}

解决方案

每当在面板上新增或者移除组件后都要重画面板

时间: 2024-09-01 02:03:03

java代码-急求java高手,帮忙看下面的游戏代码,为何只能运行界面类然后其他都看不见也不能玩的相关文章

java小白试着分析了一下这个代码。求大神帮忙看一下正不正确;代码如下:

问题描述 java小白试着分析了一下这个代码.求大神帮忙看一下正不正确:代码如下: public class Test{ private static int i = 0; private static int j = 0; public static void main(String[] args) { int i = 2;//i之所以是2 而不是0 是因为 就近原则 int k = 3; { int j = 3; System.out.println("i+j ist"+i+&qu

java spring junit-java junit测试报错找不到自己定义的xml文件 跪求各位高手帮忙解决一下

问题描述 java junit测试报错找不到自己定义的xml文件 跪求各位高手帮忙解决一下 eclipse下junit测试时遇到如下错误,错误内容如下: at jp.co.dgic.eclipse.jdt.internal.junit.runner.DJUnitRunner.main(DJUnitRunner.java:49) caused by:org.springframework.beans.factory. BeanDefinitionStoreException:IoException

java后台逻辑问题-求大神帮忙解释下这段代码。

问题描述 求大神帮忙解释下这段代码. 这是一个从表添加页面的代码.currentx是当前页数.我想问下 st st1 st2 st3是什么意思,就是split(:):这个方法我不是很清楚什么意思,还有下面的!ss.equals("t") t是什么. 传参什么的我晓得. @RequestMapping("/addProcess.do") public String addProcessMaintenance(String currentx, String ids, S

关于java内存泄露求大神帮忙分析

问题描述 关于java内存泄露求大神帮忙分析 用MAT进行分析但是有点看不懂求大神帮忙分析一下 解决方案 Java内存泄露和分析Java内存泄露分析Java内存泄露问题分析 解决方案二: Details 看看 解决方案三: 你看看你有没有写入到内存里很大的文件 解决方案四: 这是今天重新定位问题的明细图片 解决方案五: 这是相关数据的图片

java web问题 求大神帮忙解答啊

问题描述 java web问题 求大神帮忙解答啊 如何实现你发表一个日志,让你自己和你的上级领导还有你的部门领导可以看到. 解决方案 如果你只是做一个学生习作,简单的做法是,你需要一个组织表 id userid superid,分别是当前用户id和上一级用户id 当某个用户看日志的时候,先通过递归上面的表,找到所有的自己下属的id,然后作为条件查询他们发的日志. 解决方案二: 设置权限啊 解决方案三: 日志信息入库,如果领导用户登录,就查询日志显示. 解决方案四: 根据登陆的ID设置展示权限

求大神,给一份 登陆之后返回之前页的java程序,急求

问题描述 求大神,给一份 登陆之后返回之前页的java程序,急求 简单的一个小程序就可以,功能就是在当前页点击登录,跳转到登陆页面,登录完成之后,就又跳回到本页,谢谢了!!!!! 解决方案 这里有个简单的用struts2框架的登录工程,你看看可以不.http://download.csdn.net/detail/wojiushiwo945you/8673999 祝好! 解决方案二: 将当前页的网址以参数的形式传入登录界面,登录成功后,再根据参数打开登录前的页面. 看看现成的网站,好多是这样做的:

c#问题看下多谢了啊-急求大神帮忙看下多谢了啊

问题描述 急求大神帮忙看下多谢了啊 C.MOUSEDOWN事件怎么都不触发求大神帮忙看下谢谢啊看看谢谢搞了几天--看下看看谢谢搞了几天--看下 解决方案 你在跟灵魂对话吗,知道怎么问问题吗 解决方案二: 先检查有没有绑定事件 解决方案三: 是不是没连上数据库啊?......答案就在这里:求大神帮忙,急!!---------------------- 解决方案四: 解决方案五: 我想红色里面那个最小的窗体触发鼠标按下事件 但是不触发 帮忙看 也就是c.mouseDown 解决方案六: 你看看ds的

javascript-新人公司代码急求大牛帮忙解答

问题描述 新人公司代码急求大牛帮忙解答 <@web_css_js></@web_css_js> 是什么,看不懂了,求解! 解决方案 这个应该是某种公司内部的模板引擎定义的规范.要看你的具体公司内部的框架程序,或者开发这个项目的负责人提供的文档和信息.

vfp关于代码的问题!急求大神帮忙

问题描述 vfp关于代码的问题!急求大神帮忙 这个开始查询,命令按钮里面应该写什么代码 解决方案 http://bbs.bccn.net/thread-362271-1-1.html