制作蛇游戏,是我的解决方案,以避免在我的蛇顶部产生“食物/斑点”产卵?

时间:2013-02-07 02:07:12

标签: java collision-detection

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();
}

1 个答案:

答案 0 :(得分:1)

你是对的。您正在测试OR条件,但需要AND。否则,你会在有蛇的行或列的任何地方发生碰撞!

更改

        if(xDiff <= COLLISIONRANGE || yDiff <= COLLISIONRANGE) {

        if(xDiff <= COLLISIONRANGE && yDiff <= COLLISIONRANGE) {