今迄は海のものとも、山のものともつかなかったので【無駄話】で書いていましたが、大分目鼻がついてきましたので、最終仕様すら決まっていませんが(注)、そろそろトピックに加えていきたいと思います。
注:この「最終仕様すら決まっていません」というのは、プログラムアイデアを練り、コーディングし、動作テストしている際に、最初考えていなかったことを突然思いついて仕様変更を繰り返しているからです。
【まだ何もコーディングしていなかった時の、旧い備忘的仕様メモ】
***仕様メモ***
1.新しいコンセプトのライフゲーム
2.オブジェクトは"world"と"cell"で、"world"がゲームの「場」、"cell"が「場」で誕生、生存、死亡する生命体プレーヤー
3."world"クラスは80 x 40(ピクセルで1280 x 640)の広さを持つ(cell最大数をどうするか?80 x 40 / 2?)
4.従来のライフゲームは植物の様に移動せず、過密、過疎で生態系が影響を受けたが、"cell"は動物をイメージして移動する。
5."cell"は誕生と共に別スレッドで個別に行動し、"world"内を移動する。
6."cell"の特徴(DNAをイメージ)として、「年齢」、「生命力」、「攻撃力」、「防御力」、「生殖力」etcを持つ。
7."cell"が移動して他のcellと隣接すると、「愛着」または「攻撃性」の特性により、交尾したり、闘争になったりする。
8.死亡要因は「寿命」、攻撃による「生命力の枯渇」
9.「栄養」や「水分」の摂取をどうするか、「病気」、「事故」をどうするか検討中
例えば昨日は「『世界』に誕生し、生存し、社会を作り又は破壊し、死んでゆく"Cell"という生き物」(セルを"Cell"とするか"cell"とするかも、未だ割れています-注1)をビットマップ表示する上で、便宜的にピンク、ブルー、グリーンの3色とし、死亡した場合「モノ」に戻るので、モノクロームで表示することを考えていましたが、折角3色のCellがいるので、これらを「Cell種(人間なら「人種」ですね...最近Hateが多いのタイムリーかと...)」(注2)にして、交尾、闘争の契機に使おうか、と思っています。
注1:本日、(元々はコンソールプログラムだったので)C++のライブラリーだけに依拠する(Cellプログラムの実体が入った)CcellクラスとCworldクラスの定義ファイル(Ccell-world.h)のコードのみ"cell"、(ウィンドウ処理とUIを担当する、Win32APIベースの)BCCSkelton関連ファイルのコードは"Cell"と表記することにしました。(BCCSkeltonファイルで、Ccell-world.hを参照するときには勿論"cell"となるので、コードからどっちの問題かよく分かります。)
注2:昨日はこう(「Cell種」、「人種」は即ち生物学的な"race")書きましたが、チト「参●党」を想起してしまうので政治色が強くなりすぎるのと、意図するものはより「社会、文化的集団」である「部族-"tribe"」であったことから、本日「(しかし、往々にして「部族」も「種」の違いが起源となりうるので)種族-"tribe"」という概念に変えました。
そうすると、今度は「愛着性」、「敵対性(攻撃性<hostility>から変更しました)」という特性の契機としてこの「種族」が使えることを思いつき、また同時に「種族」を超えた行動を許可するパラメーターとして「異種族婚(Inter-tribe marriage)許可」の概念も、本日取り入れることにしました。
色々追加することが多くなり、複雑になってゆきますが、本心は余り複雑にせず、基本はユーザー(神-創造主)が与えるパラメーター(現在の所、「世界」に誕生させるセルの数と異種族婚可否)で世界やそこに棲むセルがどのように活動し、変化するかをシミュレートしてみたい、ということです。
【最初は背景だけ】
【Cell誕生-メニューも増えています】
【開始時にパラメーターを与えられるようにし、背景の山と食物の見た目を改善した】
【「世界」の大きさから、セルの最大数を64に制限した】
まだまだ仕様が変わる可能性がありますが、段々と「それっぽい」感じになってきました。(実際、完成してからも与えるパラメーターのチューニングが大変だと思います。)
【現在の仕様メモ】
***仕様メモ***
1.新しいコンセプトのライフゲーム
2.最初はコンソールゲームを考えていたが、技術的問題があり、現在はBCCSkeltonによるダイアログプログラムにUI出力を担当させている。
3.オブジェクトは、ゲームの「場」である「世界」としての"Cworldクラス"と、「世界」誕生、生存、死亡する生命体プレーヤーである「セル」としての"Ccellクラス"である。
4.現在表示の問題から「世界」は「16 x 16ピクセルの齣(コマ)」、80 x 40(ピクセルで1280 x 640)の広さを持つ(セル数は8~64の8の倍数に固定)
5.従来のライフゲームは植物の様に移動せず、過密、過疎で生態系が影響を受けるだけだったが、「セル」は動物のように行動する生物をイメージし、移動、摂食、交尾、闘争(含む逃走)する。。
6.「セル」は誕生後、「世界」内を移動し、声明を維持しながら他の「セル」と遭遇して交尾(妊娠→出産とするか、すぐに子を持たせるか考え中。いずれにしてもこれにより新たな「セル」が誕生する。)、闘争(死亡要因となる)し、歳を取ってゆく(aging)。
7.「セル」の現在の特性(DNAをイメージ)として、
//生存フラグ
bool m_alive; //生存(true)、死亡(false)
//繁殖フラグ
bool m_intmarg; //異種族間婚の許可
//位置
location m_location; //cellの位置(world内の位置座標)
int m_around[8] = {-1}; //cell周囲の存在物(野原:0、山:1、河川:2、食物:3、セル:4 + ID、それ以外:-1)
//性格系
int m_affection = 0; //愛着性
int m_hostility = 0; //敵対性
//能力系
int m_left = 0; //余命(単位1時間、60年で24hours x 365days x 60years = 525,600)
int m_life = 0; //生命力(1年分のエネルギー:24hours x 365days)
int m_power = 0; //攻撃力(m_powerによる)
int m_defense = 0; //防御力(m_lifeによる)
int m_fertility = 0; //生殖力(m_ageによる)
//識別系
int m_id = -1; //cellのゼロベースの固有番号
int m_tribe = -1; //種族(色で表し、ピンク、ブルー、グリーン、モノ(死亡)の4色)
//運動系
int m_dir = 0; //現在の移動方向(停止:0、↑:1、→:3、↓:5、←:7、斜めは2、4、6、8)
bool m_change = false; //何か行為をして位置が動いた場合にtrueとなる(マップ処理後falseに戻す)
を持つ。
8.「セル」が移動して他の「セル」と遭遇すると、「種族」「異種族婚許可」「愛着性」「敵対性」により、交信、交尾したり、闘争、逃走したりする。
9.死亡要因は「寿命」が尽きるか、「生命力」が枯渇するか、であり、攻撃を受けたり、移動等活動することにより生命力は減少する。
10.「栄養」や「水分」の摂取をどうするか検討したが、これらを分離させて複雑にする必然性が無いので、「食物」を摂取することで「生命力」を一定期間程度回復させるようにする。
11.比較的小さい「世界」でどれだけの数のセルがいると増加、減少するのか、また試験的に作った「地形」で「世界」を河川によって両断し、中央に横断できる道があるが、このような要素が「セル」の繁殖にどのように影響するか、観察対象である。
12.「病気」、「事故」をどうするか検討中












