gpt4 book ai didi

java - 兰顿 Ant 不断沿对角线移动

转载 作者:太空宇宙 更新时间:2023-11-04 10:41:59 25 4
gpt4 key购买 nike

我一直在开发一个处理脚本来模拟兰顿的 Ant ,但是我遇到了一个问题,它只能沿对角线移动。我已经尝试修复它有一段时间了,但我无法弄清楚是什么导致了这个问题。我怀疑这可能与turn()函数有关。

这是代码:

int[][] grid;
int row;
int col;
int dir = 0;
final int DIR_UP = 0;
final int DIR_RIGHT = 1;
final int DIR_DOWN = 2;
final int DIR_LEFT = 3;

void setup()
{
size(500, 500);
background(255);

grid = new int[width][height];
col = width / 2;
row = height / 2;
}

void draw()
{
go();
}

void go()
{
int pix = col + row * width;
int state = grid[row][col];

loadPixels();

if(state == 0)
{
turn(1);
grid[row][col] = 1;

pixels[pix] = color(255);
}
else
{
turn(-1);
grid[row][col] = 0;

pixels[pix] = color(0);
}

updatePixels();

move();
}

void turn(int rotation)
{
dir += rotation;

if(dir < 0)
{
dir = 3;
}
else if(dir > 3)
{
dir = 0;
}

// Does not work, can return negative values
//dir = (dir + rotation) % 4;
}

void move()
{
switch(dir)
{
case DIR_UP:
row--;
case DIR_RIGHT:
col++;
case DIR_LEFT:
col--;
case DIR_DOWN:
row++;
}

if(col < 0)
col = width - 1;
else if(col >= width)
col = 0;

if(row < 0)
row = height - 1;
else if(row >= height)
row = 0;
}

最佳答案

请养成debugging your code的习惯.

特别是,单步执行 switch 语句:

  switch(dir)
{
case DIR_UP:
row--;
case DIR_RIGHT:
col++;
case DIR_LEFT:
col--;
case DIR_DOWN:
row++;
}

dirDIR_UP 时会发生什么?当 dir 如果 DIR_RIGHT 时会发生什么?使用 dir 的硬编码值制作一个简单的草图来测试这部分。

final int DIR_UP = 0;
final int DIR_RIGHT = 1;
final int DIR_DOWN = 2;
final int DIR_LEFT = 3;
int dir = DIR_UP;
switch(dir)
{
case DIR_UP:
println("up");
case DIR_RIGHT:
println("right");
case DIR_LEFT:
println("left");
case DIR_DOWN:
println("down");
}

您会发现,当 dirDIR_UP 时,代码实际上也执行所有其他方向。这是因为 case 语句失败并继续执行。 case 语句类似于“从这里开始”语句。如果您想避免执行其余情况,可以使用 break 关键字来跳出 switch 语句:

final int DIR_UP = 0;
final int DIR_RIGHT = 1;
final int DIR_DOWN = 2;
final int DIR_LEFT = 3;
int dir = DIR_UP;
switch(dir)
{
case DIR_UP:
println("up");
break;
case DIR_RIGHT:
println("right");
break;
case DIR_LEFT:
println("left");
break;
case DIR_DOWN:
println("down");
break;
}

请养成在这样的小型独立示例程序中工作的习惯,并且请debug your code准确了解 future 会发生什么。

关于java - 兰顿 Ant 不断沿对角线移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48874590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com