使い方マニュアル
このアプリは、街コロ(新装版)を エージェント同士で自動対戦 させ、 グラフィカルに観戦したり、何百試合も回して統計を取るためのシミュレータです。 人がダイスを振る必要はありません。ルールと戦略を組み、結果を見ることに集中できます。
1. はじめに — 何ができるか
大きく分けて 3 つの使い方があります。
- プレイ再生 … 1 試合を最初から最後までアニメーション再生する(観戦向け)
- シミュレーション … N 連戦して勝率・平均コインなどを比較する(検証・バランス向け)
- 編集 … エージェントの戦略、独自カード、独自ゲームルールを作る
例:こんな問いに答えられます
- 「はじめてセット」と「赤特化」だと、どちらが強い?(→ シミュレーション 200 連戦)
- カフェを市場から減らすと赤戦略は弱くなる?(→ サプライ枚数を変えて再実行)
- 同じシードなら毎回同じ展開になる?(→ シード固定で再生)
2. 画面の見方
画面はだいたい次の 3 領域です。
| 場所 | 役割 |
|---|---|
| 上部ヘッダー | DB 状態、ユーザ名、ログイン、ヘルプ、このマニュアル |
| 左ペイン | 人数・シード・ルール/カード・戦略・実行ボタン |
| 右メイン | プレイ再生ボード/統計/編集 UI |
左上のタブ
- プレイ再生 … 観戦ボードを表示。実行は「再生開始」
- シミュレーション … 統計表を表示。実行は「連戦実行」
- 編集 … Blockly や独自定義の編集画面
例:初めて開いたとき
左はすでに公式のルール/カードにチェックが入っています。
人数 4、シード demo-seed のまま「再生開始」を押すと、すぐ観戦できます。
構成のバックアップは左の ゲームファイル(.machikoro-game.json)でエクスポートできます。
3. ゲストと本登録
初回アクセス時、ブラウザの Cookie(machikoro_sid)で
ゲストアカウントが自動作成されます。ログインしなくても戦略やセット、連戦結果を保存できます。
- ヘッダーに
ゲスト-xxxx(ゲスト)と出ていればゲスト中です - 本登録 / ログイン … メールとパスワードでアカウント化。ゲスト中に本登録すると同じ ID のままデータが引き継がれます
- ゲストリセット … Cookie を消し、まっさらなゲストを作り直します(前のゲストデータは見えなくなります)
例:デモ用の本登録済みユーザ
email: demo@machikoro.local password: demo1234
開発環境のシードで用意されています。本番では必ずパスワードを変えてください。
4. 最初の一戦 — おすすめ手順
- 人数を 2 に減らす(短い試合で流れを掴みやすい)
- シードを
tutorial-1にする - プレイヤー戦略を、それぞれ別テンプレにする(例: 「はじめてセット」と「ランドマーク優先」)
- 「再生開始」を押す
- 速度スライダーを右に寄せてゆっくり観る/「一時停止」「1手進む」で区切る
例:観戦中に注目するポイント
- 上部のダイス … 出目と合計
- 各町の色タイル … 青/緑/赤/紫の施設
- 金色のランドマーク … 駅→モール→遊園地→電波塔が揃うと勝利
- 「実況」欄 … 建設・収入・徴収が日本語で流れる
- 判断バナー … その手でどの IF-THEN が発火したか
5. プレイ再生モード
1 試合分のイベントを時系列で再生します。人間は操作せず、エージェントの判断を眺めます。
操作
| 操作 | 意味 |
|---|---|
| 再生開始 | 現在の左ペイン設定で 1 試合を実行し、再生を開始 |
| 一時停止 / 再開 | アニメを止める/続ける |
| 1手進む | イベントを 1 つだけ進める(デバッグ向け) |
| 速度 | 左が速い・右が遅い(間隔ミリ秒) |
例:バグっぽい手を切り分ける
- シードをメモする(例
bug-cafe-3) - 速度を最大遅くし、問題のターン手前で一時停止
- 「1手進む」でダイス→収入→建設を dual 確認
- 実況と判断バナーで「どのルールが建設を選んだか」を読む
6. シミュレーション(N 連戦)
同じ設定のままシードだけずらして N 試合回し、統計を出します。
手順
- 左で人数・戦略・ルール・カード・枚数を決める
- 「連戦回数 N」を入れる(例: 100)
- ベースシードを決める(例:
batch-red-vs-blue) - 「連戦実行」を押す
結果の見方
- 勝率 … その席が勝った割合
- 平均賞金 … 終了時コインの平均
- 平均施設 / LM … 町の規模感
- 試合一覧 … 行をクリックすると、その試合シードでプレイ再生に跳びます
- CSV エクスポート … 「試合ログ / 集計サマリー / 建設ランキング」ボタンで Excel 向け CSV を保存
- 履歴 / 分析 … タブから保存済み連戦を閲覧。勝率洞察・試合長ヒストグラム・2件比較・削除が可能
例:試合ログ CSV の主な列
gameIndex, seed, turns, winnerIndex, playerIndex, strategyName, rank, won, coins, earnedTotal, landmarkCount, blue, green, red, purple, …
1 試合あたり人数分行が出ます。ピボットすれば戦略別の平均コインなども Excel で作れます。
例:赤特化 vs 青特化(4 人)
人数: 4 N: 200 ベースシード: red-vs-blue-200 P0: 赤特化テンプレ P1: 青特化テンプレ P2: はじめてセット P3: ランドマーク優先
実行後、勝率バーで P0 と P1 を比較します。 「カフェの枚数を 6→2 に減らす」と勝率がどう変わるかも、枚数だけ変えて同じベースシードで再実行すると比べやすいです。
7. カードとサプライ枚数
「有効カード」にチェックが入っているものが市場に出ます。 各施設の右側の数字が サプライ枚数(机に並べる同名カードの枚数)です。
公式の枚数
| 種類 | 枚数 |
|---|---|
| 通常施設(青・緑・赤など) | 各種 6 |
| 大施設(紫) | 各種 4 |
| 施設サプライ合計 | 84 |
| 初期施設(麦畑・パン屋)とランドマーク | 人数分(サプライとは別枠) |
左ペインに「有効施設サプライ計 ○○ 枚(公式は合計 84)」と出ます。「公式枚数に戻す」でデフォルトに復帰できます。
例A: 赤を弱くする
カフェ=2、レストラン=2 にして連戦。赤テンプレの勝率が下がるか確認。
例B: 紫を枯渇させる
スタジアム=1、TV局=1、ビジネスセンター=1。序盤に取った人だけが紫を持てる世界線を試す。
例C: 無限に近い牧場
牧場=30。青積み戦略がどこまで伸びるかストレステスト。
8. ゲームルールの有効化
「有効ゲームルール」はチェックで ON/OFF します。 同じカテゴリで矛盾するルール(例: 標準サプライとランダム市場)は同時に有効にできません。
例:標準サプライ(全部並べる)
「標準サプライ(フル市場)」にチェック。公式どおり全施設が見えるテーブル。
例:ランダム市場(拡張ルール)
「標準サプライ」を外し、「ランダム市場」を入れる。 1〜6 と 7〜12 の山から種類が補充される遊び方です。毎回見えるカードが変わり、戦略差が出やすいです。
例:勝利条件を緩める(独自)
編集タブで win_landmark_count / {"count":3} の独自ルールを作り、公式の「全ランドマーク勝利」と入れ替えて試す。
変更後は「設定検証」を押すと、競合がないか確認できます。
9. 戦略(IF-THEN)— 例を多めに
エージェントは優先度の高い順にルールを見て、最初に真になった THEN を実行します。
建設ルールの末尾には必ず pass(何も建てない)を置くのが安全です。
よく使う式
| 式 | 意味 |
|---|---|
coins >= 4 | 所持金が 4 以上 |
cost("駅") | 駅のコスト |
can_afford("カフェ") == 1 | 今建てられる |
owns("麦畑") < 3 | 麦畑が 3 枚未満 |
landmark_count >= 2 | 完成 LM が 2 以上 |
supply("牧場") > 0 | サプライに残っている |
opponent_coins_max >= 10 | 一番お金持ちの相手が 10 以上 |
例1: 駅を最優先、ダメなら麦畑
{
"vars": {},
"rules": [
{ "when": "can_afford(\"駅\") == 1", "then": { "build": "駅" } },
{ "when": "owns(\"麦畑\") < 3 and can_afford(\"麦畑\") == 1", "then": { "build": "麦畑" } },
{ "when": "true", "then": { "pass": true } }
],
"diceRules": [
{ "when": "owns(\"駅\") == 1", "then": { "roll_dice": 2 } },
{ "when": "true", "then": { "roll_dice": 1 } }
],
"rerollRules": [
{ "when": "dice < 3", "then": { "reroll": true } },
{ "when": "true", "then": { "reroll": false } }
]
}
例2: 変数で「駅を欲しがるか」を切り替える
{
"vars": {
"want_station": "owns(\"駅\") == 0"
},
"rules": [
{ "when": "want_station and coins >= cost(\"駅\")", "then": { "build": "駅" } },
{ "when": "can_afford(\"牧場\") == 1", "then": { "build": "牧場" } },
{ "when": "true", "then": { "pass": true } }
],
"diceRules": [ { "when": "true", "then": { "roll_dice": 1 } } ],
"rerollRules": [ { "when": "true", "then": { "reroll": false } } ]
}
want_station は駅を持っていない間だけ真になります。駅完成後は牧場購入に流れます。
例3: 赤(飲食)を厚くする
ルールの優先順イメージ: 1. カフェを買えるなら買う 2. レストランを買えるなら買う 3. モール(赤・緑のボーナス)を優先して完成 4. それでも余力があれば駅 5. pass
同梱テンプレの「赤」系をベースに、枚数制限下でどれだけ勝率が残るか試すと面白いです。
例4: ダイスは駅+LM2 個から 2 個振り
"diceRules": [
{ "when": "owns(\"駅\") == 1 and landmark_count >= 2", "then": { "roll_dice": 2 } },
{ "when": "true", "then": { "roll_dice": 1 } }
]
例5: 電波塔の振り直し(小さい目だけ)
"rerollRules": [
{ "when": "dice <= 2", "then": { "reroll": true } },
{ "when": "true", "then": { "reroll": false } }
]
電波塔未完成なら振り直しは発生しません(エンジン側でガードされます)。
テンプレ戦略
シードで「はじめて」「ランドマーク」「赤」「青」「二個ダイス」などが入っています。 左の各プレイヤー枠で選ぶだけで対戦カードが組めます。まずはテンプレ同士で連戦し、差を見てから自作に進むのがおすすめです。
10. Blockly(Scratch 風)編集
- 「編集」タブを開く
- 左のブロックから IF / 建設 / ダイス などを並べる
- 「JSON に反映」や保存ボタンで戦略として保存
- 左ペインの戦略プルダウンに現れ、対戦に使える
例:ブロックで「駅→牧場→pass」
- 「もし can_afford(駅) なら 建設 駅」
- その下に「もし can_afford(牧場) なら 建設 牧場」
- 最後に「pass」
JSON ビューに切り替えると、上節と同じ構造になっているはずです。逆に JSON を直して Blockly に戻すこともできます(対応ブロックがある範囲)。
画面下部の 戦略ファイル から
.machikoro-strategy.json のエクスポート/インポートができます(編集中・保存済み・一括)。
11. 独自カード/独自ゲームルール
編集タブから、公式にないカードや勝利条件などを追加できます。保存後、左のチェック一覧に現れます。
例:安い青施設「豆畑」
{
"id": "bean_field",
"name": "豆畑",
"color": "blue",
"cost": 1,
"activation": [1, 2],
"icons": ["grain"],
"supplyCopies": 6,
"effect": { "type": "bank_income", "amount": 1 }
}
効果タイプは bank_income / steal_from_roller / bank_income_per_icon などが使えます(API の /meta/effect-types 参照)。
例:ランドマーク 3 つで勝利
{
"id": "win_landmarks_3",
"name": "ランドマーク3で勝利",
"type": "win_landmark_count",
"category": "victory",
"params": { "count": 3 }
}
公式の「全ランドマーク勝利」チェックを外し、こちらだけ有効にしてください。
12. シードと再現性
同じ シード・人数・戦略・ルール・カード・枚数 なら、ダイスも含め結果は一致します。 バグ報告や戦略比較ではシードを必ず控えてください。
例:再現手順
- 気になる試合のシードをコピー(シミュレーション一覧からクリックでも可)
- 左のシード欄に貼る
- 他設定を変えずに「再生開始」
- 何回やっても同じ勝者・同じ展開になることを確認
API なら POST /api/debug/repro-check で 2 回実行の一致を一発検証できます。
13. API の例(自動化・バグチェック)
ベース URL は http://localhost:3000/api です。詳細は docs/API.md(リポジトリ内)も参照してください。
例:ゲスト確保
curl -c cookies.txt -X POST http://localhost:3000/api/auth/guest
例:1 試合(イベント省略)
curl -X POST http://localhost:3000/api/play/run ^
-H "Content-Type: application/json" ^
-d "{\"playerCount\":2,\"seed\":\"api-1\",\"includeEvents\":false,\"supplyCopies\":{\"cafe\":2}}"
例:自己診断
curl -X POST http://localhost:3000/api/debug/selftest
例:式のテスト
curl -X POST http://localhost:3000/api/debug/eval-expr ^
-H "Content-Type: application/json" ^
-d "{\"expr\":\"coins >= cost(\\\"駅\\\")\",\"context\":{\"coins\":5,\"costs\":{\"駅\":4}}}"
14. よくある質問
- 試合が終わらない/ターン数が異常に多い
-
戦略がほとんど
passしかしていない可能性があります。 ランドマークを建てるルールが入っているか、テンプレに戻して試してください。 - 保存できない・401 になる
- ゲスト Cookie が付いていない状態です。ページを再読み込みするか、ヘッダーから本登録/ログインしてください。
- ランダム市場なのに同じカードばかり
- 枚数設定と山札のシャッフルはシード依存です。ベースシードを変えるか N 連戦で分布を見てください。
- 公式と枚数が違う気がする
- 施設サプライは合計 84(通常 6・紫 4)が公式です。初期の麦畑・パン屋と LM は人数分の別枠です。 「公式枚数に戻す」後、合計表示が 84 になるか確認してください。
- Blockly と JSON がずれる
- 未対応のブロック/手書き JSON だと往復で欠けることがあります。重要な戦略は JSON を正として保存してください。
15. 用語集
| 用語 | 意味 |
|---|---|
| サプライ | 場に並び、購入できる施設の山・列 |
| ランドマーク (LM) | 駅・モール・遊園地・電波塔。全部完成で勝利(公式) |
| 大施設 | 紫カード。各プレイヤー 1 枚まで |
| シード | 乱数の種。同じ設定なら試合を再現できる |
| IF-THEN | 条件が真なら行動、というエージェント規則 |
| ゲスト | Cookie で自動発行される一時ユーザ |
3.5 ソーシャル(共有・友達・タイムライン)
左のタブ ソーシャル から、他ユーザの戦略・ゲーム構成を共有・検証できます。
例:他人の戦略を検証する