0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pygameでライフゲームを作った

Posted at

※この記事はUdon Advent Calendar 2024 - Adventarの4日目の記事です。

はじめに

ライフゲームというものがあります。とりあえずWikiを載せておきます。

ライフゲーム - Wikipedia

1970年に考案されたゲームで、以下のルールに従って進行します。

  1. 各セルは「生物がいる」「生物がいない」という二つの状態を持つ。
  2. 各セルは周りの8つのセルの状態に応じて、世代ごとに以下のように変化する。
    1. 生物がいるセル
      1. 周囲の生物が2つか3つの場合、その世代は次の世代でも生き残る。
      2. それ以外の場合、次の世代ではその生物は死滅する。
    2. 生物がいないセル
      1. 周囲の生物がちょうど3つの場合、次の世代ではそのセルに生物が誕生する。

初期状態を設定することによって、その後の各世代の状態は一意に決まることとなります。

また、チューリング完全ということが知られています。つまり、すべての計算行為がライフゲームの内部で作ることができるということです。詳細は難しいのでここでは割愛します。

大学1年生の時、C言語を用いてライフゲームを作ったのですが、まだ開発に慣れていなかったこともあり、ひどい出来でした。

Gitudon/lifegame

なので、この機会に慣れているPythonに書き直し、実行状況がわかりやすいようにPygameを用いて実装しました。

できたもの

リポジトリは以下の通り。

Gitudon/lifegame_with_pygame

使い方はREADME.mdに書いてある通りなのですが、一応ここでも書いておきます。

使い方

まず、上記のリポジトリをクローンします。

git clone https://github.com/Gitudon/lifegame_with_pygame.git

クローンしたら、以下のパスを通してください。

"~/lifegame_with_pygame/bin"

通したら、以下のコマンドが実行されます。

lifegame

これによって、以下のような画面が表示されます。

lifegame.png

左側はセルです。数としては50×50ですね。実行モード(後述)でない場合にクリックすると、そのセルの状態が反転するようになっています。

lifegame2.png

このように、自由に初期状態を設定することができます。

右側には様々なボタンがあり、それぞれ以下の機能を実現します。

  • Start: 実行モードを開始する。
  • Stop: 実行モードを停止する。
  • Reset: セルの状態を初期状態に戻す。
  • Next: 世代を1つ進める。
  • Color: セルの色を変更する。色は7種類。
  • Load: 設定されたテンプレートからセルの状態を読み込む。
  • Quit: ゲームを終了し、ウィンドウを閉じる。

実行モードに入ると、0.15秒ごとに世代が1つ進みます。ゆっくりと見たい場合は、Nextボタンを連打するとよいです。

Loadによって読み込む場合、以下のように7つのテンプレートから選択できます。これらは動きが面白いものから選んでいます。

brain.png

実行にはPygameを用いていますが、lifegameコマンドを実行する際に自動的にpipでインストールされるようになっています。

終わりに

結構良い感じに実装てきたと思いますが、今後の展望としては以下のようなものがあると思います。

  • Webアプリ化(クローン→パス通す→実行 という流れは冗長)
  • 自分で作った初期状態を保存できる機能
  • ほかの人と作ったテンプレートを共有できる機能
  • 実行速度調整機能

これらは今後の課題として取り組んでいきたいと思います。

余談

実はこのリポジトリ自体は9月終わりに完成していたものでした。しかし、APの対策やら大学関係のタスクとやらで、なかなか記事にまとめていませんでした。

いい機会だったので、Advent Calendarのタイミングで記事にしてみた、という感じです。

ではまた明日の記事でお会いしましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?