2013-04-08 110 views
0

我正在製作一個類似Space Impact的遊戲。在我的比賽中,火箭隊正在正常工作,但我無法隨機創建怪物。怪物在屏幕上,但他們不動,所以他們不活躍 我該怎麼做?如何創建隨機怪物

public class Dnm extends JFrame implements Runnable { 
    Graphics dbg; 
    Image dbImage; 
    Image Pik1; 
    Image Boss; 
    static ImageIcon active; 

    int x, y, xDirection, yDirection, BossX, BossY; 

    public void run() { 
     try { 
      while (true) { 
       move(); 
       boss(); 
       Thread.sleep(10); 
      } 
     } catch (Exception e) { 
      System.out.println("Uh-oh, something went wrong!."); 
     } 
    } 

    private void move() { 
     x += xDirection; 
     y += yDirection; 
    } 

    private void boss() { 
     while (BossX == 0) { 
      BossX = getX() - 1; 
     } 

     Random rastgele = new Random(getY()); 
     BossY = rastgele.nextInt(); 
    } 

    public void setXDirection(int xdir) { 
     xDirection = xdir; 
    } 

    public void setYDirection(int ydir) { 
     yDirection = ydir; 
    } 

    // KEY COMMANDS // 
    public class AL extends KeyAdapter { 
     @Override 
     public void keyPressed(KeyEvent e) { 
      int keyCode = e.getKeyCode(); 

      if (keyCode == e.VK_LEFT) { 
       setXDirection(-1); 
      } 
      if (keyCode == e.VK_RIGHT) { 
       setXDirection(+1); 
      } 
      if (keyCode == e.VK_UP) { 
       setYDirection(-1); 
      } 
      if (keyCode == e.VK_DOWN) { 
       setYDirection(+1); 
      } 
     } 

     @Override 
     public void keyReleased(KeyEvent e) { 
      int keyCode = e.getKeyCode(); 
      if (keyCode == e.VK_LEFT) { 
       setXDirection(0); 
      } 
      if (keyCode == e.VK_RIGHT) { 
       setXDirection(0); 
      } 
      if (keyCode == e.VK_UP) { 
       setYDirection(0); 
      } 
      if (keyCode == e.VK_DOWN) { 
       setYDirection(0); 
      } 
     } 

     @Override 
     public void keyTyped(KeyEvent e) { 

     } 
    } 

    // CONSTRUCTOR // 
    public Dnm() { 
     //Image Import 
     ImageIcon still = new ImageIcon("img/rocket.png"); 
     Pik1 = still.getImage(); 

     addKeyListener(new AL()); 

     setTitle("Dnm"); 
     setSize(500, 500); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setResizable(true); 
     setVisible(true); 

     x = 15; 
     y = 15; 
    } 

    public void paint(Graphics g) { 
     dbImage = createImage(getWidth(), getHeight()); 
     dbg = dbImage.getGraphics(); 
     paintComponent(dbg); 
     g.drawImage(dbImage, 0, 0, this); 

    } 

    public void paintComponent(Graphics g) { 
     ImageIcon background = new ImageIcon("img/space.jpeg"); 
     Image background1 = background.getImage(); 

     ImageIcon still1 = new ImageIcon("img/Alien.png"); 
     Boss = still1.getImage(); 

     g.setColor(Color.red); 
     g.drawImage(background1, 0, 0, this); 
     g.drawImage(Boss, BossX, BossY, this); 
     g.drawImage(Pik1, x, y, this); 
     g.setColor(Color.blue); 

     repaint(); 
    } 

    public static void main(String[] args) { 
     Dnm game = new Dnm(); 

     Thread t1 = new Thread(game); 
     t1.start(); 
    } 
} 

謝謝。

+5

我認爲這是學習使用調試器的絕佳機會。 – NPE 2013-04-08 15:30:46

+4

使用RMG - 隨機怪獸發電機。 – 2013-04-08 15:32:10

+0

嘗試仔細詢問您的問題,而不是僅僅複製粘貼代碼。因爲沒有辦法告訴怪物,玩家或火箭是什麼形象。 – phcoding 2013-04-08 16:03:13

回答

1

與您的代碼是不完整的,這是很難肯定地說,但這一行看起來可疑:

while (BossX == 0) { 
    BossX = getX() - 1; 
} 

此代碼是最有可能會被執行一次,對嗎?如果BossX最初爲零,則代碼在您更改其值的位置執行。在下一次更新中,BossX不是零(假定),所以代碼不會執行。因爲BossX是你繪製老闆的X座標,所以它不會移動。相反,它只是在同一個地方反覆重繪。

爲了讓怪物隨機移動,在每個遊戲循環中隨機增加或減少X和Y座標值。添加第二個隨機變量,使它們以隨機方向隨機移動(通過調整座標值大於1的值)。

由於NPE評論,您應該在調試器中單步執行代碼,找出發生了什麼。

0

我相當的編程初學者,但這裏是我最好的嘗試:

我會創建一個名爲生成使用的Math.random()的隨機數每x秒方法。我會說

int number = .5; 
if(number > Math.Random()) 
    GenerateMonster(); 

然後,您的GenerateMonster方法將創建一個新的對象與怪物的默認值。爲了讓怪物的行爲以某種方式發揮作用,無論您如何定義怪物的行爲方式,都需要繼承這些功能。我沒有看到這些函數的代碼,所以我假設你只是沒有列出它們。希望這至少有助於。祝你好運!