私は動的変数に関するいくつかのアドバイスを探しています。特に、私がinstance_variable_set
を最大限に利用している場合、またはより良い方法がある場合は、私が見ているべきです。アドバイスを事前に感謝します。今すぐコードのために。動的変数の値
私はブラックジャックゲームを作成しています。あなたが見ることができるように、彼らは基本的に同じである
class Blackjack
def dealers_card_value_creator
@card_value = @hit_dealer
case
when @card_value.match(/\d+/)
@card_value = @card_value.match(/\d+/)[0].to_i
when @card_value.match(/Ace/)
if @dealers_hand >= 11
@card_value = 1
else
@card_value = 11
end
when @card_value.match(/Jack|Queen|King/)
@card_value = 10
else
puts "there was an error. please try again."
end
@hit_dealer = @card_value
@dealers_hand = @dealers_hand + @hit_dealer
if @dealers_hand > 21 then puts "Dealer went over 21. You won $#{@bet}. Nice!"
deal end
end
def players_card_value_creator
@card_value = @hit_player
case
when @card_value.match(/\d+/)
@card_value = @card_value.match(/\d+/)[0].to_i
when @card_value.match(/Ace/)
if @players_hand >= 11
@card_value = 1
else
@card_value = 11
end
when @card_value.match(/Jack|Queen|King/)
@card_value = 10
else
puts "there was an error. please try again."
end
@hit_player = @card_value
@players_hand = @players_hand + @hit_player
if @players_hand > 21 then puts "You went over 21. You lost $#{@bet}. Try again."
deal end
end
end
:そして、私はこのように見える2つのvalue_creator
メソッドを持っています。だから私はディーラーとプレーヤーの両方が使うこの方法を作りました。
def value_creator(string)
hit = "@#{string}" #returns either @player or @dealer
instance_variable_set(hit, "#{@hit_card}")
@card_value = hit
case
when @card_value.match(/\d+/)
@card_value = @card_value.match(/\d+/)[0].to_i
when @card_value.match(/Ace/)
if "@#{string}"_hand >= 11
@card_value = 1
else
@card_value = 11
end
when @card_value.match(/Jack/)
@card_value = 10
when @card_value.match(/Queen/)
@card_value = 10
when @card_value.match(/King/)
@card_value = 10
else
puts "there was an error. please try again."
end
"@#{string}" = @card_value
"@#{string}"_hand = "@#{string}"_hand + "@#{string}"
end
def hit_dealer
@hit_card = @shuffled_deck.pop
value_creator("dealer")
end
def hit_player
@hit_card = @shuffled_deck.pop
value_creator("player")
end
しかし、私はhit_player
で"@#{string}"
の値を呼び出すしようとすると、それは@player
、ない、割り当てられた値を返します。
私は何をしようとしているのかをよりよく理解するのに役立ち、より良いダイレクトアドバイスに役立つことを願っています。再び、事前に感謝します。
おかげ
は、最初の2つのアクセサを定義する必要があります。だから、その値を取得する最も良い方法は 'instance_variable_get'であり、' hit = "@#{string}" 'の文字列ではなく値を返すことを知っていますか?再度、感謝します。 – Alekx
'hit = eval(" @#{string} ")' - しかしevalは悪です。 – knut
ハハ、もう一度ありがとう! – Alekx