こないだ自作した戦闘画面に実際の戦闘システムを搭載してみました(冒頭の画像参照)。まだ必要最低限の機能しか作っていませんが、何となく形になってきたので報告しておきます。
戦闘システムの概要
今作っている戦闘システムはだいたい次のような感じになっています。
- 1対1戦闘
- デッキからカード(=スキル)を引き、1ターンに1つのカードを出し合う。
- 相手のHPを先に0にした方の勝ち。
- カードにはダメージ・回復・状態変化などがある。
今はまだ技量的に複雑な戦闘システムを作れないので、なるべくシンプルなシステムにしています。ただ、単なる削り合いになってしまうと面白くないなと思い、カードゲームの要素を入れて駆け引きが生まれるようにしてみました。上の画像では手札(選択肢の部分)が全部同じなので分からないと思いますが、ちゃんとカードのドロー→消費というサイクルも取り入れています。
戦闘システムの流れ
この戦闘システムの処理の流れは次のとおりです。
- 初期化
- デッキのデータを可変DBに転写
- デッキをシャッフル(→可変DBシャッフルコモン)
- UI表示
- 先攻・後攻決定
- 1ターンの処理ループ
- ドロー
- プレイヤーがカード選択
- 敵のAIがカード選択(ユーティリティベースAI)
- スキルなどによる先攻・後攻の変化考慮
- 戦闘実行(カード発動)
- ターン終了時のHP回復・ダメージ処理
- 状態変化の終了判定
- UI消去
大まかな流れはウディタの基本システムの戦闘を参考にしました。この戦闘システムは1対1ですし、複雑な状態異常やカウンターなどもないので比較的簡単な処理で何とかなっています。一つのコモンも長くて300行くらいですからね。
それを考えると基本システムって戦闘だけ見ても結構複雑で、あのレベルのものを自作するとなると時間も手間もかかりそうです。こうしてシステム部分を自分で作ってみると、改めて基本システムのありがたみが分かります。