🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

1205閲覧

Rubyで次の仕様を満たすPokemonクラスを持つプログラムを作成して頂きたいです。丸投げ質問で申し訳ございません。完成させて頂いたソースコードを教えて頂きたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

2クリップ

投稿2017/10/30 02:48

編集2017/10/30 02:55

###前提・実現したいこと
Rubyで次の仕様を満たすPokemonクラスを持つプログラムを作成して頂きたいです。
完成させて頂いたソースコードを教えて頂きたいです。
###内容
名前、体力、攻撃力(@name,@hp,@power)をインスタンス変数として持つ
@name,@hp,@powerに対しアクセスメソッドを持つ
ポケモンのステータスで返す to_s メソッドを持つ
敵を攻撃するメソッド attack(pokemon)を持つ
ダメージを受けるときに呼ばれるメソッドgain_damage(amount)を持つ。

###動作例
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

おもしろそうなので書いてみました

ただ、質問の内容が丸投げであるとの指摘があるようなので、好き勝手書きました

何か参考になれば幸いです

ruby

1# 2体のポケモンを戦わせる 2class PokemonBattle 3 def initialize(pokemon_a, pokemon_b) 4 @turn_count = 0 5 @players = [pokemon_a, pokemon_b] 6 end 7 8 def game_start! 9 print_initial_situation 10 loop do 11 battle! 12 print_battle_situation 13 turn_phaze! 14 break if game_over? 15 end 16 end 17 18 private 19 20 # 剰余で順繰りに順番を回す 21 def turn_phaze! 22 @turn_count += 1 23 24 @players.reverse! if @players.size.modulo(@turn_count).even? 25 end 26 27 # たたかう 28 def battle! 29 attacker, defender = @players # 攻撃側と防御側を取り出す 30 defender.taken_damage!(attacker.attack_power) 31 end 32 33 def print_initial_situation 34 puts @players.map(&:own_status) 35 end 36 37 # 実際に戦った状況を報告する 38 def print_battle_situation 39 attacker, defender = @players 40 puts [ 41 "#{attacker.name}のこうげき", 42 "#{defender.name}#{attacker.attack_power}のダメージをうけた!", 43 ("#{defender.name}はやられてしまった!" if defender.defeated?) 44 ] 45 end 46 47 def game_over? 48 @players.find(&:defeated?) # やられたひとが居ないか探す 49 end 50end 51 52# 名前, 体力, 攻撃力パラメータを持つポケモンを生成する 53class Pokemon 54 attr_reader :name, :vitality, :attack_power 55 56 # 引数をハッシュ形式で受けて適切な変数に割り当て 57 def initialize(**opts) 58 @name = opts[:name] 59 @vitality = opts[:vitality] 60 @attack_power = opts[:attack_power] 61 end 62 63 def own_status 64 "なまえ:#{@name}, たいりょく:#{@vitality}, こうげき:#{@attack_power}" 65 end 66 67 def defeated? 68 @vitality <= 0 69 end 70 71 def taken_damage!(attack_power) 72 @vitality -= attack_power 73 end 74end 75 76pidgey = Pokemon.new(name: 'ポッポ', vitality: 100, attack_power: 30) 77clefairy = Pokemon.new(name: 'ピッピ', vitality: 50, attack_power: 20) 78 79# 実際に死なないように複製体で戦わせる 80battle = PokemonBattle.new(pidgey.clone, clefairy.clone) 81battle.game_start! 82# => 83# なまえ:ポッポ, たいりょく:100, こうげき:30 84# なまえ:ピッピ, たいりょく:50, こうげき:20 85# ポッポのこうげき 86# ピッピは30のダメージをうけた! 87# 88# ピッピのこうげき 89# ポッポは20のダメージをうけた! 90# 91# ポッポのこうげき 92# ピッピは30のダメージをうけた! 93# ピッピはやられてしまった!

投稿2017/10/30 07:14

編集2017/11/16 20:13
gouf

総合スコア2321

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/30 16:40 編集

申し訳ございませんでした。ありがとうございます。以後気をつけます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問