2013-04-08 4 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(); 
    } 
} 

Thank you.

+5

Я думаю, что это прекрасная возможность научиться использовать отладчик. – NPE

+4

Используйте RMG - Random Monster Generator. –

+0

Постарайтесь задать вопрос, а не просто скопировать код. Как нет никакого способа сказать, какой образ является монстром, игроком или ракетой. – phcoding

ответ

1

С кодом является неполным, то трудно сказать наверняка, но эта линия выглядит подозрительно:

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

Этот код в основном, вероятно, будет выполняться один раз, не так ли? Если BossX изначально равен нулю, код выполняет, где вы меняете его значение. При следующем обновлении BossX не равен нулю (предположительно), поэтому код не выполняется. Поскольку BossX - это координата X, где вы рисуете босса, тогда он не будет двигаться. Вместо этого он просто перерисовывается снова и снова в одном и том же месте.

Чтобы заставить монстра двигаться случайным образом, произвольно увеличивайте или уменьшайте значения координат X и Y во время каждого игрового цикла. Добавьте вторую случайную переменную, чтобы заставить их перемещаться со случайными скоростями в случайном направлении (путем корректировки значения координаты на значение больше одного).

Как прокомментировал NPE, вы должны пройти через код в отладчике и выяснить, что именно происходит.

0

Я довольно новичок в программировании, но вот моя лучшая попытка:

Я хотел бы создать метод, который вызывается каждые х секунд, который генерирует случайное число с помощью math.random(). Я бы сказал,

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

Ваш метод GenerateMonster затем создаст новый объект со значениями по умолчанию для монстра. Чтобы созданный монстр действовал определенным образом, вам нужно наследовать эти функции везде, где вы определили, как вы хотите, чтобы монстр действовал. Я не вижу код для этих функций, поэтому я предполагаю, что вы просто не перечислили их. Надеюсь, это по крайней мере помогает. Удачи!

Смежные вопросы