В поисках эффективного способа суммирования окружающих значений трехмерного массива - PullRequest
0 голосов
/ 04 апреля 2011

Я пишу 3D-игру типа «Сапер», поэтому, получив a [x] [y] [z], мне нужно вычислить сумму окружающих значений, если они не выходят за пределы.

Мой вопрос: как я могу это сделать, не имея zillion чеков для:

if ((x>0)&&(x<ARRAY_SIZE)) 

для x, y и z?

Спасибо

Ответы [ 2 ]

4 голосов
/ 04 апреля 2011

Очень просто: увеличьте размер элемента на 2 элемента в каждом измерении, а затем создайте вокруг него 0-кадр . Все ваши циклы работают от 1 до ARRAY_SIZE-1, и доступ к index-1 и index + 1 больше не создает проблем, если вы находитесь на границах.

0 голосов
/ 04 апреля 2011

Как насчет написания вашего собственного настроенного класса для игрового поля, что-то вроде

    class Minesweeper3DBoard {
      public MinesweeperField getField(int x, int y, int z) {
        if (x < 0 || x >= ARRAY_SIZE || y < 0 || y >= ARRAY_SIZE || z < 0 || z >= ARRAY_SIZE)  {
   return NullMineSweeperField.Instance(); 
}
   else {
     return Fields_[x][y][z];
   }

      }
    };

с NullMineSweeperField, реализующим шаблоны Null Object и Singleton, и Fields_, содержащая "реальные" поля?
Таким образом, у вас будет только одно место, где проводится проверка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...