ともさんの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

最終更新日: 2018-08-16 09:10:45

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

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

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