ため息が出るほど美しいライフゲーム

## **はじめに**

ライフゲームというものをご存知でしょうか。

詳しくはwikipediaを読んでほしいですが、要はシミュレーションの一種。

https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0

ほんの僅かな単純な規則から、驚くほど複雑で、まるで生命をもっているかのようなふるまいをすることから、ライフゲームと呼ばれています。

最近、reactを使う現場に入ったこともあり、それまでモダンなJavaScriptをほとんど書いたことがなかったため、いい機会だと思い、ライフゲームを作ってみました。

![die-hard.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/a7602b7a-16fc-f91e-222d-525488b564c5.gif)



作成したアプリはこちらのリンクから飛べます。

[https://lifegame00001.netlify.com/](https://lifegame00001.netlify.com/)

## **ライフゲームとは**

ライフゲームは極めてシンプル。ルールはたったの4つだけ。

1. **誕生**: 死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する

2. **生存**: 生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する

3. **過疎:** 生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する

4. **過密**: 生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する

ルールはたったこれだけなのに、実に奥が深くて、面白い挙動をするんですね。

https://lifegame00001.netlify.com/

僕が作ってみたアプリです。↓で紹介するパターンとかを色々ためしてみると面白いですよ。

## **ライフゲームの面白いパターンを解説**

ライフゲームの中で生成されるパターンには、すぐに死滅するもの、一定の法則性をもつもの、無限に増えるもの、などなど色々なものがあります。

生き延びる場合のパターンは、おおまかに4つに類別されます。

1. 固定物体

2. 振動子

3. 移動物体

4. 繁殖型

です。一個ずつサンプルを紹介していきます。

### **固定物体**

ブロック。ずーっとこの形をキープしています。寡黙なやつです。

![move.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/4bfc25c7-2580-645d-664c-fea2291a1059.gif)

### **振動子**

ブリンカーって名前のやつです。blink（まばたき）してるように見えるからでしょうね。

![vibe.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/19373501-2340-e345-bf5d-1c35e1e0fb99.gif)



### **移動物体**

グライダー

![move.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/6c0b5cbb-d4e6-9729-90e7-7545175eddf3.gif)

### **繁殖型**

宇宙船。四角形のパターンが固定砲台となり、そこから延々と宇宙船が発射されていくさまが観測できます。美しいですね。

![Gospers_glider_gun.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/cccdaa38-a4c3-2202-c849-b7895b1be9b0.gif)

https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0

から転載

## **中二病的解説**

エンジニアは中二病気質な人間が多いのか、ライフゲームの中で生まれるパターンのなかには、「イカす」名前をもったものが何個か存在します。これを紹介せずにはいられません。痺れます。

### **銀河**

遷移をするさまはまるで銀河のよう。その美しい規則性とダイナミックな動きには圧巻、の一言に尽きます。

![Galaxy(Conway's_Game_of_Life).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/a4825ae6-15d5-65d4-9d12-3dafe0fbec0d.gif)

https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0

から転載

### **ダイハード**

Die hardは不死身、とか、しぶとい、という意味ですが、そのぐらい長く残り続ける配置のことです。

↓ダイハード

![die-hard.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/095a64e0-1370-6cb6-fdf2-61752057b97a.gif)

### **メトセラ**

ある特定の配置においては、非常に長い世代を経ないと、死滅しないものが存在します。そういう配置のことを、聖書の****メトセラ****という996歳まで生きた、と言われている人物になぞり、****長寿型（メトセラ）****と名称がついています。かっこいいですよね。

一つ前で紹介した、**ダイハード**はメトセラの一つです。

↓メトセラ

<img width="868" alt="methuselah.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/a6447808-41bc-2278-1be8-c43d6c3a5f1e.png">

### **エデンの園配置**

ライフゲームにおいて、最初からそのように設定しない限り、絶対にその配置にはならない配置のことを指します。

聖書で登場するエデンの園が、神がつくったのでなければ、絶対に生まれることはなかったであろう楽園であることから、ライフゲームでのそういう配置のことを「エデンの園配置」と呼ぶそうです。

英名は ****Garden of Eden pattern****

[エデンの園配置](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%87%E3%83%B3%E3%81%AE%E5%9C%92%E9%85%8D%E7%BD%AE)

![eden.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311529/cd9111aa-d0a9-60bf-b42c-8bfa4d93e62f.png)

https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0

から転載

## **感想**

遊んでみると、意外と奥が深く、自分でアプリを作ってQiitaで解説記事を書くほどのめり込んでしまいました。**エデンの園配置**とか、**メトセラ**とか、名前のセンスが素敵すぎますよね。