本帖最后由 wang8748568 于 2012-10-19 19:44:15 编辑

解决方案 »

  1.   

    这个代码有点熟悉啊
    像坦克大战其中的一个类
    建议你 debug
      

  2.   

    你难道就不能格式化一下代码? 这么乱看到头痛 eclipse格式化代码 clrl+shift+F 你先格式化再说吧
      

  3.   


    package com.why;import java.awt.*;
    import java.awt.event.*;
    import java.util.Random;
    /**
     *  
     * shit类,包括制造内部类
     *
     */public class Shit{
    EatSFrame esfe;
    public static final int SPEED = 5;//shit移动速度private static Random r = new Random();//随机数,shit掉下坐标随机
    private static int i = 0;
    int x, y;
    private boolean live = true;//shit存活控制变量
    private static Toolkit tk = Toolkit.getDefaultToolkit();
    //private static Image shitsImages =   
    //tk.getImage(Explode.class.getClassLoader().getResource("images/shit.gif"));
    private static Image[] shitsImages = {
    tk.getImage(Shit.class.getClassLoader().getResource("images/fruit_1.gif")),
    tk.getImage(Shit.class.getClassLoader().getResource("images/fruit_2.gif")),
    tk.getImage(Shit.class.getClassLoader().getResource("images/fruit_3.gif")),
    tk.getImage(Shit.class.getClassLoader().getResource("images/fruit_4.gif")),
    tk.getImage(Shit.class.getClassLoader().getResource("images/fruit_5.gif")),
    tk.getImage(Shit.class.getClassLoader().getResource("images/fruit_6.gif"))
    };//构造方法
    public Shit(EatSFrame esfe){  this.x = r.nextInt(EatSFrame.GAMEWIDTH-shitsImages[getI()].getWidth(null));//随机横坐标
    this.y = 30;
    this.esfe= esfe;Shit.setI(r.nextInt(shitsImages.length) );}
    public void draw(Graphics g) {
    //判断不存活则从LIST中删除,并不画
    if(!live) {
    esfe.shits.remove(this);
    return;
    }g.drawImage(shitsImages[i], x, y, null);
    move();
    }
    //向下不断移动
    private void move() {
    y += SPEED;
    //出界就不存活,不画
    if( y > EatSFrame.GAMEHEIGHT - shitsImages[i].getHeight(null)) {
    live = false;
    }
    }
    //得到边界,做碰撞判定
    public Rectangle getRect() {
    return new Rectangle(x, y,shitsImages[i].getWidth(null), shitsImages[i].getHeight(null));
    }
    //碰撞判定方法
    public boolean hitP(EatPerson eatp) {
    if(this.getRect().intersects(eatp.getRect())&&this.live) {
    this.live = false;//碰撞shit就不存活了
    Explode e = new Explode(x, y, esfe);//爆炸圈圈
    esfe.explodes.add(e);//添加进LIST多个圈圈
    EatSFrame.setGAMESCORE(esfe.getGAMESCORE() + 1);//得分
    return true;
    }
    return false;
    }
    //shit制造
    public Shit make() {
    Shit shit = new Shit(esfe);
    esfe.shits.add(shit);
    return shit;
    }
    //制造工厂,一个线程
    private class ShitFactory implements Runnable{public void run() {
    while(true){
    make();
    try {
    Thread.sleep(2000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }}}
    //按键监听,F2开始线程
    public void keyPressed(KeyEvent e) {
    int key = e.getKeyCode();switch(key) {
    case KeyEvent.VK_F2 :
    new Thread(new ShitFactory()).start();
    break;
    }
    }
    public static int getI() {
    return i;
    }
    public static void setI(int i) {
    Shit.i = i;
    }}
    主类里面这样写的
    for(int i=0; i<shits.size(); i++) {
    Shit st = shits.get(i);
    st.hitP(ep);
    st.draw(g);
    }