2019の7日目の記事です。はじめにこの記事ではGoを使って人工生命を作っていきます。(👇こんな感じのもの👇)人工生命とはいっても、生命のプロセスを簡易的なモデルとして表したライフゲームというゲームなのでその動きを眺めながら楽しむ感じとなります。今回の記事はこちらの記事(Goを使ってCLIにフラッシュ画を描画する)の延長として書いているので、コマンドラインにテキストを描画する方法などはこちらをご覧ください。ライフゲームとはWikipedia先生の方がぼくの100倍は賢いので丸投げしてしまいましょう。考案した生命の誕生、進化、淘汰などのプロセスを簡易的なモデルで再現したシミュレーションゲームである。単純なルールでその模様の変化を楽しめるため、パズルの要素を持っている。生物集団においては、過疎でも過密でも個体の生存に適さないという個体群生態学的な側面を背景に持つ。セル・オートマトンのもっともよく知られた例でもある。WikipediaこのゲームをGoで書いていこうというわけです。長いの折りたたんでます。死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する。生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する。生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する。生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する。Gistにも載せているのでよかったらこちらもご覧ください。child}そのセルの状態(生存or死亡)と隣接するセルの数に応じて次の世代の状態を分岐させます。死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生。生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存。生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅。生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅。この際、隣接するセルの状態をカウントするのをどうしようか迷ったのですが、フィールドを囲うように死亡ステータスを持ったセルを追加してカウントしました。(pythonなどみたくarray[-1]みたいなのが使えないため。ee}こちらがフィールドを囲うように死亡ステータス(0)を持ったセルを追加この辺りをしっかり書かないといけないのでコード力がつきますね。sibs}そして周りの状態をカウント。以下のような物体はここから動かず固定物体と呼ばれています。銀河パルサー8角形の三つは同じパターンをループして繰り返すため、振動子と呼ばれています。octagonおわりに隣接するセルの状態確認以外はサクサク書け、みていて楽しいものができました。隣接するセルのカウントもpythonなどでは、良くも悪くもなあなあに実装している部分なのでコード力がついて(る気がする)のでGoらしくていいですね。コメントをキャンセルメールアドレスが公開されることはありません。