오늘은~~^^* Game of Life 규칙을 코드로 완성해 보겠습니다~^^*
하나, 다음 단계의 모눈종이 한 장을 준비해 놓고~~^^* 함수 countNeighbor()를 호출하여, 살아있는 이웃세포 수를 받아 변수 neighbors에 저장해 둡니다^^*
let next = make2DArray(cols, rows);
let neighbors = countNeighbor(grid, i, j);
둘, <우리의 세포>의 현재상태를 변수 state에 따로 저장해 두겠습니다. 다음 상태를 결정할 때 현재 상태를 참고해야 하니까요~^^*
let state = grid[i][j];
셋, 이제 Game of Life의 규칙 결정의 4가지 경우를 세가지 결과로 구분하여, 다음 단계 모눈종이의 <우리의 세포> 자리에 기록합니다~^^*
(1) <우리의 세포>가 죽어있다가 살아나는 결과: 살아있는 이웃세포가 딱!!! 3개일 때
if(state == 0 && neighbors == 3) {
next[i][j] = 1;
}
(2) <우리의 세포>가 살아있다가 죽는 결과: 살아있는 이웃세포가 2보다 적거나 3보다 많을 때
else if (state == 1 && ((neighbors < 2) || (neighbors >3)) {
next[i][j] = 0;
}
(3) <우리의 세포>가 살아있는데 계속 살아가는 결과: 그 외의 경우일 때(살아있는 이웃세포가 2개나 3개일 때)
else {
next[i][j] = 1;
}
넷. 이 과정을 모눈 종이 위의 모든 세포들에 적용을 한 뒤, 완성된 다음 단계 모눈 종이가 현재 단계 모눈 종이를 대체하도록 합니다. 그리고 이 전체 과정을 반복하면, 끊임없이 변화하는 생태계 표현이 가능하게 되겠지요~~^^*
for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
.
.
.
}
}
grid = next;
와우~~ 네 단계를 모두 담으면, draw() 파트가 완성될 것 같은데요~~^^*
function draw() {
background(0);
for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
let x = i * resolution;
let y = j * resolution;
if (grid[i][j] == 1) {
fill(255);
stroke(0);
rect(x, y, resolution - 1, resolution - 1);
}
}
}
let next = make2DArray(cols, rows);
for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
let state = grid[i][j];
let sum = 0;
let neighbors = countNeighbors(grid, i, j);
if (state == 0 && neighbors == 3) {
next[i][j] = 1;
} else if (state == 1 && (neighbors < 2 || neighbors > 3)) {
next[i][j] = 0;
} else {
next[i][j] = state;
}
}
}
grid = next;
}
네~~^^* 그럼 우리 이제 지난 주에 완성해 둔 setup()와 countNeighbor()도 담아서 전체 코드를 마무리!!!~~ 마무리!!~~ 마무리!~~ 마무리~~ 마무리?~~ 마무리??~~ 마무리???
하.기.전.에.
음……
뭔가……
익숙한 고민이 떠오르신다구요…..
어떤 고민이신지요?
아….
네….
그렇네요….음….
예리하시군요….
와우…..
그럼…
우리…
내일…
이 고민을 해결해 볼까요?
왼쪽 가장자리 <우리의 세포>는 왼쪽 이웃들이 없어요.
오른쪽 가장자리 <우리의 세포>는 오른쪽 이웃들이 없어요.
위쪽 가장자리 <우리의 세포>는 위쪽 이웃들이 없어요.
아래쪽 가장자리 <우리의 세포>는 아래쪽 이웃들이 없어요.
우리는 해결할 수 있어요!!!
네!!! 우리는 해결해낸 적이 분명 있으니까요!!!
일차원 배열에서 만났던 딜레마를 이차원 배열에서 또 만났네요!!!
익숙한 이 고민을 내일 해결한 후, 전체 코드를 완성해서 실행까지 해보는 거예요!!!
오늘 저와 함께 Game of Life 규칙 코드도 완성하고, 익숙하면서도 살짝 좀더 어려운 도전을 새롭게 발견해 주셔서 감사합니다~^^*
내일 우리 또 만나서, 이 익숙하고도 살짝 좀더 어려운 고민을 해결해 볼까요?
그 어떤 도전도 우리의 코드 완성을 멈출 수는 없어요!
함께 앉아 고민을 나누면 해결법이 착착 떠오를 거예요~~^^*
전열을 가다듬고 힘차게 일어나 함께 나아가 봅시다~~^^*
이제 맑은 가을 아침이 막 시작되고 있네요~^^*
오늘도 멋진 아침! 멋진 하루 보내시고요!
내일 우리 또 만나요~~^^*
네~!!! 꿈은 이루어 집니다~!!!
댓글 남기기