
ゲーム開発の道標(企画から完成まで)その7・ゲームの花形「合戦画面」作成
こんにちは「つけらっとゲームス」プログラム担当のとちです。
この記事は何もないゼロの状態から完成までをドキュメンタリー風に手順に沿ってまとめたモノです。
※この記事は「ゲーム開発の道標(企画から完成まで)」の「その7」に当たります。前回までの記事を読んでいない方は「まとめ」⇩からどうぞ!
前回の記事では「軍備画面」「編成画面」の画面デザインやデータの連結についてお話しました。今回は「合戦画面」を作るお話と対戦相手(思考ルーチン)についてお話したいと思います。
前提条件
この記事の前提条件として「津軽為信統一記」ではUnityで作られています。
また、作る人によって「作り方」は違います。この記事ではあくまでわたしの作り方です。もちろん真似しても参考にしても構いません。
でも、プログラムをいじっているうちに自分なりのやり方が見つかるもんですし、自分なりの方法で作る方がオススメですよー。
さて「津軽為信統一記」は合戦がカードバトルとなっているストラテジーゲームです。今回はこのゲームの花形「合戦」についてです!
しかし、敵の思考ルーチンなんてゲームでは人様に見せない(見えない)部分なので図表で解説するのは困難、今回は文章多めです。ご了承ください。
合戦画面
まずはスクリーンショットと画面設計書を貼り付けます。前回までの画面設計書と違いますよね? これ、実は専門学校でシステム設計の講義をしているときに例として提示したモノを流用しました。


ボタン類の処理については前々回の記事に詳しくあるので、そちらをご覧ください。簡単に言えばボタンをタップすると対応したリアクションを返す仕組みを実装しています。
札についてはスワイプ(画面に指を置いて任意の方向に滑らせる動作)によって押し上げたり、引っ張ることで「使用」や「捨てる」といった動作をします。
前回、前々回でこういった画面内の動作を説明しましたが、前回までの処理はあくまでプレイヤーの都合で完結する処理です。今回は合戦ということで対戦相手の都合もあります。
対戦相手が人間であれば何をするか勝手に考えてくれますがそれをプログラムにやってもらうのが今回の本題です。
人間だったらどう考える?
「津軽為信統一記」の合戦ルールにはいくつかの重要な要素があります。
おさらいすると以下のような感じでしょうか、
手番がきたら手札を捨て手札を入れ替えるか、攻撃するか選択する。
両軍の距離は遠距離/近距離の2種類ある。
攻撃属性が5種類あり、属性によって遠近得意な距離が異なる。
攻撃属性が同一であれば連撃値の枚数まで同時に札を出せる。
遠距離なら斉射値、近距離なら突撃値の合計を攻撃力とする。
攻撃力が高い側が攻撃成功(迎撃成功)となる。
策略札は攻撃側が1度だけ使用できるが札によっては複数使用できる。
ルールに則り、その中でも効果的な手を打ちましょう。これは思考ルーチンであっても人間であっても同じですよね。
次に思考ルーチン概要図を貼ります。
次項では左端/中央/右端の処理に分けて説明します。
(※)については後述しますので、いまは普通に読み進めてくださいね。

左端の列の処理
思考ルーチンの最初に手札の内容確認をします。
手札の攻撃力を算出しておきます。遠近距離どちらも計算しておくと良いでしょう。
この時点で算出した攻撃力が低ければ無理に攻撃しない方がいいでしょう。攻撃力が低い(※1)ということは手札に多くの不要な札があるからだと思います。だったら手札を捨てましょう。
もし手札を捨てるなら、今度は捨てる札を選ばないといけません。
戦功点札は手札には不要ですので捨てる候補に入ります。いまの両軍の距離を考慮し苦手な攻撃札は捨てると良いでしょう(※2)
中央の列の処理
距離によって効果のない策略札があるのでチェックは必要ですが使用可能な札があれば基本的に使用した方が強いです。
また策略札には「もう一度策略札を使用できる」という札もあります。であれば、先に「もう一度策略札を使用できる」札を使った方が良いでしょう。
右端の列の処理
もっとも攻撃力が高くなる組み合わせで札を出します。
その後でプレイヤー側のリアクションを待ち、プレイヤーと思考ルーチンが考えた手の攻撃力を比較します。攻撃力が高い方が攻撃(迎撃)成功となります。
思考ルーチン側の攻撃(迎撃)が成功した場合、引き続き戦功札を取得します。基本的には純粋に点数の高い札を取得するべきですが、戦況次第では点数が低くても合戦が終わる戦功札を引くのもまた戦術となります。こういったチェックを行い戦功札を取得させます。
対戦相手によって個性を出す
「津軽為信統一記」は津軽統一を目指すストラテジーゲームです。幾つにも分かれた津軽のエリアをそれぞれ自分の領地にしていくのが目的です。
最初はプレイヤーのデッキも弱く、領地を広げ税収を増やし様々な札を揃えることで強くなってきます。
つまり何度も合戦を繰り返します。
となると、対戦相手が常に同じだと飽きてきますよね……
そこで対戦相手によって個性を出す必要があります。

そこで内部DB(変数配列)の設定次第で戦い方が変わる様な仕組みを作りました。

これでようやく前項の「攻撃力の高さ」(※1)と「札を捨てる」(※2)の解説ができます。
敵思考AI-DBの03~06番目の項目をご覧ください。
遠距離(近距離)時に当該攻撃力が設定されている値以上だと攻撃に踏み切るようになっています。これが(※1)の判断に利用されます。
設定されている値以上だと攻撃力が高いと判断できるわけです。
また(※2)の札を捨てる基準もここで設定されています。
項目番号で言えば10~25番目にあたります。
個性を出す(1)捨てたくない札
23~25番目の「捨てたくない札」に注目してください。
鉄砲や長弓で遠距離が得意な札の多いデッキなら鉄砲、長弓を捨てたくないし騎馬属性を持つ武将札がデッキ内にあれば騎馬系の札は捨てたくないでしょう。
個性を出す(2)気まぐれ発生確率
07番目の項目は、攻撃または迎撃時に2番目の攻撃属性を選択します。わかりやすく言うと強制的にミスさせる確率を設定しています。当然ミスしない方が強いです。
個性を出す(3)距離切替判断
08番の項目次第で距離切替の判断をします。
設定で「手札だけでの判断」「手山札での判断」「手山捨札での判断」「常に近距離にする」「常に遠距離にする」を選択できます。
デッキ全体を見て判断する方が強いと言えますが、デッキが明らかな近距離向けであれば迷わず「常に近距離にする」の方が効率がよい場合もありますね。
実はもっと強くできる
敵思考AI-DBの22番目の項目「プレイヤーの攻撃力の予測」というものがあります。プレイヤーが出した札から攻撃力を予測する設定ですが、それほど精度は高くありません。というか高くしていません。
プレイヤーが攻撃してくる際の攻撃力を記憶させることで、さっき出された攻撃力以上のモノを出せるなら敵側は積極的に攻撃することができますし、プレイヤーが攻撃する度に、プレイヤーの癖やデッキの最大攻撃力を予測しやすくなります。その記憶をさせていないので精度が低いのです。
もっと強くすることはできるのですが、遊ぶ人によってはこれ以上強いと厳しいという声も届いており、現在の思考ルーチンの強さで止めています。
もうちょっと続く
敵の思考ルーチン作成の流れ、いかがでしょうか?
人間がカードゲームをする時と同じように順序良く、理論的に判断させることで思考ルーチンは作られています。
一気に作ろうとすると難しいのですが、自分がカードゲームする際の考え方を手書きでも図でもいいので書いてみると整理しやすくなると思いますよ。
さて、ゲームも形になってきました。
もうちょっと頑張れば完成です。この連載記事も完結まであと少し。もう少しお付き合いください!
そんな「津軽為信統一記」が気になった方はコチラからどうぞ!
iPhone・iPadの方はコチラ(↓)
Androidの方はコチラ(↓)
いいなと思ったら応援しよう!
