Silverback9

#야생으로

Creative Coding 독학 제195일 2024년10월08일(화)

오늘은~~^^* 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 규칙 코드도 완성하고, 익숙하면서도 살짝 좀더 어려운 도전을 새롭게 발견해 주셔서 감사합니다~^^*

내일 우리 또 만나서, 이 익숙하고도 살짝 좀더 어려운 고민을 해결해 볼까요?

그 어떤 도전도 우리의 코드 완성을 멈출 수는 없어요!

함께 앉아 고민을 나누면 해결법이 착착 떠오를 거예요~~^^*

전열을 가다듬고 힘차게 일어나 함께 나아가 봅시다~~^^*

이제 맑은 가을 아침이 막 시작되고 있네요~^^*

오늘도 멋진 아침! 멋진 하루 보내시고요!

내일 우리 또 만나요~~^^*

네~!!! 꿈은 이루어 집니다~!!!

댓글 남기기