首先,看看这个Snake-Game。
我的问题是,方法locateApple()
在随机位置生成苹果。
有时它直接在蛇身上产生。我该如何防止这种情况?
一种方法可以是检查Snake体的阵列。但我不知道该怎么做。
谢谢。
答案 0 :(得分:0)
如果没有合适的位置,您可以丢弃苹果并尝试新的位置......
Point position = null;
do{
Point candidate = createRandomLocation();
double distance = measureDistance(head, candidate);
if (distance > 20) { //maybe you check other things as well...
position = new Poisition(candidate)
}
}while(position ==null);
答案 1 :(得分:0)
假设您有一个Coordinate
类,其中包含x
和y
的2个值。这个类的方法如下:
int getX();
获取x
坐标int getY();
获取y
坐标现在您还需要一个包含多个坐标的CoordinateContainer
类。
Coordinate容器类可以包含(以及其他..)方法,如:
void add(Coordinate x);
添加坐标。Coordinate getCoordinate(Coordinate x);
获取坐标等等。
现在您可以将蛇表示为CoordinateContainer
。
contains
方法的实现可能如下所示:
public boolean contains(Coordinate x){
for(int i = 0; i < numOfCoordinates; i++) //numOfCoordinates is an int holding how many Coordinates you have passed in the array.
if(array[i].getX() == x.getX() && array[i].getY() == x.getY()) return true;
return false; // Compare value of X,Y of each Coordinate with the respective X,Y of the parameter Coordinate.
}
既然您有办法检查Coordinate
中是否包含CoordinateContainer
,那么您就可以了。放置苹果的方法可能如下所示:
private void placeNewApple(){
Coordinate newApple = apples.getRandom(); //<-- getRandom() returns a random Coordinate within the board
while(snake.contains(newApple)){
newApple = apples.getNew();
}
placeApple(newApple);// method to place an apple at newApple.getX() , newApple.getY();
}
希望这是有道理的
注意:如果您没有/想要这样做,即使用单独的类,并且您只在主程序中有Array
请添加一些代码对你的问题,我会更新我的答案。