オリジナルのボードゲームをルールからAIまで作る【ルール編】


#はじめに
この記事は

[オリジナルのボードゲームをルールからAIまで作る【概要編】
](http://qiita.com/kurehajime/items/4c5ab00e85550cfb27bb "オリジナルのボードゲームをルールからAIまで作る【概要編】
")

からの続きです。
オセロやチェスや将棋のようなボードゲームを考案し、
それを実際に実装してAIと1人プレイできるとこまで目指します。

Colamone
http://xiidec.appspot.com/colamone/colamone.html

↑
これが筆者の作ったボードゲームです。
AIはそんなに強くはありませんが、とりあえず遊べます。

今回の記事では次の実装編に先立って、ルールの考案について解説します。
まぁゲームのルールを考えるのに知識は必要はないのでわざわざ解説するほどでもないのですが、
「自分がルールを考える時はここを重視しました」という事例紹介として読んでもらえばと思います。

#ここで扱うもの
この記事で扱うボードゲームは、
[二人零和有限確定完全情報ゲーム](http://ja.wikipedia.org/wiki/二人零和有限確定完全情報ゲーム)です。

二人零和有限確定完全情報ゲームとは、

* 二人  
    二人で遊ぶゲームで、
* 零和    
    勝ちか負けか引き分けかの結果のある、
* 有限  
   選択肢が有限の、
* 完全情報  
    お互いのプレイヤーがすべての情報を把握できる、
*  ゲーム  
   ゲームです。

オセロ、チェス、将棋、囲碁などがこれに当てはまります。
麻雀やポーカーやカタンなど運の要素が絡むゲームは別のカテゴリになります。
そういったゲームを期待してこの記事を開いた方はごめんなさい。
でも少し応用すればそういったゲームにも展開できるはずです。たぶん。

#ルールを考える
二人零和有限確定完全情報ゲームのルールを考えるうえで必要な要素は、

1. 盤面の構成
2. 駒(石)を動かす(置く)時の制限
3. 駒(石)を動かした(置いた)時の効果
4. 勝利条件

この４つです(たぶん)。

チェスは
1. 8x8の盤面
2. ○○は○の方向に動かせる(略)
3. 相手の駒のいるマスに動かしたら相手の駒を除外できる
4. キングを取ったら勝ち
というルールですね。

将棋は
1. 9x9の盤面
2. ○○は○の方向に動かせる(略)/持ち駒はどこにでも置ける(例外有り)
3. 相手の駒のいるマスに動かしたら相手の駒を持ち駒にできる
4. 王を取ったら勝ち
というルールですね。

オセロは
1. 8x8の盤面
2. 相手の石を自分の石で挟める場所に置ける
3. 自分の石で相手の石を挟めば相手の石をひっくり返して自分の石にできる
4. 盤面がすべて埋まった時、自分の石の数が相手を上回って入れば勝ち
というルールですね。

ちなみに筆者の作ったColamoneは
1. 6x6の盤面
2. ○○は○の方向に動かせる(略)。点数の低い駒ほど動ける場所が多い。
3. 相手の駒のいるマスに動かしたら相手の駒を除外できる
4. 一番奥のマスまで駒を進め、アガリとなった駒が8点以上になったら勝ち。
というルールです。


大体のゲームがこの4要素で説明できると思います。
つまり、この4要素をプログラムに落とし込めればコンピュータゲーム化することができます。

1. 盤面を管理する機能
2. 有効手を判定する機能
3. 指された手を反映した新たな盤面を作成する機能
4. 勝利条件を判定する機能

これにAIの処理を加えれば1人プレイができるゲームになりますし、
指し手をオンラインでやり取りする処理を加えればネット対戦ゲームになります。

#AIの開発を見据えたルール
「ルール作りにルールはない！ゲーム開発者は全知全能だ！」
と言いたいところですが、そのルールを実装することを考えたら
身の程をわきまえなければなりません。

一般的なボードゲームのAIは、

* 取りうる選択肢をリストアップする
* その選択肢に点数を付け、一番良い手を選ぶ

物凄く大雑把に言えばこんな感じで思考します。
選択肢が多ければ多いほど、AIの思考時間が伸びます。
点数の採点基準が難解なほど、AIの強化は難しくなります。

一説によればチェスは合法手の平均が35通り、将棋は80通りだそうです。
それぞれ5手先まで読んだとしたら

35x35x35x35x35= 52,521,875(約5000万通り)
80x80x80x80x80= 3,276,800,000(約32億通り)

凄まじい手数を評価しなくてはならなくなります。
将棋のプロ棋士は10手以上先を読むそうです。
10手先を全部網羅したら1千京通り。
蓮舫を1000回説得してようやく互角に戦えるレベルです。
もう2位でもいいんじゃないでしょうか。

実際のチェスや将棋のAIは高度に効率化されたアルゴリズムと
積み上げられたノウハウで不要な手を切り捨て読み手を少なくしていますが、
神々の領域に足を踏み入れる勇気がないのなら、いっそ選択肢の少ないゲームにしてしまいましょう。

【作るのが簡単】　　<=========>【作るのが大変】
盤が狭い　　　　　　<--------->盤が広い
駒の動きが小さい　　<--------->駒の動きが大きい
終局までが短い　　　<--------->終局までが長い
戦況を点数付けし易い<--------->戦況を点数付けし辛い

AI作りはこんな感じで難易度が決まります。
RPGのキャラメイクでパラメータを割り振るような感覚で
ゲームの複雑さを調整してしまいましょう。

#抑えたいポイント
ボードゲームを構成する要素、そしてゲームの複雑さとAIの相関関係は分かりました。
では、面白いゲームを作るにはどうすれば良いのでしょうか。

自分には分かりません。こういうのは面白いゲームを実際に作った人にしか語る資格はないですよね。
とは言えそんな事を言ってしまうと身も蓋もないので、
個人的に「このゲーム面白い！」と思えるゲームに共通する要素をリストアップしてみました。
ココらへんを抑えればきっと面白いゲームになるんじゃないでしょうか。

###ジレンマ
あちらを立てればこちらが立たず、こちらを立てればあちらが立てず。
そういうジレンマがなければ対戦ゲームとして楽しめません。
「角を差し出せば相手の金と歩を取れる…しかし…」
というジレンマを乗り越えて「これだー！」と指した手が
吉と出たり凶と出たりするのがボードゲームの面白いところです。

「黙々と最適手を指していたら、いつの間にか勝敗が決まってた」
というゲーム性では、それはもうただのパズルですね。

答え(とプレーヤーが信じられるもの)が複数あって、最後の最後まで
「ほんとにこれで良いかなぁ？」と半信半疑になるくらいが丁度いいんじゃないでしょうか。

ただし注意しなくてはならないのが「どっちも一緒」になってはならないところです。
メロン味のウンコとイチゴ味のウンコでは葛藤は生まれません。
カレー味のウンコとウンコ味のカレーが葛藤を生むのです。

###価値観のズレ
まぁこれもジレンマの一種ですね。
お互いのプレーヤーに価値観のズレがあると対戦はより面白くなります。
「飛車くれてありがとうございまーす(ドヤァ)」
「そちらこそ銀2枚くれてありがとうございまーす(ドヤァ)」
と、双方のプレーヤーがお互い得した気持ちになれるゲームほど
先の読めない展開になるでしょう。

コマの優劣が明らかに決まってるゲームでも、
「銀より金の方が価値が大きい・・・しかしこの王の守りなら今は銀の方が・・・」
という『状況によって発生する価値観のズレ』がゲームをより面白くするんじゃないでしょうか。



###ほどよいカオス
ボードゲームは先が読めてしまうと冷めてしまいます。
ですので先の読めない複雑さが必要です。
しかしあまりにも複雑な展開にし過ぎると、
今度はただの運ゲーになってしまいます。
考えすぎて1ミリも動けない膠着状態にもなりかねません。

プレーヤーの戦略がゲームの展開にある程度意図通り反映されつつ、
それが必ずしも意図通りになるとは限らない、そういうバランスを目指したいものです。

そこで、
####目の前にぶら下がるニンジン
です。

短期的には明らかにプラスになる明確な分かりやすいご褒美です。
オセロで言えば自分の色を増やすこと、将棋で言えば持ち駒を増やすこと。
そういった要素があるとプレーヤーは決断しやすくなり、
「してやったぜ！」とひとときの達成感を得ることができます。

将棋はそこら辺が上手く出来ていて、初心者の目先の駒得狙いと上級者の長期的な戦略で
価値観のズレが発生し、実力差のあるプレーヤーがお互い気持ちよくプレイできるようになっています。

別に悪いわけじゃないのですが、囲碁のように優劣判断が複雑なゲームは
「ルールは分かるが何をすれば良いのか分からない。自分の打った手が得なのか損なのかも分からない」
と、初心者が戸惑いがちです。それだけ奥が深いゲームでもあるので一長一短ではありますが。

###逆転要素
これも重要ですね。
どんなに面白いゲームでも、勝敗が決まったらそこから先はクソゲーです。
それを回避するには、

* どんなに劣勢でも相手を瞬殺するチャンスを残す。
* 後半になるほどパワーがインフレする。

こういった工夫が必要になります。
前者はチェスや将棋で、どんなにコマを取られても相手の王を詰せたら勝ち。
後者はオセロで、後半になるほどひっくり返る石の数が増える。
これもまた、逆転要素が強すぎると「前半の頑張りは意味ないじゃん！」となるので難しいところです。


###終局への引力
これ大事これ大事。
かならず決着のつくゲームでないと遊んでてしんどいですよね。

オセロや囲碁ならば盤が埋まることで終局が近づき、
チェスならばコマが少なくなることで終わりが見えてきます。
ここで重要なのは始まりから終わりへと一方向に力が働くこと。
それによって自然とゲームが終わります。

例外は将棋でしょうか。このゲームの決着がつくのは不思議ですね。
ルールだけ見ると取ったり取られたりで永遠にゲームが続きそうです。
拮抗していても「相手のコマが減ると自分のコマが増える」という優勢が優勢を呼ぶスパイラルで
ちょっとした差から加速度的に終局へと向かうようになっているのがポイントかもしれません。
それでいて劣勢側にもチャンスが残っているのは、本当に神がかったゲームバランスですね。




#まとめ

二人零和有限確定完全情報ゲームは、

1. 盤面の構成
2. 駒(石)を動かす(置く)時の制限
3. 駒(石)を動かした(置いた)時の効果
4. 勝利条件

の4要素でルールが構成されていて、
選択肢が多ければ多いほどゲームが複雑になりAIの実装が大変になります。

ボードゲームにはジレンマ、価値観のズレ、ほどよいカオス、逆転要素、終盤への引力
・・・があると良いと筆者は考えていますが、他にもポイントがあったら皆さん教えてください。
二人零和有限確定完全情報ゲームだけでなく他のジャンルにも視野を広げれば
「読み合い」「交渉」「スリル」「カタルシス」なども重要そうですね。あと「世界観」も。

という訳で、次回からは[【実装編】](http://qiita.com/kurehajime/items/5f5028948e417950f680)に進みます。
ようやくJavascript/HTMLを使います。
~~どの言語使いでもある程度分かるように抽象的な説明をしますので、ご安心ください。~~　←追記：力が及びませんでした。