ともさんのHP >プロブラミング >エクセルマクロでライフゲームを作る方法

エクセルマクロでライフゲーム

昔からあるライフゲームをエクセル上で動かしてみました。
作り方とVisualBasicのソースコードを掲載しています。

ライフゲームとは

名前はゲームとありますが、ゲームというよりシミュレーションみたいなもの。超有名なので、検索すればいろいろ出てきます。
格子状に並べたマス目に生と死の状態を付け、対象マスの周りのマスの生死状態の数により対象マスの生死を決めてゆきます。

広告


対象マスが生きている場合、
周りの生きているマスの合計が2か3であれば、生き続けることができる。それ以外は死へ変更。
対象マスが死んでいる場合、
周りの生きているマスの合計が3であれば生に変更。それ以外は死んだまま。

という単純なルールをすべてのマスについて計算を繰り返すことで、興味深い複雑なパターンが現れます。

エクセルでライフゲーム

ライフゲームで使う格子構造は、ちょうどエクセルで使うセルと同じ構造です。
ですので、エクセルのマクロ(VisualBasic)を使えば簡単にライフゲームを作ることができます(上の動画)。
マクロのソースコードは下をご覧ください。お手持ちのエクセルにコピペして使います。
コピペしたら、シート2枚をそれぞれ1と2とい名前に変更してから実行してください。

ライフゲームのルールを変更してみる

複雑なパターン楽天 の生まれるライフゲーム、セルの生死ルールがカギを握っています。
これは生物を模して、「過密でも過疎でも個体が生きてゆけない」というルールですが、ではルーツをちょっと変えたらどうなるでしょうか?
○生まれる条件を変える
周囲に3つが生きていれば生まれる条件を2つにしてみましょう。
ライフゲームエクセル

こんな感じでいつまでも秩序の生まれない状態
4にしたらこんな感じ
ライフゲームルール変更

多様さは急速に失えわれ、すぐに定常状態へ収束
○生き続ける条件を変える
2〜3で生き続けることができますが、これを緩和して1〜4にするとどうでしょうか?
ライフゲームルール変更

これも徐々に多様性が失われて、迷路みたいになってしまいました。
適度に多様性があり、適度に秩序がある状態になると面白い複雑なパターンが生まれるようですね。

この宇宙もライフゲームと同じようにセル・オートマトンではないかという考え方があるそうです。
もし引力がもう少し強かったら、太陽くらいの大きさでもブラックホールとかしてしまい、宇宙は人やその他複雑なものを宿すものにはならなかったといわれています。
逆にもう少し弱ければ、同じ引力でも地球は大きなサイズになれるし、太陽の寿命も延びてもっと複雑な構造になれたでしょう。
これってライフゲームのルールにちょっと似ていますね。

広告

ライフゲームのソースコード

Sub Macro1()
'
' Macro1 Macro
'
x = 30
y = 30

'初期化
For ix = 2 To x - 1
 For iy = 2 To y - 1
 'Sheets("1").Cells(ix, iy).Select
  Sheets("1").Cells(ix, iy).Value = Int(Rnd(5) * 2)
  If Sheets("1").Cells(ix, iy).Value = 0 Then Sheets("1").Cells(ix, iy).Value = ""
 Next iy
Next ix

For i = 0 To 30

For ix = 2 To x - 1
 For iy = 2 To y - 1
 xx = Sheets("1").Cells(ix - 1, iy - 1).Value + Sheets("1").Cells(ix - 1, iy).Value + Sheets("1").Cells(ix - 1, iy + 1).Value
 xx = xx + Sheets("1").Cells(ix, iy - 1).Value + Sheets("1").Cells(ix, iy + 1).Value
 xx = xx + Sheets("1").Cells(ix + 1, iy - 1).Value + Sheets("1").Cells(ix + 1, iy).Value + Sheets("1").Cells(ix + 1, iy + 1).Value
 Sheets("2").Cells(ix, iy).Value = ""
 Sheets("2").Cells(ix, iy).Interior.Color = RGB(255, 255, 255)
 If Sheets("1").Cells(ix, iy).Value = "" Then
  If xx = 3 Then
   Sheets("2").Cells(ix, iy).Value = 1
   Sheets("2").Cells(ix, iy).Interior.Color = RGB(0, 0, 0)
  End If
 End If
 If Sheets("1").Cells(ix, iy).Value = 1 Then
  If xx >= 2 Then
   If xx <= 3 Then
    Sheets("2").Cells(ix, iy).Value = 1
    Sheets("2").Cells(ix, iy).Interior.Color = RGB(0, 0, 0)
   End If
  End If
 End If
 Next iy
Next ix

For ix = 2 To x - 1
 For iy = 2 To y - 1
 'Sheets("1").Cells(ix, iy).Select
  Sheets("1").Cells(ix, iy).Value = Sheets("2").Cells(ix, iy).Value
 Next iy
Next ix

Next i

End Sub

最終更新日: 2016-06-26 14:03:42

ともさんのHP >プロブラミング >エクセルマクロでライフゲームを作る方法

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

ツバキの栽培、手入れ、増やしかた  
柿の剪定道具  
新旧文化式とドレメ式原型製図を比較  
玉縁ボタンホールの縫い方  
キャスケット型紙の設計方法と型紙ダウンロード  
重箱式巣箱の図面  
ブルーベリーの挿し木  
ホオノキ  
アリジゴクの飼いかた  
シンプルなパネルラインワンピースの型紙と作りかた  
ベジェ曲線の原理  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます