Обход сетки из N ячеек без объявления 2 переменных (строк и столбцов) - PullRequest
1 голос
/ 21 декабря 2011

Я занимаюсь разработкой игры для холста на JavaScript.

Я решил создать игру без ограничений по сетке мирового размера.Поэтому, если они хотят играть с размером сетки N, логика сгенерирует его.

Я работал с определением границ и начал программировать функцию, которая изменит расположение ячейки в сетке, еслипользователь решает выйти за пределы экрана.

Для простоты я сократил размер сетки до N = 9, чтобы вы могли это визуализировать.Сетка выглядит так:

    [0][1][2]
    [3][4][5]
    [6][7][8] 

Если пользователь должен отойти от ячейки со значением -x [0], они появятся в крайнем правом положении ячейки x [2].это представляется как SQRT (N).Итак, я знаю, что самый правый угол - это SQRT (N).Я также знаю, что N - нижняя правая ячейка [8].

С учетом сказанного ниже приведен пример ячеек и идентификаторов их уравнений.

   [0][1][SQRT(N)]
   [3][4][5]
   [N - SQRT(N)][7][N]

На приведенной выше сетке показаны формулы оси x для 4 углов, но важно, чтобы япо крайней мере, попытайтесь ответить на уравнения внутренних ячеек, прежде чем использовать статические условные обозначения переключающего регистра магического числа.

Вот код JavaScript, показывающий то, что я объясняю:

if (player.X < 0 - 10) {
    player.X = SCREEN_WIDTH;
    if (gameQuadrent == 0) {
        gameQuadrent = Math.floor(Math.sqrt(WORLD_SIZE));
    } else if (gameQuadrent == (WORLD_SIZE - Math.floor(Math.sqrt(WORLD_SIZE)))) {
        gameQuadrent = WORLD_SIZE;
    } else {
         gameQuadrent--;
    }
 }

Любые более эффективные способыделая это?Я пытаюсь решить эту проблему, не переходя к фиксированному размеру мира.

Очень ценится.

1 Ответ

2 голосов
/ 21 декабря 2011

Квадрент находится на левой границе мира, если его число кратно SQRT (WORLD_SIZE).Поэтому следующий код должен соответствующим образом обновить игру Quadrent.

int side = Math.floor(Math.sqrt(WORLD_SIZE));
if (gameQuadrent % side) == 0) {
    gameQuadrent += side - 1;
}
else {
    --gameQuadrant;
}
...