ruby 自回答の転记Ref:[Ruby - Rubyで次の仕様を満たすPokemonクラスを持つプログラム...(98411)| teratail](https://teratail.com/q
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 自回答の転记Ref:[Ruby - Rubyで次の仕様を満たすPokemonクラスを持つプログラム...(98411)| teratail](https://teratail.com/q相关的知识,希望对你有一定的参考价值。
# 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 @turn_count.modulo(@players.size).odd?
@players
end
# たたかう
def battle!
attacker, defender = @players # 攻撃側と防御側を取り出す
defender.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 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のダメージをうけた!
#
# ピッピのこうげき
# ポッポは20のダメージをうけた!
#
# ポッポのこうげき
# ピッピは30のダメージをうけた!
# ピッピはやられてしまった!
以上是关于ruby 自回答の転记Ref:[Ruby - Rubyで次の仕様を満たすPokemonクラスを持つプログラム...(98411)| teratail](https://teratail.com/q的主要内容,如果未能解决你的问题,请参考以下文章
ruby Ruby?やってます,(`·ω·')キリッという为に押さえときたいテクニックref:http://qiita.com/kitaro_tn/items/6372e3
ruby 尝试使用实例方法Module#refineお试しでつかってみる。スコープを限定させてクラスのメソッドを改変·拡张するRef:http://www.ruby-doc.org/core
ruby Rubocopチートシートref:http://qiita.com/kitaro_tn/items/abb881c098b3df3f9871
ruby Rails4で简CSV CSVダウンロードref:http://qiita.com/oharato/items/414b7e5a61034bf8311c
ruby Chef + Kithcen环境でServerspecのテスト実行までの顺序ref:http://qiita.com/ikuwow/items/27397b9675bd50e87b73
Mac os 10.11 更新ruby