我目前正在阅读Daniel Shiffman的“The Code Of Code”,并且一直在玩第一个练习 - 一个简单的'RandomWalker()'。我在Java和Java中实现了类似的东西。没有任何麻烦,但由于某种原因,我的步行者似乎总是或多或少地朝着同一方向前进:
这种情况100%发生。这是我的代码:
class Walker
{
int x;
int y;
// Constructor
Walker()
{
x = width / 2;
y = height / 2;
}
void display()
{
stroke(0); // Colour
point(x, y); // Colours one pixel in
}
void step()
{
float stepX;
float stepY;
stepX = random(-1, 1);
stepY = random(-1, 1);
x += stepX;
y += stepY;
}
}
Walker w;
void setup()
{
size(640, 360);
w = new Walker();
background(255);
}
void draw()
{
w.step();
w.display();
}
这是随机函数的一些人工制品吗?我的第一个想法是它与函数的伪随机性质有关,但教科书明确指出这不应该引人注意,但这种情况每次都会发生。我想知道我的代码是否有问题?
提前致谢。
答案 0 :(得分:2)
您的x
和y
变量都是int
类型。这意味着它们没有小数部分,因此每当您添加或减去它们时,它们都会被截断。以下是一些例子:
int x = 1;
x = x + .5;
//1.5 is truncated, and x stays 1
int x = 1;
x = x - .5;
//.5 is truncated, and x becomes 0
这就是为什么您看到x
和y
变量只会减少的原因。要解决此问题,只需将x
和y
更改为float
类型,以便跟踪小数。
如果您确实需要x
和y
为int
个值,那么您需要stepX
和stepY
也是int
值:
int stepX;
int stepY;
stepX = (int)random(-5, 5);
stepY = (int)random(-5, 5);
x += stepX;
y += stepY;
但您可能只想将x
和y
存储为float
值。