ライフゲーム

コンウェイ(J.H.Conway)のライフゲームのバリアント。

ソフトをdownload




----------------------------------------------
   README // life-like(lifegame) lapse 006
----------------------------------------------

■概要

    コンウェイ(J. H. Conway)のライフゲームのバリアント(ライフライク)です。
    
    このプログラムでは、各セルの生命値が0/1だけでなく、
    より大きい整数値を取ることにより新しいルールを追加しています。

■インストール

    適当なディレクトリに放り込みます。
    アンインストールするには関連するファイルを消します。
    通常は解凍されたディレクトリ以下にまとまっています。
    レジストリや外部の設定ファイル等は用いません。

■操作

    実行すると勝手に始まります。
    終了するにはウィンドウを閉じます。

    ※注意※
    ライフゲームではドットが激しく点滅します。
    画面を見る際は、部屋を明るくして離れて見てください。

○キー

    一時停止/再開:           S, スペース, テンキー0
    ステップ処理(加速):       F, テンキー.(小数点)
    ノーウェイト処理切り替え: G, テンキー*
    ループ処理切り替え:       T, テンキー/
    更新レート低下:           K, テンキー-
    更新レート増加:           L, テンキー+
    ランダム配置(密度低~高): 1~6
    プリセット変更:           F1~F4,SHIFT+F1~F4
    マップ初期化:             F5~F8
    拡大率変更x1~x8:         F9~F12,SHIFT+F9~F12
    色変更:                   SHIFT+F5~F8
    状態セーブ                Ctrl+S
    状態読込                  Ctrl+O
    

※ステップ処理はキー取得速度の制限により60FPS程度になります。

#説明
・ノーウェイト処理切り替え
    ノーウェイト処理中は1ループ毎のウェイトをスキップします。
    オン時は()の中に * が表示されます。
    処理速度は最大になりますが、CPUは100%使用します(単CPUの場合)。

・ループ処理切り替え
    ループ処理中は画面端がループします。
    オン時はタイトルの後に ! が表示されます。

・更新レート低下/増加
    更新レートを1FPS単位で増減させます。
    この数値は()の中に表示されます。
    指定できるのはあくまで目標値で、実際には等しい速度になりません。
    実際の速度は 処理速度 描画速度 の順で()の左側に表示されます。
    
・ランダム配置で初期化
    生命値を再配置します。
    配置される生命値は1のみで、キーにより密度が変わります。

・プリセット変更
    ライフゲームの規則を切り替えます。
    ウェイト設定は維持されるので、始めから確認したい場合は
    一時停止してから切り替えるべきでしょう。
    詳細は ■キー設定 を参照してください。

・マップ初期化
    マップサイズを切り替え、生命値を再配置します。
    詳細は ■キー設定 を参照してください。

・拡大率変更
    表示倍率を切り替えます。
    詳細は ■キー設定 を参照してください。

・色変更
    表示色を切り替えます。
    規則によっては画面全体が激しい点滅を起こす場合があるので、
    一時停止してから切り替えることをお奨めします。
    詳細は ■キー設定 を参照してください。

・状態セーブ
    現在の状態をセーブします。
    世代数、画面の大きさ、状態内容が保存されます。セーブは1つの規則につき1つ作られます。
    ファイル名は prefix + 設定で指定された名前になります。
    設定が読み込まれていない場合は save.dat になります。

・セーブ読込
    セーブを読み込みます。
    現在の状態は上書きされます。

■ライフゲームの規則

初期状態での規則を説明します。

    生命値は0(無生物)~4までの数値を取ります。
    
    0 : 黒
    1 : 緑
    2 : 赤
    3 : 黄
    4 : 白
    
    生成時期による色分けは行っていません。

・生成ルール
    現在の状態と近傍8点の生命値の合計値によって次の状態が決まります。
    なお、画面端のセルの生命値は合計値に含めません。
    
    現在の状態 0
     近傍 3        -> 1
     近傍 10        -> 1
    
    現在の状態 1
     近傍 2        -> 3
     近傍 3        -> 1
     近傍 6        -> 2
     近傍 11以上    -> 1
     それ以外        -> 0
    
    現在の状態 2
     近傍 4以下    -> 0
     近傍 6-10        -> 1
     近傍 12        -> 3
     近傍 13以上    -> 0
     それ以外        -> 2
    
    現在の状態 3
     近傍 2        -> 2
     近傍 4,5        -> 1
     近傍 7        -> 2
     それ以外        -> 0
    
    現在の状態 4
     近傍 2        -> 3
     近傍 3        -> 1
     近傍 6        -> 2
     それ以外        -> 2

■キー設定

    F1~F12,SHIFT+F1~F12には自由にコマンドを指定できます。

・設定の仕方
    実行ファイルと同じディレクトリに "prefix" という名前のファイルを
    おいて下さい。その中の文字列がキーファイルの名前の接頭辞になります。
    初期値は ./key/f になっています。

    ./key ディレクトリの中にプリセットの規則が入っています。
    テキストで書かれているので、テキストエディタで開けば中身が読めます。
    これらのファイルのように、 prefix に1-24の数値を付けたファイルが
    F1~12 SHIFT+F1~F12/(13~24) に対応し、規則が読み込まれます。

    ファイル名は prefix + 番号 で、拡張子は必要ありません。
    また、 .txt .dat .rul の拡張子を付けたファイルも読み込めます。

・設定の書式
    各設定は : から始まります。 [ ~ ] や ; ~ 改行 はコメントになります。
    同じ設定箇所を指示した場合、後に記述したもので上書きされます。

・設定項目の詳細
()内の数値は指定できる範囲を示します。
[]は省略可能であることを示します。

○生命値に関する設定

:N(0~30)
    色や規則を記述する生命値を指定します。
    以降、規則は生命値Nについて適用されます。

[X(0-240)] [-] [Y(0-240)] > Z(0-240)
    近傍の生命値合計がX - Yの範囲だった場合、次の状態をZにします。
    範囲は X - Y で、X以上Y以下になります。未満ではないので注意してください。
    Xを省略すると0以上、Yを省略すると240以下の指定になります。
    > の右側は省略できません。

#000000 ~ #FFFFFF (16進数)
    生命値の色を指定します。RRGGBBで各色00~FFが指定できます。
    英字は小文字でも構いません。

:loop
    画面端をループさせます。

:noloop
    画面端をループしません。
    画面端の生命値は単純に無視されます。

:reset
    規則をリセットします。
    全ての生命値の次の状態が0になります。
    ループ状態は :noloop に設定されます。
    これを書かないと規則がリセットされないので、0になる部分を省略して記述した
    場合は意図通りに動かないことがあります。
    逆に、規則を変えずに色やマップを変えたい場合はこれを書かない規則を使うこと
    で可能です。

○マップに関する設定

:size X(1-) Y(1-)
    マップのサイズを指定します。Xが横幅、Yが縦幅になります。
    表示サイズが一定値を超える場合は :unlimit を指定する必要があります。
    配置は初期化され、全ての生命値が0になります。

:multiply N(1-)
    表示倍率をN倍に変更します。
    表示サイズが一定値を超える場合は :unlimit を指定する必要があります。
    マップを大きくする場合、表示倍率が大きいと制限にかかる場合があるので、
    サイズ指定より先に倍率を下げておくと良いでしょう。

:unlimit
    表示サイズの制限を解除します。
    ウィンドウを確保する際、メモリが足りない場合は強制終了します。

:bitmap X(1-) Y(1-) マップ列
    初期配置を文字列で指定します。
    配置サイズを数値で指定します。
    マップより小さい場合は中央に配置されます。
    マップより大きい場合は設定されません。
    マップ列は 
        生命値0 = 0
        生命値1 = 1
        (中略)
        生命値9 = 9
        生命値10 = A
        (中略)
        生命値30 = U

    として、X字×Y行で記述します。それ以外の文字は0になります。
    文字数があっていない場合は設定されません。

:random X(0-1;小数)
    乱数で初期化します。
    濃度Xで生命値1が配置されます。

○処理速度に関する設定
:fps X(1-120)
    更新レートをXに変更します。

:delay X(1-)
    Xミリ秒だけ処理を停止します。

:pause
    処理を一時停止します。

○その他の設定

:savefile NAME
    セーブファイル名をNAMEに設定します。設定ファイルの接頭辞が付きます。
    ""などは付けず、半角スペースを含めないでください。'-' '#' も名前に入りません。

○例(コンウェイのルール)
:size 200 200    ;マップサイズを指定する。
:random 0.2        ;ランダムに配置。

:reset            ;規則を記述する前にリセットする。
:0 #000000        ;生命値0=いない状態を黒で描画
3 > 1            ;近傍が3なら次の状態は1
:1 #00FF00        ;生命値1=存在する状態を緑で描画
2-3 > 1            ;近傍が2か3なら次の状態は1

    他の例はプリセットのファイルを開くことで見られます。

○プリセット

同梱されている設定ファイルの動作を説明します。

f1.rul   初期設定です。 :ref:`kisoku` の規則で動きます。無限増殖パターンがあります。
f2.rul   コンウェイのライフゲームです。新規生成した生命に色が付きます。
         初期配置はシャトルです。
f3.rul   炎のような規則です。しばらくすると単純な振動子だけが残ります。
f4.rul   コンウェイのライフゲームを2つ重ねたような規則です。2つのゲームに相互作用があり停止しません。
         初期配置はドングリです。
f5.rul   マップサイズを160x120にします。
f6.rul   マップサイズを256x192にします。
f7.rul   マップサイズを320x240にします。
f8.rul   マップサイズを512x384にします。
f9.rul   画面の拡大率を1倍にします。
f10.rul  画面の拡大率を2倍にします。
f11.rul  画面の拡大率を3倍にします。
f12.rul  画面の拡大率を4倍にします。
f13.rul  花を咲かせるような規則です。無限増殖パターンがあります。
f14.rul  工場のような規則です。XY軸に平行移動する物体と静止物体が多く出現します。
f15.rul  炎のような規則です。f3とは異なり、Puffer等の増殖パターンがあるので停止することは少ないです。
f16.rul  ギラギラして見える規則です。処理レートと色に注意してください。
         最初は色が明滅しているだけに見えますが、しばらく進めるとパターンが現れます。
f17.rul  状態値8までを色分けします。
f18.rul  状態値30までを色分けします。f16に適用する際は注意してください。
f19.rul  状態値30までを色分けします。f16に適用する際は注意してください。
f20.rul  状態値30までを色分けします。f16のグラデーションをよりはっきりさせます。
f21.rul  画面の拡大率を5倍にします。                                                                  |
f22.rul  画面の拡大率を6倍にします。
f23.rul  画面の拡大率を7倍にします。
f24.rul  画面の拡大率を8倍にします。


■仕様

    ・起動すると stderr.txt stdout.txt というファイルが作成されます。
     エラーが起きた場合、これらのファイルに内容が出力されます。
    ・SHIFT+F1~F12を連打するとSHIFTが外れます。
    ・ウィンドウサイズが小さすぎるとタイトル表示が見切れます。
    ・タスクバーにタイトルが反映されない気がします。

■ライセンス

MITライセンスです。著作権表示および本許諾表示を明記すれば無償で無制限に用いることができます。
このソフトの使用によって生じた損益について、著作者は一切責任を持ちません。

Copyright (c) 2010-2013 by TANABE Kyousuke <kyousuke.tanabe@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

========
*thanks

SDL 1.2.14
http://www.libsdl.org/

SDL日本語ドキュメントについては
ソフトウェア開発室(Tomotaco)
http://www.tacoworks.jp/software/

MinGW GCC compiler 4.5.0 or later verson
http://mingw.org/

boost 1.43.0
http://www.boost.org/

■ソースについて
ライブラリは同梱していません。
コンパイルする場合、上記ライブラリが必要になります。
mk.batを実行するとlifegame.exeが作成されます。

■更新履歴
    001 2010-09-22 15:57 公開した。
    002 2010-09-27 02:01 ウィンドウ処理をFLTKを止めてSDLに変更。
                         その他処理を追加。
    003 2010-10-04 22:51 規則の読み込みなどを実装。
    004 2010-12-28 02:02 外部DLLが必要だったっぽいのを不要に。
                         map機能の変更。01以外も使えるように。
    005 2013-01-13 21:23 処理速度に関する設定に関する設定を追加。
                         サンプル規則に同設定を追加。
    006 2013-01-22 09:28 状態セーブ・読込機能を追加。
最終更新:2013年02月11日 17:20