ポケモンバトル2[2.0ver]
こんにちはkazutoです。今回から本格的にプログラムを組んでいきます。
実装内容の確認
まず初めに、実装のアウトラインを把握しましょう。仕様書は下記です。
上記のチャート図が今回、実装していくアウトラインになります。もし実装中で
- コードの意味がわからない
- 実装の全体像が掴めない
- 行き詰まった場合
などの問題を抱えてしまった場合は、再度チャート図を見て、実装のアウトラインを把握しましょう
。全体像が掴めないまま実装してしまうと後から大変になります。
まず初めに、伝説のポケモンを定義をしていきます。なおLengendary_pokemonクラスに処理を実装していきます。
Legendary_pokemonクラス
Legendary_pokemonクラスで、伝説のポケモンを3匹定義し、3匹のうち1匹を選び、メニュー欄に表示させ、バトルの準備を整えていきます。
手順として
- インスタンスを生成、initializeメソッドを用いてインスタンス変数を初期化
- 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]」は、シリーズになっているので、下記のリンクから参照してください。