Делая змею игрой, является ли мое решение, чтобы избежать "пищи/капель" нерест на вершине моей змеи в порядке?
Http://i.stack.imgur.com/P7Ano.png
Надеюсь, название будет несколько информативным. В настоящее время я делаю свою первую игру на Java, и мне нужна помощь с определенным фрагментом кода.
Вот так:
Когда змея перемещается по Красному квадрату (далее "капля"), квадрат перекрашивается новыми, случайно сгенерированными координатами. Поскольку эти координаты генерируются случайным образом, существует вероятность того, что капля будет нарисована поверх моей змеи.
I хотите избежать этого, и я сделал метод, генерирующий случайные координаты, чтобы проверить их на соответствие текущим координатам змеи. Змея состоит из 5x5px сегментов, каждый со своими собственными координатами, хранящимися в 2D-массиве.
Моя логика заключается в следующем: 1) генерируйте координаты X и Y. 2) получить дифференциал координат (например, как далеко они находятся друг от друга) 3) если они находятся в пределах COLLISIONRANGE (5px) друг от друга -> не используйте эти координаты.Что я на самом деле спрашиваю:
Это правильное решение? Есть ли какие-то вопиющие ошибки в том, как я это проверяю? По мере того как я играю в игру, я получаю больше триггеров системы.из.println ("Log: No-go spawn #" + i); у меня есть там для регистрации, чем я бы предположил, естественно.
Похоже, что случайно сгенерированные координаты слишком часто находятся в пределах диапазона столкновений змеиных сегментов, чтобы все было правильно.
Мой метод:
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();
}