我要做一个程序,在5x5网格图上模拟蚂蚁的移动,细胞。想象一个5x5阵列,在位置(2,2)和(3,3)有蚂蚁收集的食物。每只蚂蚁都会从它在特定细胞(1,4或4,1)中的巢穴开始移动。我必须编写一个名为move()的方法,在每次调用中将ant移动一个单元格。移动可以是水平的,也可以是垂直的。蚂蚁也不能移动到最后的位置(避免来回移动)。而且每个细胞都有“气味点”,蚂蚁更喜欢进入最大气味点的细胞(所以你可以比较它的可用选项,选择一个最大气味点的,简单吧?)。现在,问题来了。他们希望蚂蚁在细胞没有气味点或者可用细胞的气味点相等的情况下完全随机移动。总之:
if语句检查蚂蚁在哪个单元格中。当你找到它的时候,你就知道在哪里可以找到他之前的举动。
嵌套的if语句来检查蚂蚁最后出现在哪个单元格中。在5x5区域中是3或4个if语句。当你找到蚂蚁不能移动的最后一个细胞时,你就知道要比较哪些细胞了。
在2或3个单元格之间嵌套if语句,以查找具有最多气味点的单元格。
如果它们的气味点等于或0,则嵌套if语句。在本例中,蚂蚁完全随机移动(我通过math.random()实现)。以上都是为一个细胞!。每个单元格都有不同的选项,因为它在Map中的位置不同。所以要做到这一点,正如你所看到的,我需要太多的if语句。我都数不清了,我都快疯了!但如果没有if语句,我想不出有什么方法可以做到这一点。而且每个细胞都是不同的,蚂蚁有不同的移动选择,所以我不能对它进行分类。例如,假设蚂蚁在(1,1)中。只能转到(1,2)或(2,1)。如果它在(4,2),它可以转到(4,3)或(3,2)或(4,1)或(5,2)!你必须做4个if语句来检查哪一个是他最后的位置,然后继续其他嵌套的if。。。你觉得呢?有这么多“如果”是不对的吗?
// int pos[] = new int[2]; in the pos[0] is the position for the x, pos[1] for the y.
if(isAt(1,1))
{
if(wasAt(pos[0]+1,pos[1]))
{
previousX = pos[0];
previousY = pos[1];
pos[1] = pos[1] + 1;
}
else
{
previousX = pos[0];
previousY = pos[1];
pos[0] = pos[0] + 1;
}
}
1条答案
按热度按时间bvjxkvbb1#
听起来确实太多了
if
声明。以下是一些建议:你应该记住蚂蚁在变量中的位置。我认为你不需要任何if语句来检查蚂蚁在哪个细胞。
你应该记得蚂蚁最后一次在另一个变量中的位置。
你应该列出周围的点和它们的气味点。然后从列表中删除以前的位置。
使用上述集合,您可以循环选择正确的集合,或者如果有多个集合,则从集合中随机选择一个。
移动蚂蚁时,将上一个位置设置为当前位置,然后更新当前位置。