『ゲーム制作講座 第三回』

第三回 思考ルーチンと乱数と性格

はじめに
 先日、新しいゲームをリリースしました。文字ばっかりで、グラフィックが皆無に等しいゲームです。私は「シンプル・イズ・ベスト(*1)」をモットーにゲームを開発しているので、遊んだ人はかなり地味な印象を受けるでしょう。わかりやすさを重視し、操作も簡単にしています。それにしても、いまどきのゲームは技術力が高いですね。絵もきれいで、いろんな操作が可能で、音楽もかっこよく、爽快感がある、そんなゲームを作りたいと思いつつも、そういった「いまどきのゲーム」とは真逆の方向に進んでゲームを製作しています。絵や音楽などの演出を取り払い、ゲームそのもので面白さを表現できたら最高だ、と思うのですが、そういった地味なゲームは、いまどき誰も遊ばないどころか、見向きもされないかもしれません。
 私はシンプルなものが好きです。今の操作が複雑で難易度の高いシューティングゲームよりも、昔の操作がシンプルな(例えばショット(*2)だけ、あるいはショットとボム(*3)だけ)シューティングゲームのほうが好きです。そう思う私の考えは古いのかもしれません。
 さて、そんな私の講座も第三回を迎えました。ゲーム製作に役立つ講座を書いていますが、私の拙い文章能力でどれだけ伝わるのか、未だに不安です。過去二回はツールや製作の手順について紹介しましたが、今回はゲーム製作の内部に入っていこうと思います。

思考ルーチンについて
 思考ルーチンとは、コンピュータがある時点の状況からどういった方法を用いるかを検討するプログラムです。顕著な例が将棋・囲碁・麻雀・カードゲームといったテーブルゲームです。思考ルーチンをつけていると、コンピュータが相手してくれます。質の高い思考ルーチンだと、まるで人間と対戦しているような錯覚をもたらしてくれます。
 思考ルーチンがあるのは何もテーブルゲームだけではありません。「パックマン」(ナムコ)に代表されるドットイートタイプ(*4)のゲームでは、敵キャラが分かれ道に来たとき、「どの道を進めば効率がいいか」を判断させ、最適なルートを進むように思考ルーチンが組まれています。野球ゲームでは、どの球種を投げるか、またどの球種を狙って打つかを判断させます。シミュレーションゲームや対戦格闘ゲームなどでも、その時その時の状況を判断して、次に打つ手を検討するようになっています。
 ブロック崩しやパズルゲーム、音楽ゲーム、アドベンチャーゲームといった、思考ルーチンの必要がないゲームもありますが、思考ルーチンがしっかりしているゲームとそうでないゲームでは、質の差はかなりのものになります。思考ルーチンはゲームを作るうえで欠かせない要素なのです。

テーブルゲームにおける思考ルーチン
 思考ルーチンはゲームを作るうえで欠かせない要素なのですが、作るのは大変です。ある状況を完全に読みきって最善の手を出すというのはなかなか難しいものがあり、仮にできたとしても、実行に時間がかかってしまうこともあります。例えばリバーシで最初の状態から最後までの60手の手を読みきって最善の手を出そうとすれば、現在のパソコンの能力では350年以上かかってしまうという試算もあります。
 最も簡単な思考ルーチンは、でたらめにやることです。さいころを振って決めるかのごとく、乱数と必要最低限の判断(リバーシ(*5)では相手のコマが挟めるかどうか)だけを用いて次の手を決めるものです。これでも一応対戦はできるのですが、あまりにも弱すぎて話になりません。「思考」も何にも行わずただ打っているコンピュータ(厳密に言えばコンピュータにそうさせているプログラム)は相手にならず、思考ルーチンとはいえません。
 思考ルーチンを作るときは、「自分だったらどうするか」を考えて、それをプログラミングするとよいでしょう。リバーシなら「この場所に置けばたくさんの相手のコマをひっくり返せるが、次で隅を取られるからここには打たない」といった感じです。自分で考えていることを日本語で表し、さらにそれをプログラム言語に置き換えるという作業は、ゲームを製作する場合には何度も何度も繰り返しているものですが、思考ルーチンを作成するときはこの作業が大変難しく感じます。何気なく(とはいっても脳内で瞬時に最善であろう手を考えているのですが)行っていることを言葉で表現することはかくも難しいものなのか、と実感させられることでしょう。将棋や囲碁などのプロ棋士同士の対局では、ときに30分以上も考えて次の手を打つこともあります。それでもある程度候補を絞って(数手読んでこれはダメだなと思う手は対象外でしょう)から、残った手を一つずつ検討・評価し、最善の一手を打つのですから、打つことができる可能性がある手をすべて拾って検討してしまう思考ルーチンでは人間以上に時間がかかることは予想の範疇内です。これは人間がコンピュータに勝る点といえるでしょう。
 将棋やリバーシなどのテーブルゲームの思考ルーチンを作るのはなかなか大変です。逆に言えば強い思考ルーチンができれば、そのゲームはかなり質が高いものとなります。

簡易かつ効果的な思考ルーチン
 さて、先にあげましたとおり、思考ルーチンが必要なのはテーブルゲームだけではなく、いろんなジャンルのゲームで必要となります。他のジャンルの思考ルーチンはテーブルゲームほど複雑ではないと思います。
 例えば、敵と味方が三体ずつで、どの敵に攻撃すればよいかを考える思考ルーチンを作るとします。考える要素は攻撃力・防御力・体力の三つとし、特徴は次のとおりとします。
 敵A……攻撃力が高いが防御力が低く、体力が高い
 敵B……攻撃力が低いが防御力が高く、体力は中ほど
 敵C……攻撃力・防御力とも中ほどだが、体力が少ない
 さて、読者の皆様ならどの敵に攻撃を仕掛けるでしょうか。これは考えによって答えが変わるでしょう。「攻撃力の高い敵Aを残すと、あとあと大きな被害が出る。しかし、防御力が低いから、最初に倒せばその後の展開が楽になるだろう」と考えた方は敵Aを、「体力の少ない敵Cを最初に倒せば、相手からの攻撃は二回で済む。回数の上では有利になるだろう」と考えた方は敵Cを最初に狙うでしょう。いずれにしても攻撃力が低い敵Bは最後に倒すでしょう。
 このようなゲームの思考ルーチンを作るとき、どの要素に注目するかを決めれば、割と簡単に作ることができます。攻撃力の高い順に攻めるとすればA→C→B、防御力の低い順に攻めるとしてもA→C→B、体力の少ない順に攻めるとすればC→B→Aとなります。または三つすべての要素を調べて総合評価で判断するという手もあります(総合ではAとCがほぼ同じ評価になりますので、乱数で対象を決めてもよいでしょう。適度な乱数の使用は、柔軟さをもたらしてくれます)。
 順位で対象を決めるというのは思考ルーチンを作る上で結構有効な手段です。どの要素に注目するかは思考ルーチンの作り手次第です。勿論いろんなアプローチを行って割り出した答えはより現実的となります。「最小の費用で最大の効用」は経済学の話ですが、「どの順番で戦えばこちらのダメージが少なくて済むか」、この考えは思考ルーチンにもそのまま当てはまるのです。

性格を作る乱数
 先に「乱数だけを使って行動を決めるのは最弱」という旨の文章を書きましたが、乱数もルールを決めて使えば相手となるコンピュータに性格を与えることができます。
 じゃんけんを例にして考えてみます。じゃんけんで出せる手はグー・チョキ・パーの三通りです。ただ乱数で決めた場合、すべての手は三分の一の割合で現れます。この場合は運の要素が強くなります。そこで手を出す割合を変えてみます。例えば、グー:チョキ:パー=70%:20%:10%とします。ルールを決めないときと同様、乱数を発生させますが、今度はこのルールに沿った手を出すようにします。日本語で書きますが、次のような記述を意味するプログラムを書くことで実現できます。
・0~99までの適当な数を決める。
・その数が0~69だったらグーを、70~89だったらチョキを、90~99だったらパーを出す。
 このようなルールを決めた場合、コンピュータは70%という高い割合でグーを出すようになります。遊ぶ側はそれに対し、パーを出せば70%の割合で勝てるということになります。これはじゃんけんにおけるコンピュータに与える性格の一つとなります。
 もう一つ考えてみます。あるゲームで攻撃するか防御するかをコンピュータに決定させるとします。それまでの経過を参考にして攻撃か防御かを決める思考ルーチンを作っても構いませんが、乱数とたった一つの数を使えば、簡単に表現することができます。
 ある数をxとします。xは1~100までの数のいずれかです。次に0~99までの乱数を発生させます。そしてこの乱数とxを比べて、xのほうが大きかったら攻撃を、そうでなければ防御を選択させるのです。つまりこのxは攻撃を決定する割合(単位は%)なのです。xが大きければ好戦的となり、小さければ守備的となります。このようにたった一つの数でも性格付けになるのです。
 そして攻撃のときは攻撃対象を決めますが、このときに先に述べた思考ルーチンを組み合わせれば、より思考ルーチンとしての質は向上します。この二つのアプローチだけでも、コンピュータが考えて行動を起こしているような印象を遊ぶ側に与えることができます。もっとアプローチを増やせば、より賢い思考ルーチンを持つゲームに仕上がることでしょう。

終わりに
 今回は思考ルーチンについて書きました。思考ルーチンと聞くと何だか難しい印象を受けますが、ここに書いた方法を用いることによって、完全ではないがそれなりの力量を持つ思考ルーチンを作成することができると思います。
 「自分だったらどう行動するか」を元に作成した思考ルーチンは作り手自身の考えを表現したものとなります。ということはプログラムを通じて、遊ぶ側は作り手と対戦していることになるのです。それもまた楽しいことではないかと思いますがいかがでしょうか。
 実は私はこの間まで、思考ルーチンの作成を避けていました。理由は作るのが大変そうだと感じたからで、思考ルーチンを作るにしても、簡単なものしか作りませんでした。しかし、対戦型の推理ゲームで初めて思考ルーチンを作ってみました。そしたら思考ルーチンを作る楽しさを知ることができたのです。強さは弱くもなく強くもない状態でしたが、それがかえってまるで人間と対戦しているような感じを出していたのです。
 思考ルーチンを作ること、それすなわち新たな命を作ること、と言えば大袈裟かもしれませんが、そんな印象をもたらしてくれるのです。

(注釈)
*1:Simple is Best.「シンプルこそ最良なり」。これはすでに休刊しているパソコン雑誌「マイコンBASICマガジン」(電波新聞社)でよく使われていた言葉です。筆者もこの雑誌を愛読しており、この言葉を自分の座右の銘としています。「シンプル」と「単純」は似ているようで、何だかニュアンスが違う気がします。
*2:シューティングゲームでは通常攻撃にあたります。威力は低いですが、無限に使用でき、連射できるタイプもあります。
*3:ある一定範囲の敵を対象にした攻撃方法。大きなダメージを与えることができますが、使用回数が限られているなどの制限があります。
*4:モンスターをかわしながら迷路に置かれたドット(点)をすべて食べればクリアというタイプのアクションゲームのことを「ドットイートタイプ」と言います。パックマン(ナムコ)やヘッドオン(セガ)などがこれにあたります。
*5:敵のコマをはさんで自分のコマにするボートゲームはリバーシと言います。オセロと思った方もいるでしょうが、オセロは登録商標(つまり商品名)なんですよ。

| トラックバック (0) | コメント (0)

この作品をはてなブックマークに追加はてなブックマークで感想を書く