https://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0
ライフゲームでは初期状態のみでその後の状態が決定される。碁盤のような格子があり、一つの格子はセル(細胞)と呼ばれる。各セルには8つの近傍のセルがある (ムーア近傍) 。各セルには「生」と「死」の2つの状態があり、あるセルの次のステップ(世代)の状態は周囲の8つのセルの今の世代における状態により決定される。
セルの生死は次のルールに従う。
誕生 死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する。
生存 生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する。
過疎 生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する。
過密 生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する。
$ go run main.go cli // ターミナルでライフゲームをプレイする
$ go run main.go server // ライフゲームのAPIサーバを起動する
- マップを設定できるようにする
- ファイルを読み込んでworldを生成する関数をつくる
- 生死の文字列化メソッド
- 移動を定数化
- バリデーションかける
- エラー時の簡易メッセージ
$ docker-compose up
APIサーバ http://kd-golife.herokuapp.com/
ゲーム開始エンドポイント
curl -X POST http://kd-golife.herokuapp.com/world/create
# 例
curl -X POST -d $'Debug=trueGenCap=10&InitialWorld=●●○\n○○○\n○○○' http://kd-golife.herokuapp.com/world/create
- 座標をループにする。トーラス
- 系を閉にできる。資源、シンプル、ゲーム性
- そもそも外を知らければ、考慮しなくて良いから
- 方向は関係なくマスの数を数える。方向別メソッドだと8つあって大変だった…
- 畳み込みだと簡単にできるらしい
- マイナス、プラスにかかる処理の条件分岐をなくす。そのためのどっちでも使える式を教えてもらった
- 配列のインデックスにマイナスを使えるようにする。長さ3の配列だと、インデックス -1 と 2 は同じ値を指す、みたいな。0 1 2