2
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?

生命(ライフ)ゲーム日本語で書いたプログラム - 最新Mindで動きます(Mind9リリース版)

2
Posted at

ライフゲームを日本語プログラミング言語Mind9で作成しました。
ライフゲームについては、ググってみてください。
・生命のいないところには周囲にちょうど3個の生命がある場合に新しく生命が誕生します。
・生命がいるところは、周囲に2個、または3個の生命がいる場合に、そのまま生命が残ります。 そうでない場合には死んでしまいます。
初期状態によって 繁殖世代数が大きく変化します。いろいろ試してみてください。

このプログラムでは上端と下端、左端と右端はつながっています。

コンパイル・実行にはMind9 基本セットが必要です。詳しくはMind9のダウンロードサイトをご覧ください。

ソース

Life01.src
※ 生命ゲーム
※ Life010D.src > guilib 
※ 生命ゲーム(ライフゲーム)が どんなものかについては、ネットで検索してください。
※ このプログラムに必要な、生命の卵と生命の成体のイメージはこの後掲示します。
世代間隔は  定数  10ミリ秒。
最大世代数は 定数 2000。

辺長は 定数 19。
間隔は 定数 20。
行数は 定数 30。
列数は 定数 30。
地球の色は 青色。
イメージ成体の場所は "image¥kani.png"。 
イメージ卵の場所は "image¥egg2.png"。
イメージ成体は ID。
イメージ卵は ID。

キャンバス高は 行数に 間隔を 掛け 間隔を 加えたもの。
キャンバス幅は 列数に 間隔を 掛け 間隔を 加えたもの。

地球は ID。
ボタン地球誕生は ID。
ボタン生命発生は ID。
ボタン生命繁殖は ID。
ボタン繁殖停止は ID。
ボタン繁殖クリアは ID。

ラベル世代数は ID。
ラベル開始時の生命数は ID。
ラベル現在の生命数は ID。
ラベル最大の増加数は ID。

地球既存?は 変数。
繁殖停止中?は 変数。

世代は 変数。
開始時の生命数は 変数。
現在の生命数は  変数。
現在の増減数は  変数。
最大の増加数は  変数。

世代の情報は 構造体
  生命有は バイト変数
  各行の情報は 列数の 生命有
  全面の情報は 行数の 各行の情報
  全体は 最大世代数の 全面の情報
  。  
格子点の情報は 構造体
  生命点は  図形ID
  生命図形は 図形ID
  近所数は  変数
  点の情報は 生命点と 生命図形と 近所数
  現在各行の情報は 列数の 点の情報
  全体は 行数の 現在各行の情報
  。
格子点に正方形を描くとは (・→・)
    x座標は 変数
    y座標は 変数
  行数 回数指定し
    列数 回数指定し
        回数に 間隔を 掛け x座標に 入れる
        外側回数に 間隔を 掛け y座標に 入れる
        地球と x座標と y座標と 辺長で 正方形のIDを取得し 生命点(外側回数、回数)に 入れる
        地球の色で 生命点(外側回数、回数)に 線の色を設定し
        白色で 生命点(外側回数、回数)に 満たす色を設定し
        生命点(外側回数、回数)を 描画する
        生命点(外側回数、回数)を 検索対象の図形に登録する
    繰り返す
  繰り返す
  。
ラベル最大の増加数に表示するとは (変数→・)
    増加数は 変数
  増加数に 入れる  
  「Max増=」と 増加数を 文字列変換し 合成し
  ラベル最大の増加数に テキストを設定し
  ラベル最大の増加数に 変更を反映する
  。
ラベル世代数に表示するとは (変数→・)
    世代数は 変数
  世代数に 入れる  
  世代数を 文字列変換し 「世代」と 合成し
  ラベル世代数に テキストを設定し
  ラベル世代数に 変更を反映する
  。
ラベル現在の生命数に表示するとは (変数→・)
    生命数は 変数
  生命数に 入れる
  「生命数=」と 生命数を 文字列変換し 合成し
  ラベル現在の生命数に テキストを設定し
  ラベル現在の生命数に 変更を反映する
  。
生命体を描くとは (行、列→・)
    イメージIDは ID
    行は 変数
    列は 変数
    x座標は 変数
    y座標は 変数
  イメージIDと 行と 列に 入れる
  列に 間隔を 掛け x座標に 入れる
  行に 間隔を 掛け y座標に 入れる
  地球と イメージIDと x座標,y座標と 左上隅で 図形としてイメージを描く 生命図形(行、列)に 入れる
  。
生命体を消すとは (行、列→・)
    行は 変数
    列は 変数
  行と 列に 入れる 
  生命図形(行、列)を 図形削除する
  。
生命を発生するとは (イベント引数→・)
  イベント引数を捨て 
  地球既存? でなければ 終わり つぎに
  世代を セットし
  開始時の生命数を クリアし
  行数 回数指定し
    列数 回数指定し
      生命点(外側回数、回数)が この図形は選択中?
        ならば
          生命有(世代、外側回数、回数)を セットし 
          開始時の生命数を 一つ増加し
          イメージ成体を 外側回数、回数に 生命体を描く
        さもなければ
          生命有(世代、外側回数、回数)を クリアし
        つぎに
    繰り返す
  繰り返す
  0を ラベル世代数に表示する
  開始時の生命数を 現在の生命数に 入れる
  現在の生命数を ラベル現在の生命数に表示する
  最大の増加数を クリアする
  最大の増加数を ラベル最大の増加数に表示する
   。
近所数を増加するとは (行、列→・)
    行は 変数
    列は 変数
  行と 列に 入れる
  行が 0と 等しい
    ならば 行数を 行に 入れる
    さもなければ
  行が 行数より 大きい
    ならば 1を 行に 入れる
    つぎに
    つぎに 
  列が 0と 等しい
    ならば 列数を 列に 入れる
    さもなければ
  列が 列数より 大きい
    ならば 1を 列に 入れる
    つぎに
    つぎに 
  近所数(行,列)を 一つ増加する
  。    
近所数を計算するとは (・→・)
  行数 回数指定し
    列数 回数指定し
      生命有(世代,外側回数、回数) ならば
        [外側回数 - 1],[回数 - 1]の 近所数を増加する
        [外側回数 - 1],回数の    近所数を増加する
        [外側回数 - 1],[回数 + 1]の 近所数を増加する
        外側回数,[回数 - 1]の    近所数を増加する
        外側回数,[回数 + 1]の    近所数を増加する
        [外側回数 + 1],[回数 - 1]の 近所数を増加する
        [外側回数 + 1],回数の    近所数を増加する
        [外側回数 + 1],[回数 + 1]の 近所数を増加する
      つぎに
    繰り返す
  繰り返す
  。
繰り返しチェックしループ?とは (・ → 0/1)
    旧世代は 変数
    違い有り?は 変数  
  世代から 一つ引いて 回数指定し
    世代から 回数を 引いて 旧世代に 入れる
    違い有り?を クリアし
    行数 回数指定し
      列数 回数指定し
        生命有(世代、外側回数、回数)と 生命有(旧世代、外側回数、回数)が 異なる
           ならば 違い有り?を セットし 打ち切り
           つぎに
      繰り返す     
      違い有り? ならば 打ち切り  つぎに
    繰り返す    
    違い有り? でなければ 打ち切り つぎに
  繰り返す
  違い有り?が 偽?を 返す
    。
安定状態数とは 定数 2。
繁殖可能数とは 定数 3。
  
世代交代するとは (世代→ )
    次世代は 変数
    現在の増加数は 変数
  世代に 1を 加え 次世代に 入れる
  近所数を計算し
  行数 回数指定し
    列数 回数指定し
      近所数(外側回数、回数)が 安定状態数と 等しい
          ならば
            生命有(世代、外側回数、回数)
              ならば
                生命有(次世代、外側回数、回数)を セットする
                外側回数、回数の 生命体を消す ※卵かもしれないので一度消す
                イメージ成体を 外側回数、回数に 生命体を描く
              つぎに
          さもなければ
      近所数(外側回数、回数)が 繁殖可能数と 等しい
          ならば
            生命有(次世代、外側回数、回数)を セットする
            生命有(世代、外側回数、回数)
              ならば
                外側回数、回数の 生命体を消す ※卵かもしれないので一度消す
                イメージ成体を 外側回数、回数に 生命体を描く
              さもなければ
                イメージ卵を 外側回数、回数に 生命体を描く
                現在の生命数を 一つ増加する
              つぎに
          さもなければ
            生命有(世代,外側回数、回数)
              ならば
                外側回数、回数の 生命体を消す
                現在の生命数を 一つ減少する
              つぎに
          つぎに
          つぎに
      近所数(外側回数、回数)を クリア
    繰り返す
  繰り返す
  世代を 一つ増加し
  世代を ラベル世代数に表示する
  現在の生命数を ラベル現在の生命数に表示する
  現在の生命数から 開始時の生命数を 引き 現在の増加数に 入れる
  現在の増加数が 最大の増加数より 大きい
    ならば 現在の増加数を 最大の増加数に 入れる
        最大の増加数を ラベル最大の増加数に表示する
    つぎに
  。
生命繁殖するとは (・→・)
  イベント引数を捨て
  繁殖停止中?を クリアする
  最大世代数から 一つ引いて 回数指定し
    現在の生命数 でなければ 打ち切り  つぎに
    繁殖停止中? ならば  打ち切り   つぎに
    世代間隔だけ (ミリ秒) 遅延し
    世代交代し
    すべての保留イベントを処理
    繰り返しチェックしループ?
      ならば 繁殖停止中?を セットする
      つぎに
  繰り返す
   。
繁殖停止するとは (イベント引数→・)
  イベント引数を捨て
  繁殖停止中?を セットする
   。
繁殖クリアするとは (イベント引数→・)
  イベント引数を捨て
  繁殖停止中? でなければ  終わり  つぎに   
  現在の生命数 でなければ  終わり  つぎに
  現在の生命数を クリアする   
  行数 回数指定し
    列数 回数指定し
       生命有(世代、外側回数、回数)
         ならば
            外側回数、回数の 生命体を消す
         つぎに
    繰り返す
  繰り返す
  世代の情報を クリアし
  。
クリック付近の正方形を選択切替とは (イベント名、X座標、Y座標 3(param数) → ・)
        _イベント名は 文字列
        _X文字列は  文字列
        _Y文字列は  文字列
        _Xは     変数
        _Yは     変数
        _発見図形は  図形ID
        
    (パラメータ数を) 捨て
    _イベント名と _X文字列と _Y文字列に 入れ
    _X文字列を 数値変換し 捨て _Xに 入れ
    _Y文字列を 数値変換し 捨て _Yに 入れ  
   地球の  _Xと _Yと 標準許容値で 座標近傍の図形を一つ得て _発見図形に 入れ
    _発見図形が ゼロ以外
       ならば
         地球と _発見図形で この図形の選択状態を反転し 捨てる
       つぎに。  
  
地球誕生するとは (イベント引数→・)
  イベント引数を捨て        
  繁殖停止中?を クリアし
  最大の増加数を クリアする
  地球を キャンバスをクリアし 
  世代の情報を  クリアし
  格子点の情報を クリアし 
  格子点に正方形を描き
  地球既存?を セットする
  
  左クリックと クリック付近の正方形を選択切替の 実行情報と ""を
    地球に マウスイベントのバインドを登録する
        。
地球誕生の実行情報とは  地球誕生の 実行情報。
生命発生の実行情報とは  生命発生の 実行情報。
生命繁殖の実行情報とは  生命繁殖の 実行情報。
繁殖停止の実行情報とは  繁殖停止の 実行情報。
繁殖クリアの実行情報とは 繁殖クリアの 実行情報。
        
ボタン文字群は  文字列定数配列
  「地球誕生」、「生命発生」、「生命繁殖」、「繁殖停止」、「繁殖クリア」。
ボタン数は 定数 ボタン文字群の 要素数。
ボタン群は ボタン数の ID。

ラベル文字群は 文字列定数配列
  「世代数 」、「生命数 」、「最大の増加数」。
ラベル数は 定数 ラベル文字群の 要素数。
ラベル群は ラベル数の ID。

メインとは
    ボタン配置行は ID
    ラベル配置行は ID 
    地球配置行は  ID   
  地球既存?を クリアし
  メインウィンドゥで ボタン数で ボタンのIDを複数取得し ボタン群に 複数のIDを配列に格納
  ボタン数 回数指定し
    回数で 選択する
      地球誕生の実行情報、生命発生の実行情報、生命繁殖の実行情報、繁殖停止の実行情報、繁殖クリアの実行情報
    選択終わり
    ボタン群(回数)に イベント処理登録し
    ボタン文字群(回数)を ボタン群(回数)に テキスト設定する
    ボタン群(回数)を 有効化する    
  
  繰り返す

  メインウィンドゥで ラベル数で ラベルのIDを複数取得し ラベル群に 複数のIDを配列に格納
  ラベル数 回数指定し
    ラベル文字群(回数)を ラベル群(回数)に テキスト設定する
    12を ラベル群(回数)に ウィジェットの幅を設定し
    ラベル群(回数)を 有効化する
  繰り返す
  
  ラベル群(1)を ラベル世代数に 入れる
  ラベル群(2)を ラベル現在の生命数に 入れる
  ラベル群(3)を ラベル最大の増加数に 入れる
    
  メインウィンドウと キャンバス幅と キャンバス高と 白色で キャンバスIDを取得し 地球に 入れ
  地球を 有効化する
  
  ボタン群から 配列から複数のIDを取り出し ボタン数で
    これらの並べ配置のIDを取得し ボタン配置行に 入れる
    
  ラベル群から 配列から複数のIDを取り出し ラベル数で
    これらの並べ配置のIDを取得し ラベル配置行に 入れる  
  
  左から右を ボタン配置行に 並べ方向を設定し 10ピクセルを ボタン配置行に パディングの幅を設定
  下から上を ラベル配置行に 並べ方向を設定し 10ピクセルを ラベル配置行に パディングの幅を設定
  地球と 1個で  これらの並べ配置のIDを取得し 地球配置行に 入れる
  下から上を 地球配置行に 並べ方向を設定し
  地球配置行を 有効化し
  ラベル配置行を 有効化し   
  ボタン配置行を 有効化する
  イメージ成体の場所を イメージをロードし イメージ成体に 入れ
  イメージ卵の場所を  イメージをロードし イメージ卵に 入れる
  。  

卵と成体(カニ)のイメージ(実行プログラムの配下のimageフォルダーに置いてください。)
egg2.png
kani.png
イメージファイルのパスは、下記のようにプログラムで指定しています。(変更可能です)

イメージ成体の場所は "image¥kani.png"。 
イメージ卵の場所は "image¥egg2.png"。

実行画面と操作法
・[地球誕生]をクリックする → マス目が表示される
・マス目をクリックする(複数)→ マス目が強調表示される
・[生命発生]をクリックする → 選択済みのマス目に生命の卵が表示される
・[生命繁殖]をクリックする → 
 生命のいないところには周囲にちょうど3個の生命がある場合に新しく生命が誕生します。
生命がいるところは、周囲に2個、または3個の生命がいる場合に、そのまま生命が残ります。 そうでない場合には死んでしまいます。

life01D.jpg

2
0
1

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
2
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?