↓↓クリックして頂けると励みになります。
【14 | メソッドの利用】 << 【ホーム】 >> 【16 | クラス】
Rubyのインスタンス変数(Instance Variables)は、オブジェクト指向プログラミング言語であるRubyにおいて、特定のインスタンス(オブジェクト)に紐づけられた変数です。
これらの変数は、そのオブジェクトの状態や属性を表すために使用されます。
Rubyにおける「インスタンス」とは、クラスから生成された具体的なオブジェクトのことを指します。
Rubyはオブジェクト指向プログラミング言語であり、クラスを使ってオブジェクトを定義します。
そして、そのクラスから具体的なデータを持ったオブジェクトを生成することができます。
この生成されたオブジェクトが「インスタンス」と呼ばれます。
Rubyでは、クラスを定義してそのクラスからインスタンス(オブジェクト)を作成することができます。
そして、そのインスタンスには独自の状態を持たせることができます。
その状態を保持するために使われるのがインスタンス変数です。
インスタンス変数は、@
記号で始まります。
インスタンス変数は、そのオブジェクト内であればどこからでもアクセス可能です。
他のメソッドからも直接アクセスできます。
Visual Studio Codeで以下のプログラムを作ってみましょう。
新規作成 【saikoro1.rb】
# saikoro1.rb def throwDices(score) me1 = rand(0..5).to_i me2 = rand(0..5).to_i showDices( me1, me2 ) score = checkPoints( me1, me2, score ) return score end def showDices( a, b ) diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|'] puts '' puts (diceStrings[a]).to_s + ' ' + (diceStrings[b]).to_s puts '' end def checkPoints( a, b, score ) bet = 5 c = a + b + 2 if ( c%2 == 0 ) then if ( a == b ) then score += bet*2 puts 'あなたは ' + (bet*2).to_s + '$ 勝ちました。' else score += bet puts 'あなたは ' + bet.to_s + '$ 勝ちました。' end else if( c == 7 ) score -= bet*15 puts 'あなたは ' + (bet*15).to_s + '$ 負けました。' else score -= bet*10 puts 'あなたは ' + (bet*10).to_s + '$ 負けました。' end end puts 'あなたの持ち金は' + score.to_s + '$ です。' return score end def keyInput() begin gets rescue end end def main() score = 100 round = 1 while ( score > 0 ) do puts '' puts 'エンターキーを押してください。' keyInput() puts '' puts 'ラウンド:' + round.to_s score = throwDices(score) round += 1 end puts 'あなたのお金はなくなりました。ゲームオーバーです。' end main()
まず最初に次の文を見てください。
diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|']
これは、サイコロを記号で作っています。
シングルコーテーション('
)で囲まれた部分が配列の箱一つに入ります。
mainメソッドでは、while文を使ってscoreが0になるまでループを行っています。
呼び出されるメソッドはkeyInput()
とthrowDices()
です。
まずは、keyInputメソッドから説明します。
def keyInput() begin gets rescue end end
ここでは、begin,rescueの構文を使っています。
begin 実行文 rescue 実行文 end
まず、beginの実行文には「何をしたときに」というのが入ります。
今回は、gets「キーボードからの入力があった時に」という形になります。
getsは標準入力といいます。
今回のプログラムでは、何か入力があるまで待機するといった処理を行います。
何か入力があれば次の処理に進みます。
一時停止みたいなものです。
rescueは「もし入力にエラーが生じたら、rescueの実行文の内容を行いなさい」という意味になります。
今回は、実行文がありませんので実際にエラーがあっても何も起きません。
rand(0..5)
という記述で、0から5までの整数がランダムに出ます。
ここで得られた2つの変数は、showDices()
とcheckPoints()
の二つのメソッドに引数として渡されます。
showDices()
は、渡された2つの数字をサイコロにして表示しています。
checkPoints()
は与えられた数字に対して、配当を決めています。
今回のプログラムの勝敗は、偶数か奇数か、同じ目が出たかどうかしか判定していません。
条件によって変数scoreに数字が足し引きされreturnで返しています。
実行してみましょう。
~/Desktop/Programming/RB $ ruby saikoro1.rb エンターキーを押してください。 ラウンド:1 | : | |:::| あなたは 5$ 勝ちました。 あなたの持ち金は105$ です。 エンターキーを押してください。 ラウンド:2 |...| |:::| あなたは 50$ 負けました。 あなたの持ち金は55$ です。 エンターキーを押してください。 ラウンド:3 |:::| | * | あなたは 75$ 負けました。 あなたの持ち金は-20$ です。 あなたのお金はなくなりました。ゲームオーバーです。
Visual Studio Codeで以下のプログラムを作ってみましょう。
新規作成 【saikoro2.rb】
# saikoro2.rb @score = 100 @bet = 5 @round = 1 @choice = 0 def throwDices() me1 = rand(0..5).to_i me2 = rand(0..5).to_i showDices( me1, me2 ) checkPoints( me1, me2) end def showDices( a, b ) diceStrings = ['| * |', '| : |', '|...|', '|: :|','|:.:|','|:::|'] puts '' puts (diceStrings[a]).to_s + ' ' + (diceStrings[b]).to_s puts '' end def checkPoints( a, b ) c = a + b + 2 d = 0 if( c%2 == @choice ) then if ( a == b || c == 7 ) then d = @bet*2 else d = @bet end print 'あなたは' print d.to_i puts '$を手に入れました!' @score = @score + d.to_i else if ( a == b || c == 7 ) then d = @bet*2 else d = @bet end print 'あなたは' print d.to_i puts '$負けました。' @score = @score - d.to_i end puts 'あなたの持ち金は ' + @score.to_s + '$です。' end def keyInput() begin s = gets rescue puts '予期しないエラーが起きました' end return s end def choice() puts '' puts '偶数か奇数かを選んでエンターを押してください。' puts '偶数ならEVEN 奇数ならODDと入力してください。' print 'EVEN or ODD-> ' str = keyInput() if ( str[0] ='e' || str[0] = 'E' ) then @choice = 0 else @choice = 1 end end def bet() puts '' puts '掛け金を入力してください' print '-> ' @bet = keyInput() end def main() while ( @score > 0 ) do puts '' puts 'ラウンド:' + @round.to_s choice() bet() throwDices() @round += 1 end puts 'あなたのお金はなくなりました。ゲームオーバーです。' end main()
このプログラムでは、「インスタンス変数」を使用しています。
インスタンス変数は変数名の前に「@
」が付きます。
@score = 100 @bet = 5 @round = 1 @choice = 0
インスタンス変数を使用すると、プログラムの中で値を保持し続ける事が出来ます。
プログラム内の全メソッドで共通して使用することが出来るのでとても便利です。
checkPoint()
メソッドを見てみます。
c = a + b + 2
最後に2を足しているのは、次の条件に理由があります。
if ( a == b || c == 7 ) then
このc == 7
に当てはめる確率を上げています。
2を足さなければ、1と6の組み合わせしかありません。
str = keyInput() if ( str[0] ='e' || str[0] = 'E' ) then
これは、strの最初の文字がeかEならばという意味です。
出力結果を見てみましょう。
~/Desktop/Programming/RB $ ruby saikoro2.rb ラウンド:1 偶数か奇数かを選んでエンターを押してください。 偶数ならEVEN 奇数ならODDと入力してください。 EVEN or ODD-> E 掛け金を入力してください -> 100 |: :| |:::| あなたは100$を手に入れました! あなたの持ち金は 200$です。 ラウンド:2 偶数か奇数かを選んでエンターを押してください。 偶数ならEVEN 奇数ならODDと入力してください。 EVEN or ODD-> O 掛け金を入力してください -> 200 | : | |...| あなたは200$負けました。 あなたの持ち金は 0$です。 あなたのお金はなくなりました。ゲームオーバーです。
【14 | メソッドの利用】 << 【ホーム】 >> 【16 | クラス】
↓↓クリックして頂けると励みになります。