mapper
サーベイのために「放置系ゲーム」をいくつかやってみるのが良いかもしれぬ
ALTER EGOが放置系ゲームの構造になっているのは意外だった
構造
「工場」は「資源」$ A_iの組み合わせから別の「資源」$ A_jを生成することができる
「資源」$ A_iから「資源」$ A_jを生成することができるのは,「自然法則」による
「自然法則」はシステムコールに対応する.システムコールは「工場」を「実行」するスタックマシンの命令として天下り的に定義される
「自然法則」に消費された「資源」は失われる
「工場」とはなにか?
スタックマシンのバイトコード
バイトコードの文法は天下り的に与える
システムコールに対応するような素朴な「工場」はゲーム側から与える.
「工場」と「工場」は「パイプ」によって組み合わせることができる
つまり,「工場$ X: A_1 \rightarrow A_2」と「工場$ Y: A_2 \rightarrow A_3」があれば,これを組み合わせることで仮想的に「大きな工場$ Z: A_1 \rightarrow A_3」を作ることができる
「パイプ」にはラグがある.つまり,左から入れても右から出てくるまでには時間がかかる.この時間を節約するためには,「工場」と「工場」を組み合わせるのではなく,バイトコードを直接書いて大きな工場を直接作った方が良い.
各「工場」は別のプロセスで動く
つまり並行処理を行うためには「工場」を複数作って「パイプ」で接続する必要がある
「工場」はそのスペックを「金」によって強化することができる
バイトコード
データ構造
Primitive
int
float
Element (「資源」)
Enum(A1,A2,A3...)
Tuple(Element, Element)
label
基本的な命令
push
pop
add
sub
mul
div
jump if
dup
Elementが引数に指定された場合はエラーを投げて終了する
システムコール
read
「パイプ」から「資源」を取り出してpushする
write
「資源」をpopして「パイプ」に詰め込む
compose
Elementを2つpopして,Tupleを作ってpushする
transform群
Elementを1つpopして,別のElementに変換する
ゲームの味付け
物質を加工して売ることで儲けを出すゲーム
資源をGM(ゲームマスター)から採掘する命令
資源をGMに売却する命令
複数の資源を組み合わせて別の資源を生成する命令
加工したほうが高く売れるようなバランス
資源を倉庫にstore/loadする命令(種別ごとに勝手に分けられる)
倉庫は無限の容量を持つ
倉庫にstore/loadするのは時間がかかる
資源は別ユーザーと売買できる
GMに売却するよりも別ユーザーと交易したほうが高くなるようなバランス
工場
工場は以下の3つの制約の組
命令数の上限
ASTに含まれる要素の数
高級性とかで重み付けする
デプロイ時に構文解析までやって評価できる
メモリ容量の上限
CPU時間の上限
工場は購入することができる
様々なバラエティの工場が存在する
2倍の性能の工場を買うよりも工場を2つ買うほうが安くなるようなバランス
買った値段で売れる
工場のアナロジー,無いほうがいいのかもしれない
プログラムをデプロイして放置しておけばゲームになる→「ゲームは一日一時間」とかの制約と相性が良い?
言語
純LISPに整数と四則演算ぐらいを追加してやれば良さそう