ブログ

読んで思い出す。忘れるために書く

2体のポケモンを戦わせるミニゲームを書く

Q&A サイトで回答としてコードを書いたので自回答部分の転記

teratail.com

ゴール

次のような出力になるようにコードを書く

例示された出力:

なまえ:ポッポ, たいりょく:100, こうげき:30

なまえ:ピッピ, たいりょく:50, こうげき:20

ポッポのこうげき

ピッピは30のダメージをうけた!

ピッピのこうげき

ポッポは20のダメージをうけた!

ピッピのこうげき

ポッポは20のダメージをうけた!

ポッポのこうげき

ピッピは30のダメージをうけた!

ピッピはやられてしまった!

考え方

想定される前提

  • ポケモンは情報・値として「名前, 体力, 攻撃力」を持つ
  • 2体のポケモンが闘う
  • 2体は交互に攻撃を繰り出す(ターン制である)
  • 攻撃に対しての回避はなく、必ず中たる
  • 攻撃を受けると自分の体力が相手の攻撃力分減少する
  • 受けた攻撃によって自分の体力が0以下になった時にゲーム終了となる

「自己紹介をしたり」「攻撃したり それを受けたり」、「条件成立までループするんだな」くらいに考えておく

あると嬉しい機能群

  • ラベルと値: ポケモンの「名前, 体力, 攻撃力」を保持・管理できる
  • 攻守交代: どちらが攻撃する側で、どちらが攻撃を受ける側か、その順番を順繰りにする管理ができる
  • ゲーム進行状況の出力: 「誰が参加したのか, ステータスは, 誰が攻撃して誰がいくつダメージを受けたか, ゲームは終了したか」を画面に文字列として出力できる

浮かんできた要素の中から、一連の流れとしてまとめられそうなことを書き出しておく

コードを書く

  • ポケモンを管理するクラスを用意する
  • 闘う場(クラス)を用意する

それぞれのクラスに機能群をメソッドとして実装していく

gist.github.com

最後に

  • Q&A サービスは質問の仕方が大事
  • コードを書き上げていく経験と同様、質問を書くのも最初から上手くはいかない
  • 「悪い質問」「良い質問」も(同様に回答も)、蓄積されていくことで全利用者の知識になっていく 参加し続けるのがだいじ
  • 指摘があればそれに対して応じるだけでいい、回答者側は協力するための情報をただ求めているだけで非難はしていない(規約に反しない限り)
  • 修正する機会はいつでもある
  • よほど目に余る違反行為でなければアカウント削除まではされないはず
  • アカウントを自ら削除する前に、すこしやり方を変えて、もう一度質問してみよう