ポケモンバトル2[2.0ver]

Ruby

こんにちはkazutoです。今回から本格的にプログラムを組んでいきます。

実装内容の確認

まず初めに、実装のアウトラインを把握しましょう。仕様書は下記です。

上記のチャート図が今回、実装していくアウトラインになります。もし実装中で

  • コードの意味がわからない
  • 実装の全体像が掴めない
  • 行き詰まった場合

などの問題を抱えてしまった場合は、再度チャート図を見て、実装のアウトラインを把握しましょう。全体像が掴めないまま実装してしまうと後から大変になります。

まず初めに、伝説のポケモンを定義をしていきます。なおLengendary_pokemonクラスに処理を実装していきます。

Legendary_pokemonクラス

Legendary_pokemonクラスで、伝説のポケモンを3匹定義し、3匹のうち1匹を選び、メニュー欄に表示させ、バトルの準備を整えていきます。

手順として

  1. インスタンスを生成、initializeメソッドを用いてインスタンス変数を初期化
  2. pokemon.select_pokemonメソッドを作成をし、戦うポケモンを選ぶ

となります。

1.インスタンスを生成、initializeメソッドを用いてインスタンス変数を初期化

class Legendary_pokemon
  def initialize
    @battle_pokemon=[]
    legendary_pokemon=
      {name:"ルギア",hp:350,techniques:["ハイドロポンプ","サイコキネシス","はかいこうせん","つばめ返し"]},
      {name:"ギラティナ",hp:300,techniques:["だましうち","かみくだく","あくのはどう","シャドーダイブ"]}, 
      {name:"アルセウス",hp:400,techniques:["はかいこうせん","ばかちから","はかいこうせん","のしかかる"]}
    @battle_pokemon<<legendary_pokemon
  end
end
legendary_pokemon=Legendary_pokemon.new

まずは、インスタンスを生成をし、Legendary_pokemonクラスを実装する準備を整えます。initializeメソッドを用いて初期化しているインスタンス変数は、@battle_pokemonという空の配列を定義しています。

その後、変数legendary_pokemonを定義をして、伝説のポケモン3匹をハッシュで管理しています。

 @battle_pokemon<<legendary_pokemon

最終的に、インスタンス変数@battle_pokemonの中に伝説のポケモンの情報が入ったローカル変数legendary_pokemonを格納しています。

なお、Legendary_pokemonクラスの最終的の目標は、メニュー欄に選択した伝説のポケモンの情報を表示させる事です。なので、Legendary_pokemonクラスは、メニュー欄に情報を渡せたらOKですので、メソッドの再帰性については考えなくとも良いです。

続いて、pokemon.select_pokemonメソッドを作成をし、戦うポケモンを選ぶ処理を実装していきましょう。

2.pokemon.select_pokemonメソッドを作成をし、戦うポケモンを選ぶ

class Legendary_pokemon
 ...省略
  def select_pokemon
    puts "どのポケモンとたたかう❓"
    @battle_pokemon.each{|pokemon|
        pokemon.each_with_index{
        |poke,key|puts"#{key+1}#{poke[:name]}"
      }
    }
    input =gets.to_i-1
    @battle_pokemon.select{|pokemon| return pokemon[input]}
  end
end
pokemon=legendary_pokemon.select_pokemon

上記がselect_pokemonメソッドの実装内容になります。

 puts "どのポケモンとたたかう❓"
    @battle_pokemon.each{|pokemon|
        pokemon.each_with_index{
        |poke,key|puts"#{key+1}#{poke[:name]}"
      }
    }

each_with_indexを用いて、配列ないのポケモンの情報+添字をふっています。添字を付ける理由は、ユーザに直感的に操作をしてもらうためです。 また、配列のインデックス番号と紐付けて、配列の操作を行いやすくするためでもあります。

input =gets.to_i-1
@battle_pokemon.select{|pokemon| return pokemon[input]}

ユーザが入力した番号をローカル変数inputに格納をし、selectメソッドを用いて、ユーザが入力した番号と等しい、インデックス番号を持っている、ポケモンの情報を配列から取り出しています。

pokemon=legendary_pokemon.select_pokemon

select_pokemonメソッドの返り値をローカル変数pokemonに格納して、メニュー欄にポケモンの情報を渡す準備をしています。

以上で、Legendary_pokemonクラスの実装は終了です。

最後に仮のメニュー欄を作成します。

メニュー欄(仮)

最後に仮のメニュー欄を作成していきます。メニュー欄は4つのコマンドから成り立っています。

  • たたかう
  • ポケモン
  • バッグ
  • 逃げる

なお今回、上記のコマンドについては、実装しません。まずは、伝説のポケモンの情報をメニュー欄に表示させてみましょう。

#伝説のポケモンを定義
legendary_pokemon=Legendary_pokemon.new
pokemon=legendary_pokemon.select_pokemon
puts "やせい#{pokemon[:name]}が現れた"
#メニュー欄
    puts "HP:#{pokemon[:hp]}#{pokemon[:name]}"
     puts " #手持ちのポケモンのHPと名前を表示
      puts"[1]たたかう"
      puts"[2]バッグ"
      puts"[3]ポケモン"
      puts"[4]逃げる"
      input=gets.to_i
      case input
        when 1
      #たたかう処理
     when 2
      #アイテムを使う
        when 3
      #ポケモンを入れ替える
        when 4
      #逃げる
   end

現在のメニュー欄の状態は、伝説のポケモンの

  • HP
  • ポケモンの名前

が表示されているだけになります。これから徐々に機能を追加をして最終的には、「ポケモンゲーム」に近い挙動をする形にしていきます。

今回の実装について以上になります。まだまだ先が見えないですが引き続き、実装していきましょう。

まとめ:ポケモンバトル2[2.0ver]

今回は、Legendary_pokemonクラスを実装していきました。

機能として

  • ポケモンの情報を配列で管理
  • 3匹のうち1匹たたかうポケモンを選ぶ

となります。

今回は、特に難しい処理のプログラムを組んでいませんが、実装を進めていくにつれて複雑になってくると思いますが、実装のアウトラインを整えて、パズルの様に組み立て行けばどうにかなります。

なので、実装で行き詰まった場合は、仕様書を確認をして実装していきましょう。

以上、kazutoでした。

関連記事

なお、「ポケモンバトル[2.0ver]」は、シリーズになっているので、下記のリンクから参照してください。