ライフゲーム by Odakaz

再生

 1970年生まれの生命シミュレーション、「ライフゲーム」をプチコン上で再現したのがこのプログラムだ。
 空白セル(死)に色つきセル(生)が3つ隣り合っていれば、そのセルは次の世代で色つきセルに変わる。色つきセルに2つか3つの色つきセルが隣り合っていれば、そのセルは次の世代でも色つきのまま生き残る。逆に隣り合った色つきセルが1つ以下か4つ以上ならば次の世代では空白セルに変わる。
 このルールに従って次々変わる様子を楽しもう。

私が作りました

Odakaz

初めまして。Odakazという者です。
プチコンで、定番のライフゲームを作ってみましたので、投稿させていただきます。


 CHECK POiNT 

ワンパク
チキショー、このゲーム操作ができねえじゃねえか! シット!

博士
いやいや。たしかに「ゲーム」と付いているが、これはライフゲームと言ってな、由緒ただしい「見てるだけゲーム」なのじゃよ。こう見えてなかなか奥の深いものなのじゃぞ。

インテリ
となり合ったマスの状態によって、マスの目が消えたり増えたりするルールが決められているんだ。生命(ライフ)がルールに従って変化していくから「ライフゲーム」。生物の進化や淘汰の単純なシミュレーションという側面もあるね。

ワンパク
なんだかよくわからねえが、これ以上くわしく聞こうとするとググれと言われる気がするぜ。ガッデム!

神崎
このプログラムでは、BG面にセル(マス目)のグラフィックを定義しているんだね。

博士
高速化のための工夫じゃろうな。BGの最小単位は8×8ドットじゃから、2×2セルの全パターンをあらかじめ用意しているわけじゃ。
このプログラムはランダム配置でスタートするが、自分でセルのパターンを定義するのも面白そうじゃの。

プログラムリスト

  1. ’┌──────────────────────────┐
  2. ’│LIFEGAME 2011/03/09 Odakaz│
  3. ’└──────────────────────────┘
  4. ’フ゜ロク゛ラム ショキカ
  5. VISIBLE 0,1,1,0,0,0
  6. CLS:GCLS:BGPAGE 0
  7. CLEAR
  8. W=50:H=36:MAX_GEN=100:INI_R=0.4
  9. DIM W1(W+2,H+2), W2(W+2,H+2)
  10. GOSUB @SET_CHR
  11. GOSUB @INIT_BG
  12. ’メイン
  13. @MAINLOOP
  14.  GOSUB @INIT_W
  15.  FOR GEN=1 TO MAX_GEN
  16.   GOSUB @DRAW
  17.   GOSUB @CALCNEXT
  18.  NEXT
  19.  GOTO @MAINLOOP
  20. END
  21. ’フィールト゛ ショキカ
  22. @INIT_W
  23.  FOR I=0 TO W+1
  24.   FOR J=0 TO H+1
  25.    W1(I,J)=0
  26.    W2(I,J)=0
  27.   NEXT
  28.  NEXT
  29.  FOR I=1 TO W*H*INI_R
  30.   GOSUB @PUT_LIFE
  31.  NEXT
  32. RETURN
  33. ’カサナラナイヨウニ ハイチ
  34. @PUT_LIFE
  35.  X=1+RND(W):Y=1+RND(H)
  36.  IF W1(X,Y)==1 GOTO @PUT_LIFE
  37.  W1(X,Y)=1
  38. RETURN
  39. ’ヒ゛ョウカ゛
  40. @DRAW
  41.  FOR I=1 TO W-1 STEP 2
  42.   FOR J=1 TO H-1 STEP 2
  43.    CHR_NO=1+W1(I,J)*8+W1(I+1,J)*4+W1(I,J+1)*2+W1(I+1,J+1)
  44.    BGPUT 0,(I-1)/2+1,(J-1)/2+1,CHR_NO,0,0,0
  45.   NEXT
  46.  NEXT
  47. RETURN
  48. ’ツキ゛ノ セタ゛イヲ ケイサン
  49. @CALCNEXT
  50.  FOR I=1 TO W
  51.   FOR J=1 TO H
  52.    C=0
  53.    FOR K=I-1 TO I+1
  54.     FOR L=J-1 TO J+1
  55.      C=C+W1(K,L)
  56.     NEXT
  57.    NEXT
  58.    C=C-W1(I,J)
  59.    ’セイシ ハンテイ
  60.    ON C GOSUB @DEATH,@DEATH,@KEEP,@LIVE,@DEATH,@DEATH,@DEATH,@DEATH,@DEATH
  61.   NEXT
  62.  NEXT
  63.  GOSUB @FLIP
  64. RETURN
  65. ’シメツ
  66. @DEATH
  67.  W2(I,J)=0
  68. RETURN
  69. ’タンシ゛ョウ
  70. @LIVE
  71.  W2(I,J)=1
  72. RETURN
  73. ’ソノママ
  74. @KEEP
  75.  W2(I,J)=W1(I,J)
  76. RETURN
  77. ’ツキ゛ノ セタ゛イヲ ハンエイ
  78. @FLIP
  79.  FOR I=0 TO W+1
  80.   FOR J=0 TO H+1
  81.    W1(I,J)=W2(I,J)
  82.   NEXT
  83.  NEXT
  84. RETURN
  85. ’キャラノ セッテイ
  86. @SET_CHR
  87.  COLSET ”BG”,0,”000000”
  88.  COLSET ”BG”,1,”999999”
  89.  COLSET ”BG”,2,”EEDD77”
  90.  RESTORE @CELLCHR
  91.  FOR I=1 TO 19
  92.   READ CC$
  93.   CHRSET ”BGU0”,I,CC$
  94.  NEXT
  95. RETURN
  96. ’BGスクリーン ショキカ
  97. @INIT_BG
  98.  FOR X=0 TO 32
  99.   FOR Y=0 TO 23
  100.    BGPUT 0,X,Y,0,0,0,0
  101.   NEXT
  102.  NEXT
  103.  FOR X=1 TO W/2
  104.   FOR Y=1 TO H/2
  105.    BGPUT 0,X,Y,1,0,0,0
  106.   NEXT
  107.  NEXT
  108.  FOR X=1 TO W/2
  109.   BGPUT 0,X,H/2+1,17,0,0,0
  110.  NEXT
  111.  FOR Y=1 TO H/2
  112.   BGPUT 0,W/2+1,Y,18,0,0,0
  113.  NEXT
  114.  BGPUT 0,W/2+1,H/2+1,19,0,0,0
  115. RETURN
  116. ’CELLノ ハ゜ターン
  117. @CELLCHR
  118. DATA ”1111111110001000100010001000100011111111100010001000100010001000”
  119. DATA ”1111111110001000100010001000100011111111100012221000122210001222”
  120. DATA ”1111111110001000100010001000100011111111122210001222100012221000”
  121. DATA ”1111111110001000100010001000100011111111122212221222122212221222”
  122. DATA ”1111111110001222100012221000122211111111100010001000100010001000”
  123. DATA ”1111111110001222100012221000122211111111100012221000122210001222”
  124. DATA ”1111111110001222100012221000122211111111122210001222100012221000”
  125. DATA ”1111111110001222100012221000122211111111122212221222122212221222”
  126. DATA ”1111111112221000122210001222100011111111100010001000100010001000”
  127. DATA ”1111111112221000122210001222100011111111100012221000122210001222”
  128. DATA ”1111111112221000122210001222100011111111122210001222100012221000”
  129. DATA ”1111111112221000122210001222100011111111122212221222122212221222”
  130. DATA ”1111111112221222122212221222122211111111100010001000100010001000”
  131. DATA ”1111111112221222122212221222122211111111100012221000122210001222”
  132. DATA ”1111111112221222122212221222122211111111122210001222100012221000”
  133. DATA ”1111111112221222122212221222122211111111122212221222122212221222”
  134. DATA ”1111111100000000000000000000000000000000000000000000000000000000”
  135. DATA ”1000000010000000100000001000000010000000100000001000000010000000”
  136. DATA ”1000000000000000000000000000000000000000000000000000000000000000”