街コロ Simulator
アプリに戻る

使い方マニュアル

このアプリは、街コロ(新装版)を エージェント同士で自動対戦 させ、 グラフィカルに観戦したり、何百試合も回して統計を取るためのシミュレータです。 人がダイスを振る必要はありません。ルールと戦略を組み、結果を見ることに集中できます。

1. はじめに — 何ができるか

大きく分けて 3 つの使い方があります。

  1. プレイ再生 … 1 試合を最初から最後までアニメーション再生する(観戦向け)
  2. シミュレーション … N 連戦して勝率・平均コインなどを比較する(検証・バランス向け)
  3. 編集 … エージェントの戦略、独自カード、独自ゲームルールを作る

例:こんな問いに答えられます

  • 「はじめてセット」と「赤特化」だと、どちらが強い?(→ シミュレーション 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

開発環境のシードで用意されています。本番では必ずパスワードを変えてください。

Cookie を消す・別ブラウザ・シークレットウィンドウでは別ゲストになります。大事な戦略は本登録かエクスポート(JSON)を推奨します。

3.5 ソーシャル(共有・友達・タイムライン)

左のタブ ソーシャル から、他ユーザの戦略・ゲーム構成を共有・検証できます。

  • フィード … 投稿・いいね・コメント(本登録)。戦略やゲームパックを添付可
  • カタログ … 公開/友達向けの戦略・ゲームパック一覧。「検証に載せる」「構成を適用」「コピー」
  • 友達 … 検索・申請・承認(本登録)
  • メッセージ … 友達同士の DM(本登録)

例:他人の戦略を検証する

  1. 本登録ユーザが編集タブで戦略を保存し、公開範囲を「すべてのユーザ」にする
  2. 別ユーザ(ゲストでも可)がカタログから「検証に載せる」→ P0 に載る
  3. プレイ再生または連戦で勝率を確認。必要なら「コピー」で自分用に保存
ゲストは公開カタログの閲覧とコピーのみです。友達・投稿・公開設定の変更には本登録が必要です。

4. 最初の一戦 — おすすめ手順

  1. 人数を 2 に減らす(短い試合で流れを掴みやすい)
  2. シードを tutorial-1 にする
  3. プレイヤー戦略を、それぞれ別テンプレにする(例: 「はじめてセット」と「ランドマーク優先」)
  4. 「再生開始」を押す
  5. 速度スライダーを右に寄せてゆっくり観る/「一時停止」「1手進む」で区切る

例:観戦中に注目するポイント

  • 上部のダイス … 出目と合計
  • 各町の色タイル … 青/緑/赤/紫の施設
  • 金色のランドマーク … 駅→モール→遊園地→電波塔が揃うと勝利
  • 「実況」欄 … 建設・収入・徴収が日本語で流れる
  • 判断バナー … その手でどの IF-THEN が発火したか

5. プレイ再生モード

1 試合分のイベントを時系列で再生します。人間は操作せず、エージェントの判断を眺めます。

操作

操作意味
再生開始現在の左ペイン設定で 1 試合を実行し、再生を開始
一時停止 / 再開アニメを止める/続ける
1手進むイベントを 1 つだけ進める(デバッグ向け)
速度左が速い・右が遅い(間隔ミリ秒)

例:バグっぽい手を切り分ける

  1. シードをメモする(例 bug-cafe-3
  2. 速度を最大遅くし、問題のターン手前で一時停止
  3. 「1手進む」でダイス→収入→建設を dual 確認
  4. 実況と判断バナーで「どのルールが建設を選んだか」を読む

6. シミュレーション(N 連戦)

同じ設定のままシードだけずらして N 試合回し、統計を出します。

手順

  1. 左で人数・戦略・ルール・カード・枚数を決める
  2. 「連戦回数 N」を入れる(例: 100)
  3. ベースシードを決める(例: batch-red-vs-blue
  4. 「連戦実行」を押す

結果の見方

  • 勝率 … その席が勝った割合
  • 平均賞金 … 終了時コインの平均
  • 平均施設 / 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 に減らす」と勝率がどう変わるかも、枚数だけ変えて同じベースシードで再実行すると比べやすいです。

ゲスト/ログイン中なら結果が DB に保存され、あとから参照できます。未認証 API だけだと保存されない場合があります。

7. カードとサプライ枚数

「有効カード」にチェックが入っているものが市場に出ます。 各施設の右側の数字が サプライ枚数(机に並べる同名カードの枚数)です。

公式の枚数

種類枚数
通常施設(青・緑・赤など)各種 6
大施設(紫)各種 4
施設サプライ合計84
初期施設(麦畑・パン屋)とランドマーク人数分(サプライとは別枠)

左ペインに「有効施設サプライ計 ○○ 枚(公式は合計 84)」と出ます。「公式枚数に戻す」でデフォルトに復帰できます。

例A: 赤を弱くする

カフェ=2、レストラン=2 にして連戦。赤テンプレの勝率が下がるか確認。

例B: 紫を枯渇させる

スタジアム=1、TV局=1、ビジネスセンター=1。序盤に取った人だけが紫を持てる世界線を試す。

例C: 無限に近い牧場

牧場=30。青積み戦略がどこまで伸びるかストレステスト。

枚数 0 にすると、その施設は市場に出ません(初期配布の麦畑・パン屋は別なので、枚数 0 でも開始時の 1 枚は持ちます)。

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 風)編集

  1. 「編集」タブを開く
  2. 左のブロックから IF / 建設 / ダイス などを並べる
  3. 「JSON に反映」や保存ボタンで戦略として保存
  4. 左ペインの戦略プルダウンに現れ、対戦に使える

例:ブロックで「駅→牧場→pass」

  1. 「もし can_afford(駅) なら 建設 駅」
  2. その下に「もし can_afford(牧場) なら 建設 牧場」
  3. 最後に「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. シードと再現性

同じ シード・人数・戦略・ルール・カード・枚数 なら、ダイスも含め結果は一致します。 バグ報告や戦略比較ではシードを必ず控えてください。

例:再現手順

  1. 気になる試合のシードをコピー(シミュレーション一覧からクリックでも可)
  2. 左のシード欄に貼る
  3. 他設定を変えずに「再生開始」
  4. 何回やっても同じ勝者・同じ展開になることを確認

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 で自動発行される一時ユーザ