080 予報士の机 v1.0.2
予測ゲーム / 日本語 / Pyxel + Python標準ライブラリ

公開8枚のうち1枚が今日の空。風か雲を一つ観測して、天気を何種類まで言い切るか選ぶ。
一種類は当たり+6・外れ-4、二種類は当たり+2・外れ-2、全部なら必ず+1。
どんな幅でも3日提出すれば基本の仕事は完了。点数の閾値はありません。
これは架空の机上モデルであり、実際の気象や災害判断には使えません。

起動
Python 3.10以上。Windows: 初回setup.bat、その後play.bat。
Linux/macOS: 初回bash setup.sh、その後bash play.sh。
初回のPyxelインストール以外、ネット・外部画像・外部音素材は不要。
ゲーム起動の依存はrequirements.txtのPyxelだけ。日本語の字形データを同梱。
Windows/macOS実機は未確認。launch.shは開発用クラウド環境専用なので配布先はplay.sh/play.bat。

操作
Z/Enter/Space: 表紙から開始。左右・上下: 風/雲/晴/曇/雨の欄を移動。
Z: 選んだ観測をする、または予報の天気を入/切。Enter: 予報を提出。
Space: 結果画面から次の日。結果を読んでいる間は進みません。
Tab: 期待点を表示/非表示。H/P: 説明。X: 操作を戻す（観測した知識は保持）。R: 同じ3日を再開。
1/2/3: 状況A/B/C。B: 一種類予報の外れだけ-1へ替えた管理比較版。
M: 表紙。F12: PNG保存。S: 現在の意味入力記録を保存。Escape: 終了。
押したキーは全部離してから次の操作。同時に押された複数操作は全て拒否。

知っていることと、まだ知らないこと
同じ属性のカードも別々の一枚です。無観測なら常に8枚が分母。
観測は一日一種類。もう一つの属性、実際の天気、秘密カード番号は提出後に開示。
見えた風/雲と一致するカードを残し、その全てから当たり枚数と期待点を計算します。
候補にない天気の予報も選択は可能。ただし候補内の当たりは0枚と正しく表示。
空の予報は提出不可。観測を使わず報告しても、全部予報でも隠し減点はありません。
A/B/Cのseedは711/733/757。標準random.Randomで復元抽選3枚を開始時に固定。
再開しても未来のカードは変わりません。毎日は全8候補に戻り、昨日の雨を勝手に消しません。

再演と初回の区別
結果後Xで戻すと、同じ日の再演です。初回予報と根拠と点は残し、選び直しは練習欄へ。
R、表紙、状況/比較版切替でも、この起動中の各状況・各版の初回記録を保持。
初回合計は書き換わりません。アプリを終了して再起動すると新しいセッションです。
各セッションの初回/練習/再開/undoをmedia/のJSONへ保存します。
真相を見た後の高得点を初見の改善として集計しません。
期待点は整数分子/分母の分数。丸め値で最適を逆転させません。
3日の実得点で予測能力や確率の校正を実証したとは言いません。

3つの机
Aは晴6/8。厚い雲なら晴2・雨2へ。Bは晴1・曇4・雨3。二種類も合理的。
Cは厚い雲なら各1/3で、全部を残す期待点が最大。風なら静は晴3/4、強は雨3/4。
全8カード×無観測/風/雲×全7予報×2版×3状況を検査しています。
固定3日の結果と、全候補での期待値の比較は別の記録です。

証拠とライセンス
media/に実Pyxel自動デモ、PNG、意味入力、論理日、設定、正規化state SHA-256、当時のソース。
MP4は元GIF全フレームを各1回30fpsで保持した無音映像。人の試遊ではありません。
public_viewだけを表示へ渡し、開示前の秘密が予告へ漏れないことを非干渉試験。
python -m unittest discover -v でモデルと入力試験。tools/は開発者向け。
同梱字形: Noto CJK/SIL OFL全文 assets/NOTO-LICENSE.txt。Pyxel MIT全文 assets/PYXEL-LICENSE.txt。
操作・表示は機能検査、予報の上達や納得感・面白さは人による確認待ち。

v1.0.1の情報保持修正: 観測をundo/再開しても、その日の既知の風/雲と候補を保持するため、二つ目の属性は読めません。原版と比較版は同じ秘密カードなので、知った観測と開示済み日も共有します。別版へ移ってからの答えを知った予報も再演として練習欄へ。初回記録がなくても、その版で3日分を報告すれば仕事完了です。

v1.0.2: 候補0のデータ不整合は、予報集合も空の場合を含め、プレイヤーの入力ミスとせず例外停止する境界検査を追加。通常の合法プレイでは到達しない。
