Делая змею игрой, является ли мое решение, чтобы избежать "пищи/капель" нерест на вершине моей змеи в порядке?
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();
}