http://i.stack.imgur.com/P7Ano.png <- 图片 ~..~
希望标题能提供一些信息。我目前正在用 Java 制作我的第一款游戏,我需要一些关于某段代码的帮助。
开始了:
当蛇在一个红色方块(以下称为“blob”)上移动时,该方块会用新的、随机生成的坐标重新绘制。由于这些坐标是随机生成的,因此有可能将斑点涂在我的蛇身上。
我想避免这种情况,我已经让生成随机坐标的方法根据蛇的当前坐标检查它们。蛇由 5x5px 段组成,每个段都有自己的坐标存储在 2D 数组中。
我的逻辑如下: 1)生成 X 和 Y 坐标。2)获取坐标的差异(例如,它们彼此相距多远) 3)如果它们在彼此的 COLLISIONRANGE (5px) 内 -> 不要使用这些坐标。
我真正要问的是:
这是一个好的解决方案吗?我检查这个的方式有什么明显的错误吗?当我玩游戏时,我得到了更多 System.out.println("Log: No-go spawn #" + i); 的触发器。我有记录比我认为是自然的。
似乎随机生成的坐标在蛇段的 COLLISIONRANGE 范围内过于频繁,以至于一切都正确。
我的方法:
private void generateBlobCoordinates() {
Random randomGenerator = new Random();
boolean isClearSpawn = true;
int x = randomGenerator.nextInt(BORDER_X_MAX);
int y = randomGenerator.nextInt(BORDER_Y_MAX);
int xDiff;
int yDiff;
// If generated coords are within COLLISIONRANGE, set isClearSpawn to false
for(int i = 0; i < snakeSegments.length; i++) {
if(snakeSegments[i][0] != -1) {
xDiff = Math.abs(x - snakeSegments[i][0]);
yDiff = Math.abs(y - snakeSegments[i][1]);
if(xDiff <= COLLISIONRANGE || yDiff <= COLLISIONRANGE) {
isClearSpawn = false;
System.out.println("Log: No-go spawn #" + i);
break;
}
}
else
break;
}
if(isClearSpawn == true) {
blobX = x;
blobY = y;
}
else
generateBlobCoordinates();
}