はじめに
オセロより早く終わるのに、思ったより難しい。
そんな7×7の自作ボードゲーム 「数位 - SU-I -」 を作りました。
遊べるページはこちらです。
ルールとか説明してる記事はこちら
https://usagipy.com/su-i-board-game-math-learning/
「数位」は、7×7マスの盤面で、白と黒に分かれて戦う2人用のボードゲームです。
人間同士の対戦だけでなく、CPU対戦にも対応しています。
イメージとしては、
- オセロより短時間で終わる
- 将棋ほどルールは複雑ではない
- でも盤面の読み合いはかなりある
- 子どもでも数を数えながら遊べる
という感じです。
短時間で遊べるけれど、
駒の動き方が盤面によって変わるため、見た目以上に考えるゲームになりました。
作ったもの
ブラウザで遊べるボードゲームです。
使ったのはあえてGeminiのAntigravityですCodexは別のツールで使ってるので
7×7の盤面に、白と黒の駒を配置して遊びます。
基本的には、
- 王
- 民
という2種類の駒を使います。
王を取る、王を相手陣地の奥まで進める、相手の民をすべて取る。
このどれかを満たすと勝利です。
ルールの特徴
数位の一番大きな特徴は、
盤面に置かれている駒の数によって、民の移動距離が変わる ことです。
王は上下左右・斜めに1マス動けます。
一方で、民は上下左右・斜めに動けますが、
移動距離が固定ではありません。
- 縦に動く場合は、その列にある駒の総数
- 横に動く場合は、その行にある駒の総数
- 斜めに動く場合は、その斜めライン上にある駒の総数
その数だけ移動します。
つまり、同じ駒でも局面によって動ける距離が変わります。
序盤では届かなかった場所に中盤では届くようになったり、
逆に駒が減ることで移動距離が短くなったりします。
この「盤面の状態によって駒の意味が変わる」ところが、
このゲームの中心です。
勝利条件
勝利条件は3つあります。
- 相手の王を取る
- 自分の王が相手側の最奥列に到達する
- 相手の民をすべて取る
どれか1つを満たせば勝利です。
勝ち筋を1つにしなかったことで、
相手の王を直接狙うのか、王の突破を狙うのか、民を削って勝つのか、
局面ごとに違う判断が生まれるようにしました。
オセロより早いけど、意外と難しい
7×7なので、盤面はそこまで大きくありません。
1局の時間も比較的短めです。
ただ、実際に作って遊んでみると、
単純なゲームにはなりませんでした。
理由は、駒を動かしたり取ったりするたびに、
次の移動距離が変わるからです。
たとえば、ある列の駒を1つ取ると、
その列の駒数が変わります。
駒数が変わると、
次にその列を使って動く駒の移動距離も変わります。
つまり、
- 駒を取る
- 行・列・斜めの駒数が変わる
- 移動距離が変わる
- 攻撃ルートや逃げ道が変わる
という連鎖が起きます。
オセロのように短時間で遊べる一方で、
「この駒を取ると次にどこへ届くようになるか」を考える必要があります。
ここが、思った以上に難しいところでした。
子どもでも遊べる、足し算・引き算の練習にもなる
もうひとつ意識したのは、
子どもでも楽しみながら足し算・引き算に触れられるゲームにすること でした。
数位では、民の移動距離を考えるときに、
行・列・斜めにある駒の数を数える必要があります。
たとえば、
- この列には駒が4個ある
- だからこの民は4マス動ける
- 駒を1つ取ると、次は3マスになる
- 別の駒が増えると、また移動距離が変わる
というように、盤面を見ながら自然に数を数えます。
難しい計算ではありませんが、
「数える」「増える」「減る」「移動する」という感覚が、遊びの中に入っています。
そのため、子どもでも楽しみながら、
足し算・引き算の感覚に触れられるのではないかと思いました。
また、特別な道具がなくても遊べるようにしたかったので、
地面に7×7の盤を描いて、石や木の実を駒にすれば、外でも遊べる形を意識しています。
ブラウザゲームとして作りましたが、
元のルール自体はかなりアナログです。
紙に盤を書いてもいいですし、
公園や校庭で地面に線を引いても遊べます。
こういう「すぐ遊べるボードゲーム」になったら面白いと思っています。
実装・設計で意識したこと
ルールを増やしすぎない
最初から複雑なゲームにすると、
プレイヤーが覚える前に離脱してしまいます。
なので、基本ルールはできるだけ少なくしました。
- 王は1マス移動
- 民は盤面の駒数に応じて移動
- 勝利条件は3つ
このくらいまで絞っています。
ただし、ルールを少なくすると、
ゲームとしての深さを出すのが難しくなります。
そこで、駒の種類や特殊能力を増やすのではなく、
盤面そのものが駒の動きを変える という方向で設計しました。
盤面から戦略が自然に生まれるようにする
このゲームでは、行・列・斜めの駒数がそのまま移動距離になります。
そのため、駒を取ることは単なる戦力差だけではありません。
駒を取ることで、次の移動距離が変わります。
移動距離が変わることで、新しい攻撃ルートや防御ルートが生まれます。
結果として、単純な駒得だけでは判断しにくいゲームになりました。
「今この駒を取ると得か」だけではなく、
「取ったあとに相手の移動距離がどう変わるか」まで考える必要があります。
一番大変だったところ
一番大変だったのは、
ルール作成 と 先手・後手の勝率調整、そして 強化学習をどう取り入れるか でした。
ボードゲームは、ルールを少し変えるだけで一気にバランスが崩れます。
先手が有利すぎると、
ゲームとしては「最初に動いた側が勝ちやすいだけ」になってしまいます。
逆に後手に補正を入れすぎると、
今度は後手が有利になりすぎます。
そのため、CPU同士を対戦させながら、
- 先手勝率
- 後手勝率
- 平均終局手数
- 引き分けや膠着の多さ
- 極端な必勝パターンがないか
- エラーや不自然な挙動が増えていないか
を見て、できるだけ勝率が近づくように調整しました。
特に難しかったのは、
単にCPUを強くするだけではなく、
ゲームそのものが面白くなる方向に調整する必要がある という点です。
強化学習や自己対戦を使えば、AIを強くしていくことはできます。
ただ、AIが強くなった結果、
特定の抜け道や必勝パターンばかりを使うようになると、
人間が遊んだときの面白さは下がってしまいます。
なので、勝率だけではなく、
- ちゃんと悩めるか
- 理不尽すぎないか
- 展開に幅があるか
- 短時間で終わるか
- 何度か遊びたくなるか
も意識しました。
千日手対策として「王の覚醒」を入れた
ボードゲームを作っていると、
同じ局面が繰り返される問題が出てきます。
数位では、同じ局面が3回出現すると千日手扱いになり、
以降は両プレイヤーの王が最大2マスまで動けるようにしています。
これを「王の覚醒」としています。
この仕組みによって、
膠着した局面が少しずつ崩れるようにしました。
終盤で同じ動きが続いてしまっても、
王の移動範囲が広がることで、盤面に変化が生まれやすくなります。
CPU対戦について
現在はCPU対戦メインで用意しています。
CPUレベルは複数段階あります。
- Lv.1 入門
- Lv.2 初級
- Lv.3 中級
- Lv.4 上級
- Lv.5 達人
- Lv.6 鬼神
- Lv.7 限界
先手・後手それぞれを人間またはCPUにできます。
そのため、
- 人間 vs 人間
- 人間 vs CPU
- CPU vs CPU
のような遊び方ができます。
ユーザーとのオンライン対戦はまだなのでタブレットでも使って友だちと遊んでください
CPU同士を戦わせることで、
ルールのバランス確認や評価関数の調整にも使えるようにしています。
作ってみて面白かったところ
実装していて面白かったのは、
ルールが少ないほど、評価が難しくなる という点でした。
将棋のように駒ごとの役割が多いゲームではなく、
数位はかなり少ないルールで成立しています。
その代わり、
- どの行に何個駒があるか
- どの列に何個駒があるか
- 斜めラインの駒数はどうか
- その移動で次の盤面がどう変わるか
- 王の突破ルートがあるか
- 民を減らすべきか、王を狙うべきか
を毎回見る必要があります。
単純な駒の点数だけでは評価しづらく、
位置関係や突破ルートがかなり重要になります。
このあたりは、作る前に想像していたよりも奥が深くなりました。
今後やりたいこと
今後は以下のような改善を考えています。
- スマホでの操作性改善
- CPU思考の強化
- 対戦ログの保存
- ランキング機能
- 盤面共有機能
- チュートリアルの強化
- 自己対戦によるAI改善
- 先手・後手の勝率分析
- 評価関数の比較実験
特にAIについては、
単純に強いCPUを作るだけでなく、
自己対戦のログをもとに、ゲームバランスそのものも改善していきたいです。
たとえばCPU同士を多数対戦させて、
- 先手勝率
- 後手勝率
- 平均終局手数
- 詰み勝ちの数
- 引き分け数
- seedごとの勝敗
などを記録し、
ルールや評価関数の変更が本当に良い方向に働いているかを見ていきたいです。
まとめ
7×7の自作ボードゲーム 「数位 SU-I」 を作りました。
オセロより早く終わるくらいの手軽さを目指しつつ、
盤面の駒数によって移動距離が変わることで、
見た目以上に読み合いが生まれるゲームになりました。
開発では、ルール作成、先手・後手の勝率調整、
強化学習や自己対戦の扱いが特に難しい部分でした。
また、ブラウザ上で遊べるだけでなく、
地面に7×7の盤を描いて石を置くだけでも遊べるような、
アナログな遊びとしての広がりも意識しました。
子どもが遊びながら足し算・引き算に触れられるような、
シンプルだけど考える余地のあるゲームになったと思います。
まだ改善したいところはありますが、
短時間で遊べるボードゲームとして形になってきました。
よければ一度遊んでみてもらえるとうれしいです。
