所以我试图创建一个由许多不同自定义对象,块的arraylist创建的游戏,基本上是一个带有额外方法的矩形,但我对我做错了什么感到困惑,因为随着创建对象我需要创建一个对象用于创建子类对象的超类。从其他回答的问题中找到。我是comp sci的新手,需要一些帮助。感谢您的帮助。所以现在我正在努力在阵列列表中创建所有块,因此它们将填充JFrame。我希望JFrame一个接一个地创建每个块,但是我遇到问题的地方是,它似乎只创建一个,而我有一个' for'循环运行创建144.I意识到块现在不能正确排队,但我的目标是必须用对象污垢启动游戏,以填满数组列表。 object dirt是另一个名为block的超类中的子类。 (我写了一些我希望放入的代码,但是一旦遇到这个问题我就停止写了,所以请忽略那些if和else if语句。谢谢!)
问题:它只创建一个对象,其中包含块,而不是对象污垢。
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 :(得分: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();
特别是在Stack Overflow上,您会注意到代码示例会根据此约定突出显示,因此它会使您的代码更容易阅读,这是因为额外的原因。