JavaScript is not available.

           

Copyright © 2016-2018 MediaKobo Co., Ltd. All rights reserved.
JavaScript コンソール       ホーム       目次

ライフゲーム テキスト出力

 コンソール画面にテキストアニメーションを表示するライフゲームを紹介します。

ライフゲーム

 ライフゲームプログラムです。
ライフゲームは、画面上の * を1つの生命体として見て、その誕生、生存、消滅をシミュレーションするプログラムです。 誕生、生存、消滅の条件は、周りの生命体の個数で決定されます。

・誕生 : 以下の ○ に生命体が無い場合、周りAに存在する生命体が3個の場合、次世代に新たに ○ に生命体を誕生させます。

・生存 : 以下の * に生命体がある場合、周りBに存在する生命体が2個または3個の場合、次世代にその生命体は生存します。

・消滅 : 以下の * に生命体がある場合、周りBに存在する生命体が1個以下、または4個以上の場合、次世代にその生命体は消滅します。


   AAA   BBB
   A○A   B*B
   AAA   BBB

 プログラムの初期状態は、以下の配置です。


    **
   **
    *

 ▶ Run ボタンで実行してください。
400ステップで、実行は終了します。 実行結果は、80 x 25 文字サイズのテキストコンソールに出力されます。

var x, y;
var step = 0;
var maxstep = 400;
var bmx = 79;
var bmy = 23;
var b = new Array();

for(x = 0; x < bmx+2; ++ x) {
  b[x] = new Array();
  for(y = 0; y < bmy+2; ++ y) {
    b[x][y] = 0;
  }
}
b[40][14] = 3;
b[40][15] = 3;
b[40][16] = 3;
b[41][14] = 3;
b[39][15] = 3;

jscsetintervalid = setInterval(function() {
  ++ step;
  outputboard();
  nextstep();
  if(step >= maxstep) {
    clearInterval(jscsetintervalid);
    jscsetintervalid = null;
  }
}, 10);

function countalive(x, y) {
  var cal = 0;

  if(b[x-1][y-1] > 1) cal ++;
  if(b[x-1][y] > 1) cal ++;
  if(b[x-1][y+1] > 1) cal ++;
  if(b[x][y-1] > 1) cal ++;
  if(b[x][y+1] > 1) cal ++;
  if(b[x+1][y-1] > 1) cal ++;
  if(b[x+1][y] > 1) cal ++;
  if(b[x+1][y+1] > 1) cal ++;
  return cal;
}

function nextstep() {
  var x, y;
  var cal;

  for(y = 1; y <= bmy; y++) {
    for(x = 1; x <= bmx; x++) {
      cal = countalive(x, y);
        if(b[x][y] == 0) {
          if(cal == 3) b[x][y] = 1;
        } else if(b[x][y] == 3) {
          if(cal < 2) b[x][y] = 2;
          if(cal > 3) b[x][y] = 2;
        }
    }
  }
  for(y = 1; y <= bmy; y++) {
    for(x = 1; x <= bmx; x++) {
      if(b[x][y] == 1) b[x][y] = 3;
      if(b[x][y] == 2) b[x][y] = 0;
    }
  }
}

function outputboard() {
  var x, y;
  var str;

  jsccursorx = 0;
  jsccursory = 0;

  for(y = 1; y <= bmy; ++ y) {
    str = "";
    for(x = 1; x <= bmx; ++ x) {
      if(b[x][y] == 0) {
        str = str + ' ';
      } else {
        str = str + '*';
      }
    }
    console.log(str);
  }
  console.log("Step : " + step);
}

目次へ