我的问题是,当我的代理达到0,0,0,9等时,我试图阻止它转到9,0,或9,9等等,如下例所示
(0,0) N -1.0 (9,0)
(9,0) N -1.0 (8,0)
(8,0) W -1.0 (8,9)我希望它能在网格之间移动,而不是通过绕着电网跑来跑去。从(0,0)到(9,0)改为(0,1) 0r (1 ,0)等。
我尝试了如下简单的代码,以检查x和y值是否大于行数和列数的x和y值,或者x和y值是否小于0。
public boolean Notvalid(int x, int y) {
return (x > cr.NUM_ROWS || y > cr.NUM_COLUMNS || x < 0 || y < 0);
}并在设置x和y协调时调用此方法。
public GridState(int xpos, int ypos) {
if (!Notvalid(x, y)) {
x = xpos;
y = ypos;
} else {
x = cr.START_ROW;
y = cr.START_COL;
}
}有谁知道处理这种规则的更简单的方法吗?
发布于 2014-12-22 14:21:59
您的代码似乎有三个问题:
0 to 9,而cr.NUM_ROWS是10,则应该使用x >= cr.NUM_ROWS或x > cr.NUM_ROWS - 1而不是x > cr.NUM_ROWS。(各栏相同)x和y),而不是代理将要去的位置(xpos,ypos)。x = cr.START_ROW,您似乎完全是在做您不想做的事情,即当代理转到10时将其设置为0。试试这个:
public boolean notValid(int x, int y) {
return x >= cr.NUM_ROWS || y >= cr.NUM_COLUMNS || x < 0 || y < 0;
}
public gridState(int xpos, int ypos) {
if (! notvalid(xpos, ypos)) {
x = xpos;
y = ypos;
} else {
// new position not valid -> just stay where you are
}
}https://stackoverflow.com/questions/27568010
复制相似问题