質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.75%

  • Ruby

    7035questions

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

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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 487
退会済みユーザー

退会済みユーザー

前提・実現したいこと

Rubyで次の仕様を満たすPokemonクラスを持つプログラムを作成して頂きたいです。
完成させて頂いたソースコードを教えて頂きたいです。

内容

名前、体力、攻撃力(@name,@hp,@power)をインスタンス変数として持つ
@name,@hp,@powerに対しアクセスメソッドを持つ
ポケモンのステータスで返す to_s メソッドを持つ
敵を攻撃するメソッド attack(pokemon)を持つ
ダメージを受けるときに呼ばれるメソッドgain_damage(amount)を持つ。

動作例

![イメージ説明](ae560e27e22e9329218a6664bec2aa0d.png)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2017/10/30 13:08

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

  • fiveHundred

    2017/10/30 14:48

    Rubyは詳しくないのですが一言だけ。このサイトは課題や仕事を無償でやってもらえる場ではありません。自分で実装してみて、そこで分からないことがあれば聞く、というのがいいと思います。https://teratail.com/help/question-tipsも参考にしてください。

    キャンセル

回答 1

checkベストアンサー

+2

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

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

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

# 2体のポケモンを戦わせる
class PokemonBattle
  def initialize(pokemon_a, pokemon_b)
    @turn_count = 0
    @players = [pokemon_a, pokemon_b]
  end

  def game_start!
    print_initial_situation
    loop do
      battle!
      print_battle_situation
      turn_phaze!
      break if game_over?
    end
  end

  private

  # 剰余で順繰りに順番を回す
  def turn_phaze!
    @turn_count += 1

    @players.reverse! if @players.size.modulo(@turn_count).even?
  end

  # たたかう
  def battle!
    attacker, defender = @players # 攻撃側と防御側を取り出す
    defender.taken_damage!(attacker.attack_power)
  end

  def print_initial_situation
    puts @players.map(&:own_status)
  end

  # 実際に戦った状況を報告する
  def print_battle_situation
    attacker, defender = @players
    puts [
      "#{attacker.name}のこうげき",
      "#{defender.name}#{attacker.attack_power}のダメージをうけた!",
      ("#{defender.name}はやられてしまった!" if defender.defeated?)
    ]
  end

  def game_over?
    @players.find(&:defeated?) # やられたひとが居ないか探す
  end
end

# 名前, 体力, 攻撃力パラメータを持つポケモンを生成する
class Pokemon
  attr_reader :name, :vitality, :attack_power

  # 引数をハッシュ形式で受けて適切な変数に割り当て
  def initialize(**opts)
    @name = opts[:name]
    @vitality = opts[:vitality]
    @attack_power = opts[:attack_power]
  end

  def own_status
    "なまえ:#{@name}, たいりょく:#{@vitality}, こうげき:#{@attack_power}"
  end

  def defeated?
    @vitality <= 0
  end

  def taken_damage!(attack_power)
    @vitality -= attack_power
  end
end

pidgey = Pokemon.new(name: 'ポッポ', vitality: 100, attack_power: 30)
clefairy = Pokemon.new(name: 'ピッピ', vitality: 50, attack_power: 20)

# 実際に死なないように複製体で戦わせる
battle = PokemonBattle.new(pidgey.clone, clefairy.clone)
battle.game_start!
# =>
# なまえ:ポッポ, たいりょく:100, こうげき:30
# なまえ:ピッピ, たいりょく:50, こうげき:20
# ポッポのこうげき
# ピッピは30のダメージをうけた!
# 
# ピッピのこうげき
# ポッポは20のダメージをうけた!
# 
# ポッポのこうげき
# ピッピは30のダメージをうけた!
# ピッピはやられてしまった!

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/31 01:36 編集

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

    キャンセル

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

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Rubyにて、ハッシュの内容を取り出すときに空白になってしまう。

    ハッシュオブジェクトを作り、それを引数にしてメソッドに渡し出力をしようとしています。 movieというハッシュオブジェクトから任意のキーを入力してそれをメソッドに渡し、情報を出力

  • 受付中

    bundlerのバージョン指定

    以下のコマンドで複数のbundlerを使い分けることができるかと思ったのですがエラーが出てしまいます どうすればよいでしょうか? $ bundle _1.10.6_ -v

  • 解決済

    Ruby on rails

    前提・実現したいこと Ruby on railsのテスト環境構築中です ターミナルから rails s  しても下記のエラーでつまずいています 発生している問題・エラ

  • 解決済

    回答ありがとうございました

    質問消せないようなので問題文は 消させていただきます 回答ありがとうございました

  • 解決済

    asset/images内の画像を呼び出す方法

    railsでローカルのフォルダにある画像を格納したいのですが、方法がわかりません。フォルダにある複数の画像があるのでそれらを全て格納したいのですが、このサイトを見ていてもローカルの

  • 解決済

    vb2017でexcel2016操作

    vb2017を使っています。 communityです。 excel2016を開いてセルのデータを読み込みたいと思っています。 参考にしているサイトです。 http://d.

  • 解決済

    MacにRuby on Rails開発環境を構築でエラー

    以下の記事を参考にMacにRuby on Rails開発環境を構築しようとしています。 初心者でもできた!Ruby on Rails開発環境の構築方法(Mac編) https:

  • 解決済

    ASUS ZenPadで、Camera2APIで、1分動画を2時間分撮影したいです。

    Nexsus 5Xでは、1分動画を、2時間ぶん、撮影することができました。 しかし、ZenPadでは、エラーが出ます。 このようなエラーが繰り返して表示されます。 参

同じタグがついた質問を見る

  • Ruby

    7035questions

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

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