【发布时间】:2018-04-18 20:01:02
【问题描述】:
大家好 Stack Overflow :)
在编码方面,我是一个巨大的新手,我刚刚遇到了一个我的大脑无法解决的问题......
在我开始谈论这个问题之前,我将粘贴我的代码以便提供一点上下文(如果看到它让你想吐,请提前抱歉)。该问题的主要焦点已被评论,因此应该是相当可见的:
主要
ArrayList<Individual> individuals = new ArrayList<Individual>();
void setup()
{
size(500,500);
for(int i = 0; i < 2; i++)
{
individuals.add(new Individual());
}
println(frameRate);
}
void draw()
{
background(230);
for(int i = 0; i < individuals.size(); i++)
{
individuals.get(i).move();
individuals.get(i).increaseTimers();
individuals.get(i).display();
}
}
个人
class Individual
{
float x;
float y;
int size = 5;
Timer rdyBreed; /* Here is the object that appears to be shared
between individuals of the ArrayList */
float breedRate;
float breedLimit;
Individual()
{
x = random(0, width);
y = random(0, height);
rdyBreed = new Timer("rdyBreed", 0);
breedRate = random(.2, 3);
breedLimit = random(10, 20);
}
void move()
{
int i = (int)random(0, 1.999);
int j = (int)random(0, 1.999);
if (i == 0)
{
x = x + 1;
} else
{
x = x - 1;
}
if (j == 0)
{
y = y + 1;
} else
{
y = y - 1;
}
checkWalls();
}
void checkWalls()
{
if (x < size/2)
{
x = width - size/2;
}
if (x > width - size/2)
{
x = size/2;
}
if (y < size/2)
{
y = width - size/2;
}
if (y > width - size/2)
{
y = size/2;
}
}
void display()
{
noStroke();
if (!rdyBreed.finished)
{
fill(255, 0, 0);
} else
{
fill(0, 255, 0);
}
rect(x - size/2, y - size/2, size, size);
}
void increaseTimers()
{
updateBreedTimer();
}
void updateBreedTimer()
{
rdyBreed.increase(frameRate/1000);
rdyBreed.checkLimit(breedLimit);
rdyBreed.display(x, y);
}
}
定时器
class Timer
{
float t;
String name;
boolean finished = false;
Timer(String name, float t)
{
this.t = t;
this.name = name;
}
void increase(float step)
{
if (!finished)
{
t = t + step;
}
}
void checkLimit(float limit)
{
if (t >= limit)
{
t = 0;
finished = true;
}
}
void display(float x, float y)
{
textAlign(RIGHT);
textSize(12);
text(nf(t, 2, 1), x - 2, y - 2);
}
}
既然已经完成了,让我们来回答我的问题。
基本上,我正在尝试创建某种个人的康威人生游戏,但我马上就遇到了很多问题。
现在我在编写这段代码时的想法是,组成小型模拟“社会”的每个人对于不同的生活事件都会有不同的计时器和价值观,例如交配生孩子。
问题是,我不是面向对象编程的专业人士,因此我对为什么对象没有各自的 Timer 而是对同一个计时器的引用一无所知。
我猜想制作一个计时器的 ArrayList 并利用多态性来发挥我的优势可以做出改变,但我并不确定它或真的如何做到这一点......是的,我需要帮助。
提前致谢:)
编辑:这是调试器的屏幕截图。这些值在每次更新迭代时保持相同。
【问题讨论】:
-
你是说所有个体都在引用同一个 Timer 对象?
-
是的,我忘了添加调试器的屏幕截图,但我现在就做,因为它清楚地表明两者都引用同一个 Timer 对象。
-
是的,谢谢
标签: java object arraylist processing