049 町工場の一日 / Python + Pyxel

忙しく動かすほど、早く終わるとは限らない。
一人の作業員が、切断Cと仕上Fへ一刻に一つだけ指示します。
両機械は並行して動き、切替の清掃と仕掛レールの先頭が計画を変えます。

起動
Windows: Python 3を用意しsetup.bat、次にplay.bat。
macOS/Linux: sh setup.sh、sh play.sh。実行時依存はPyxelのみ。
このフォルダだけで起動可能。launch.shは制作者のクラウドQA専用です。
Python: python app.py。自動収録: python app.py --headless --demo。

操作
表紙のSPACE/Zで開始。1/2/3で状況を選択。
矢印で指示札を選びZまたはSPACEで確定。「一刻待つ」も指示札です。
X:一刻丸ごと戻す、R:同状況を最初から、P:停止/説明、M:表紙、ESC:終了。
停止中はR/M/Pのみ有効。キーを離してから次の操作を受けます。
B:「清掃が必要 / 素材切替無料」の比較用ルールを切替、状況を初期化。
比較の無料版でも清掃札は残りますが切替に必要ありません。

ルール
木Wと金属M。機械は最後の素材を保持し、別素材の前に清掃1刻が必要。
新規開始もその刻から進行。C完成はレール末尾へ、F開始は旧状態の先頭だけ。
レールは2枠。満杯ならCが完成品を保持し、新品は開始できません。
Fの納品は自動。納期の境界ちょうどまで満額、遅れても価値-1、最低1。
勤務終了時の目標で判定し、全件処理を強制しません。未達でもXで戻せます。
選択札の予告に次刻の価値とレール数、拒否理由を表示します。

3つの状況
A「同じ木をまとめる」8刻/目標7: 木a,bをまとめ、金属cへ。
B「長い仕事か短い二件か」9刻/目標5: a+bで5、a+長いLで6。
C「レールの先頭」11刻/目標7: 木a,cを先行すると全10の候補。
具体的な品・C/F所要刻・価値・納期はゲーム内ですべて公開。
設計候補データの変更なし。候補列は純粋モデルで検算済み。

検査と収録
python -m unittest discover -p "test*.py" -v
python experiments.py: 探索・別案・退化方策の結果を書き出す専用コマンド。
通常のテストはmediaや保存済み実験ログを書き換えません。
media/small_factory_automatic_silent.mp4: 実Pyxel画面、自動入力、無音。
映像は人の試遊ではありません。QA.txtで確認範囲を分けています。
フォント: Noto Sans CJKより抽出したビットマップ、SIL OFL同梱。
ソース: LICENSE.txt。音は実装していません。
