http://i.stack.imgur.com/P7Ano.png< - Image〜..~
希望这个标题有点内容丰富。 我目前正在用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();
}
答案 0 :(得分:1)
你是对的。您正在测试OR条件,但需要AND。否则,你会在有蛇的行或列的任何地方发生碰撞!
更改
if(xDiff <= COLLISIONRANGE || yDiff <= COLLISIONRANGE) {
要
if(xDiff <= COLLISIONRANGE && yDiff <= COLLISIONRANGE) {