오늘은 Game of Life 규칙을 적용하기 위하여, <우리의 세포> 주변 환경을 파악하는 핵심 코드를 만들어 봅시다~~^^* YEAH~~^^*
어제 살펴본 Game of Life의 규칙을 보면, 한 가지 공통점이 있는 것 같아요.
<우리의 세포> 주변 좌상-상-우상-좌-우-좌하-하-우하 8 개의 이웃 세포들의 상태를 살펴 봐야 하는 것은 맞는데, 그 세포들이 어느 위치에 있는지를 식별해야 하는 것은 아닌 것 같아요.
그냥, 8개의 이웃 세포들 중, 살아있는 세포의 총합을 인식하는 것이 중요한 것 같거든요.
(1) <우리의 세포>가 살아있는데, 주위의 살아있는 이웃세포 총합이 2개 미만(0 or 1)이면, <우리의 세포> 죽어요…흙흙…
(2) <우리의 세포>가 살아있는데, 주위의 살아있는 이웃세포 총합이 2이상 3이하(2 or 3)이면, <우리의 세포> 살아요…예~~
(3) <우리의 세포>가 살아있는데, 주위의 살아있는 이웃세포 총합이 3보다 많으면(4 ~ 8)이면, <우리의 세포> 죽어요…흙흙…
(4) <우리의 세포>가 죽어있는데, 주위의 살아있는 이웃세포의 총합이 딱!!! 3!!!이면, <우리의 세포>가 살아나요…오우! 놀라워라!
그래서! 8개의 이웃 세포의 값(0 or 1)을 다 더하여 변수 sum에 저장해 보겠습니다!
let sum = 0;
sum += arr[i-1][j-1]; // (1) 왼쪽 위쪽 이웃 세포
sum += arr[i][j-1]; // (2) 바로 위쪽 이웃 세포
sum += arr[i+1][j-1]; // (3) 오른쪽 위쪽 이웃 세포
sum += arr[i-1][j]; // (4) 바로 왼쪽 이웃 세포
sum += arr[i+1][j]; // (5) 바로 오른쪽 이웃 세포
sum += arr[i-1][j+1]; // (6) 왼쪽 아래쪽 이웃 세포
sum += arr[i][j+1]; // (7) 바로 아래쪽 이웃 세포
sum += arr[i+1][j+1]; // (8) 오른쪽 아래쪽 이웃 세포
음…근데…8개의 이웃 세포 배열 구성원을 하나하나 나열하지 않고 반복구문을 사용해서 코드를 간단하게 만들 수도 있을까요?
<우리의 세포> 의 위치 좌표를 (x, y)로 본다면
이웃 세포들의 위치 좌표는
x축 : [x – 1], [x + 0], [x + 1] 세 가지 경우가 있고
y축 : [y – 1], [y + 0], [y + 1] 세 가지 경우가 있는 것 같아요.
즉,
x축은 [x – 1] 부터 [x + 0] 을 거쳐 [x + 1] 까지의 범위이고,
y축은 [y – 1] 부터 [y + 0] 을 거쳐 [y + 1] 까지의 범위인 것 같은데요.
x, y에 덧붙는 -1, 0, 1을 각각 i, j 변수로 표현해 볼 수 있을 것 같아요.
이것을 for 구문으로 표현해 볼게요~~^^*
for ( let i = -1; i < 2; i ++) {
for ( let j = -1; j < 2; j++) {
...
}
}
그런데…이 반복문 안에는, <우리의 세포> 도 들어가 있을 것 같아요. i = j = 0 이면 바로 (x, y)를 나타내게 되니까요…
아하!…이 반복문 안에서 배열들의 값을 다 더한 뒤, <우리의 세포>의 값을 빼면, <우리의 세포>의 이웃 세포 8개의 값을 다 더한 결과가 될 것 같아요.
그래서~~^^* 배열 grid의 정보와, 그 배열의 구성원인 <우리의 세포>의 위치 (x, y)를 받아, 이웃세포 8개의 값의 총합을 계산하는 함수 countNeighbors()를 만들어 보겠습니다!
function countNeighbors(grid, x, y) {
let sum = 0;
for(let i = -1; i < 2; i++) {
for(let j = -1; j < 2; j++) {
sum += grid[x+i][y+j];
}
}
sum -= grid[x][y];
return sum;
}
오늘 저와 함께, <우리의 세포> 의 이웃세포 8개의 상태값의 총합을 구하는 함수 countNeighbors() 코드를 완성해 주셔서 감사합니다, 코딩공부 이웃세포님~~^^*
이웃집 토토로의 쫀득쫀득 토동토동 활기찬 에너지를 선물드려요~~^^*
마림~~~바~~!
음악은 우리의 멋진 친구! 멋진 이웃!
바야~~~바~~!
우리 내일은 월요일이니까 편안하게 음악 함께 들을까요~~^*
그리고 화요일은 이웃세포 상태값의 총합을 바탕으로 <우리의 세포>의 다음 단계 상태를 결정하는 코드 공부를 함께 이어 갈까요~~^^*
오늘도 멋진 아침! 멋진 하루! 보내시고요!
우리 내일 또 만나요~~!!!!
네~~!!!! 꿈은 이루어 집니다~~!!!!!
댓글 남기기