12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

opencvを使ってライフゲームを実装した(18行!!)

Posted at

はじめに

 暇つぶしにライフゲームを普通とは違う方法で実装しました。せっかくなので記事にしました。

実装

 実装したコードはたった**18行!!**モジュールはnumpyとopencvを使っています。

lifegame.py
import cv2
import numpy as np

weight = np.array([
    [2.0, 2.0, 2.0],
    [2.0, 1.0, 2.0],
    [2.0, 2.0, 2.0]
], dtype=np.uint8)
_ = cv2.VideoCapture(-1)
size = 256
s = (np.random.rand(size, size) > 0.5).astype(np.uint8)
while True:
    s_ = cv2.filter2D(s, -1, kernel=weight)
    s = (s_ > 4).astype(np.uint8) * (s_ < 8).astype(np.uint8)
    cv2.imshow('LifeGame', 255 * s.reshape(size, size))
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

使用したルールは23/3です。以下のような場合に次の状態が1になります

  • 対象セルが1かつ周辺2つが1(畳み込みの値は5)
  • 対象セルが0かつ周辺3つが1(畳み込みの値は6)
  • 対象セルが1かつ周辺3つが1(畳み込みの値は7)

対象セルの値と周辺で活性化しているセルの数に対して畳み込んだ値は一対一で対応してるので、畳み込みの値によって次のセルの状態が決定することになります。

次の活性化セルの条件を書き換えることでルールを簡単に変更できます。

結果

実際に動かした結果がこちらです。ランダムで生成します。
スクリーンショット 2021-09-11 16.26.41.png

最後に

 私が使用しているPCはMacbookAirですが1024×1024でも余裕で動きます。ぜひ遊んでみてください。

12
8
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
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?