인생의 게임

13269 단어 javascript
The Game of Life 또는 cellular automaton은 1970년에 John Horton Conway이 약간의 종이와 바둑 판만으로 개발했습니다. 각 셀이 켜짐(활성) 또는 꺼짐(죽음) 상태 중 하나인 2차원 그리드에서 발생합니다. 셀의 상태는 이웃에 의해 결정되며 4개의 간단한 규칙에 따라 주어진 상태가 살 것인지 죽을 것인지가 결정됩니다.

규칙



세포의 운명을 결정하는 네 가지 규칙이 있습니다.
  • 인구 부족: 이웃이 2개 미만인 살아있는 세포는 죽습니다.
  • 인구 과잉: 이웃이 3개 이상인 살아있는 세포는 죽습니다.
  • 2개 또는 3개의 이웃이 있는 셀은 살아남습니다.
  • 생식: 이웃이 정확히 3개 있는 죽은 세포는 살아있는 세포가 됩니다.

  • 구현을 위해 이러한 규칙을 더욱 단순화할 수 있습니다.
  • 2개 또는 3개의 이웃이 있는 살아있는 세포는 살아남습니다
  • 3개의 살아있는 이웃이 있는 죽은 세포는 살아있는 세포가 됩니다
  • .
  • 다른 모든 것은 이제 죽은 세포입니다

  • 구현



    be using p5.js to implement 이거, all the code can be found here .

    첫 번째 단계는 그리드를 만들고 셀이 죽었는지 살아 있는지 무작위로 선택하는 것입니다.

    let grid;
    let columns;
    let rows;
    let size = 20;
    
    function setup() {
      createCanvas(800, 600);
      columns = width / size;
      rows = height / size;
      grid = createGrid();
    
      for (let i = 0; i < columns; i++) {
        for (let j = 0; j < rows; j++) {
          grid[i][j] = floor(random(2));
        }
      }
    }
    
    function draw() {
      background(0);
      for (let i = 0; i < columns; i++) {
        for (let j = 0; j < rows; j++) {
          let x = i * size;
          let y = j * size;
          if (grid[i][j] == 1) {
            fill(0, 255, 255);
            stroke(0, 255, 255);
            rect(x, y, size, size);
          }
        }
      }
    }
    


    그러면 다음과 같이 표시됩니다. 여기서 파란색은 살아있는 세포를 나타냅니다.



    다음 단계는 다음 세대를 만드는 것입니다.

    function createNewGeneration() {
      let nextGeneration = createGrid();
      for (let i = 0; i < columns; i++) {
        for (let j = 0; j < rows; j++) {
          let currentState = grid[i][j];
          let count = countNeighbours(i, j);
          if (currentState == 1 && count == 2 || count == 3) {
            nextGeneration[i][j] = 1;
          } else if (currentState == 0 && count == 3) {
            nextGeneration[i][j] = 1;
          } else {
            nextGeneration[i][j] = 0;
          }
        }
      }
      return nextGeneration;
    }
    
    function countNeighbours(x, y) {
      let sum = 0;
      for (let i = -1; i <= 1; i++) {
        for (let j = -1; j <= 1; j++) {
          let col = (x + i + columns) % columns;
          let row = (y + j + rows) % rows;
          sum += grid[col][row];
        }
      }
      sum -= grid[x][y];
      return sum;
    }
    
    


    이제 그리기 기능에서 새로운 세대를 현재 그리드: grid = createNewGeneration()에 할당하기만 하면 됩니다.



    각 셀을 조금 더 작게 만들어 모집단 크기를 늘립니다: let size = 5


    결론



    Game of Life는 놀라운 시뮬레이션입니다. 몇 가지 간단한 규칙과 구조가 어떻게 매우 복잡한 시스템을 형성할 수 있는지 보여줍니다. 특정 동작을 수행하는 Game of Lifethere's a whole lexicon of patterns에 대해 더 많은 정보를 얻을 수 있습니다.

    Game of Life에서 더욱 놀라운 점은 그것이 Turing Complete 이라는 것입니다. 그것은 임의로 복잡한 계산을 할 수 있습니다. 즉, Game of Life의 시뮬레이션을 실행할 수 있는 Game of Life에 컴퓨터를 구축할 수 있습니다.

    좋은 웹페이지 즐겨찾기