Несколько друзей и я создаем игру на основе моделирования, используя java, где наши "игроки" go выходят на матрицу 11x11, заполненную классом под названием Chunk. Чтобы игроки могли взаимодействовать с окружающим миром, нам необходимо видеть информацию о чанках в 3х3 вокруг игрока.
Пример (меньший размер матрицы, x = Ничего там, o = Person):
xxxxxxxxxxx
xxxxxxxxxxx
xxxxxoxxxxx
xxxxxxxxxxx
xxxxxxxxxxx
Нам нужно было бы собрать куски, окружающие игрока (o) (в данном случае строки [1], [2], [ 3] и col [4], [5], [6]). Конечно, матрица 3x3 не может выходить за границы матрицы, и если она это делает, мы просто игнорируем те, которых нет, и собираем куски, которые мы можем собрать. В настоящее время у нас есть блок кода, который работает для желаемой задачи, но мы чувствуем, что его можно сделать быстрее, чище или полностью переделать другим способом.
fullMap - это массив, который инициализирован как заполненный 11x11 блоков Chunk, и currentRow , currentCol оба являются целыми числами, которые относятся к позиции в полной карте игрок в настоящее время находится в.
for(int row = 0; row < fullMap.length; row++) {
for (int col = 0; col < fullMap[row].length; col++) {
if (((row == currentRow-1) && (col == currentCol)) && currentRow != 0) {
//store the chunk
} else if (((row == currentRow-1) && (col == currentCol+1)) && (currentRow != 0 && currentCol != 10)) {
//store the chunk
} else if (((row == currentRow-1) && (col == currentCol-1)) && (currentRow != 0 && currentCol != 0)) {
//store the chunk
} else if (((row == currentRow) && (col == currentCol+1)) && currentCol != 10) {
//store the chunk
} else if (((row == currentRow) && (col == currentCol-1)) && currentCol != 0) {
//store the chunk
} else if (((row == currentRow+1) && (col == currentCol+1)) && (currentRow != 10 && currentCol != 10)){
//store the chunk
} else if (((row == currentRow+1) && (col == currentCol)) && currentRow != 10) {
//store the chunk
} else if (((row == currentRow+1) && (col == currentCol-1)) && (currentRow != 10 && currentCol != 0)){
//store the chunk
}
}
}
Если нужна другая информация, я рад опубликовать ее.