今日のゴール
- 戦闘の流れを考える
やったこと
戦闘をデザインする
いやはや仕事が忙しかったり戦闘画面に凝りだしたらキリがなくて1ヶ月ほど放置してしまいました
今日からまた頑張ります
ちなみにこの記事ではコードは書きません
- 育成画面作るのにちょっと飽きてきたので戦闘画面に手をつけるよ
- まずどんな戦闘システムにしたいか大雑把に考えるよ
- 個人的に好きな放置ゲームに「僕の魔界を救って!(通称:ぼくまか)」というのがあるよ
- AppStoreに飛びます
- このゲームの特徴はいくつかあるんだけど、僕の好きな特徴として
- 攻略する場所と時間、ユニット、アイテムを選択するだけでよい
- ポチポチするとか連打するのとかは面倒臭くて自分には合わない
- 時間とともにログが進んでいくのを見るのが気持ちいい
- 他対他のバトルで、60体くらい一気になぎ倒すのを見るのがテキストなのに爽快
- 攻略する場所と時間、ユニット、アイテムを選択するだけでよい
- 好きなものと好きなものを合成するというコンセプトで戦闘画面は「僕まか+艦これ」にしようと思うよ
つまりどういうことだってばよ?
戦闘についてはざっっっっっっくりこんなイメージで進めようと決めたよ
- 戦闘のログをTableViewで表示
- 時間経過でログが増えていく
- セルの内容は僕まかリスペクトさせてもらう
- セルタップでログから戦闘アニメーションを生成・再生
- ここを艦これっぽくする
定義的なものを考える
項目 | 定義 |
---|---|
戦闘参加ユニット | 他対他 |
戦闘終了の条件 | どちらかのユニットが0体になる |
戦闘勝利の条件 | 味方ユニットが1体以上 && 敵ユニットが0体になる |
戦闘敗北の条件 | 味方ユニットが0体になる && 敵ユニットが1体以上 |
戦闘のシークエンス | 後述 |
ダメージ計算式 | 後述 |
とりあえずこんなところでいいかな |
戦闘シークエンスを考える
-
多分メジャーではないと思うんだけど、戦闘の流れをシークエンスと呼ぶことにするよ
-
デジコレではこんな感じで戦闘が進むようにしたよ
-
「戦闘ログの生成」の処理では、TableViewに乗っけられるように下記ログを生成することにするよ
- 「誰が(味方ユニットか敵ユニットか)」
- 「誰に(味方ユニットか敵ユニットか)」
- 「どんな攻撃をして」
- 「どの程度ダメージを受けたのか」
- 「全戦闘参加ユニットのステータス」
ダメージ計算式について
- 諸々検索して調べたけど正直どこから手をつけていいのかわからないのでとりあえず一番簡単な「攻撃側の攻撃力 - 防御側の防御力 = ダメージ」を採用するよ
- ちょっと調べるとアルテリオス計算式という名前らしい(多分非公式)
- アルテリオス計算式とは
必要になる実装・改修を考える
必要になるだろうクラスをあらかじめ考えておくよ
多分不足してたり、やっぱりこうしたいみたいなものが出てきそうだけどそこはストレッチに柔軟にやっていくよ
- Enemyクラス
- キャラクタークラスから生成する味方ユニットと敵ユニットを区別するため
- 戦闘ログクラス
- 上記した、誰が誰に何を、のあたりの処理をまとめて保持しておくクラス
- 1ユニットが行動するたびに生成されるイメージ
- 戦闘ログジェネレータークラス
- 戦闘参加する味方ユニットと敵ユニットを引数で渡せば、勝利 or 敗北までの複数の戦闘ログを返してくるクラスのイメージ
- BattleTableViewControllerクラス
- 戦闘ログジェネレーターで返ってきた戦闘ログを基にTableを表示するViewController
- BattleAnimationViewControllerクラス
- 戦闘ログからアニメーションを生成して再生するViewController
- BattleTableViewControllerのセルタップで遷移する
- BattleUnitViewクラス
- BattleAnimationViewControllerにaddSubViewされる感じ
- ユニットの画像とHPなどを表示するクラス
- ユニットが死ぬと非表示になる or ダウン時の画像になる(素材次第や・・・)
なんか一気にクラス増えるな・・・ まあとりあえず手を入れていきましょう
結果
- 戦闘に関する骨組みができた(といいなという希望)
次回
次回は実際にコード書いていこうと思います〜
【Swift】iOSで放置型育成ゲームを作るよ(9) ~戦闘画面を考える その2~
最後に
ご指摘大歓迎です