2013-12-08 4 views
0

так что я пытаюсь создать игру, созданную arraylist из множества различных пользовательских объектов, блоков, в основном прямоугольника с дополнительными методами, но им смущает то, что я делаю неправильно, так как наряду с созданием объекта Мне нужно создать объект суперкласса, чтобы сделать объект подкласса. Как найдено из других ответов на вопросы. Я новичок в comp sci и nee немного помощи. спасибо за помощь заранее. Поэтому прямо сейчас я работаю над тем, чтобы все блоки были созданы в списке массивов, поэтому они будут заполнять JFrame. Я хочу, чтобы JFrame имел каждый блок, созданный один за другим, но там, где я столкнулся с проблемой, я вижу, что я создаю только один, в то время как у меня есть цикл «для», который работает для создания 144.I реализует, что блоки не выстраиваются в линию правильно, но моя цель - начать игру с грязью объекта, чтобы заполнить список массивов. Объектная грязь является подклассом внутри другого суперкласса, называемого блоком. (я написал какой-то код, который я ожидал внести, но как только я столкнулся с этой проблемой, я прекратил писать, поэтому игнорируем те инструкции if, else и т. Д. СПАСИБО!)Путаница с арреалистами и подклассы

Проблема: он создает только один объект , из которых блок, а не объект грязи.

public class MuthaLoad extends JPanel { 

    public static void main(String[] args) { 
     JFrame window = new JFrame("MuthaLoad"); 
     window.setContentPane(new MuthaLoad()); 
     window.setSize(600,600); 
     window.setLocation(100,100); 
     window.setVisible(true); 

} 
    private int health=100; 
    private int money=100; 

    private ArrayList<block> blockWorld=new ArrayList<block>(); 
    private block block=new block(0,0); 
    private int colum; 

    public MuthaLoad(){ 
     for(int i=0;i<144;i++){ 
      int random=(int)Math.random()*100; 
      blockWorld.add(block.new dirt(50*i,0)); 
      if(i<72){ 

      } 
      else if(random<5){ 

      } 
      else if(random<50){ 
       blockWorld.add(block.new dirt(50,0)); 
      } 
     } 
    } 
     public void paintComponent(Graphics g){ 
      super.paintComponent(g); 
      for(int i=0;i<144;i++){ 
       blockWorld.get(i).draw(g); 
      } 


    } 

}

+0

Вопрос и текст немного помогли, могли бы попытаться объяснить вашу проблему немного более объективно? – prmottajr

+0

уверен, дайте мне минуту – user3078872

+0

В чем проблема? Что делает ваша программа, чего вы не ожидаете? –

ответ

0

Вы не создаете только один блок, вы создаете много блоков, в том же положении:

int random = (int)Math.random() * 100; 

Проблема заключается в следующем:

(int)Math.random(); 

Math#random генерирует число от 0 (включительно) и 1 (исключение). Бросая к типу данных int это значение всегда получает усекается до 0. То, что вы имеете в виду это:

int random = (int)(Math.random() * 100); 

И вам не нужно суперкласса для создания экземпляра подкласса. Я предполагаю, что ваш dirt класса является внутренним класс следующим образом:

class Block { 
    class Dirt extends Block { 
    } 
} 

И вот почему вы на самом деле нужен block, чтобы создать новый dirt. Измените его на статический вложенный класс, и вам не нужно:

class Block { 
    static class Dirt extends Block { 
    } 
} 

Теперь вы можете создать new Block.Dirt().

Или просто сделать новый класс в целом:

// Block.java 
class Block { 
} 

// Dirt.java 
class Dirt extends Block { 
} 

Наконец, Java code convention в том, что все классы начинаются с заглавной буквы. Таким образом, block должно быть Block и dirt должно быть Dirt. Переменные начинаются с строчной буквы.

Block block = new Block(); 
Dirt dirt = new Dirt(); 

Особенно на переполнении стеки вы увидите примеры кода получить выделены на основе этой конвенции, с тем ниже он делает более удобным для чтения для дополнительной причины вашего кода.

+0

спасибо за вашу помощь – user3078872

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