前回のプログラムでは「human_hand = rand(3)+1」でランダムに値を設定していました。
今回はこれをキーボードから設定できるように変更します。前回プログラムに下記のように、
変更してください。

STDOUT.sync = true #追加

goo = 1
par = 2
choki = 3

print("[1:グー、2:パー、3:チョキ]","\n") #追加
print("[1,2,3]の数字を入力","\n") #追加

human_hand = gets  #この部分を変更
computer_hand = rand(3)+1

最初の行にある「STDOUT.sync = true」はRDEで必要なだけで、通常はいりません。
さて、画面左下のコンソールに実行結果が表示されているとおもいますが、何か変です。

引き分け判定を実行
グー判定を実行
パー判定を実行
チョキ判定を実行

は表示されるのですが、何度実行しなおしても、
じゃんけんの結果である、「引き分け、You Win、You Lose」が表示されません。
これは「if文」の条件がどれも成立していないと思われます。
「gets命令」でキーボードから取得した値を「p命令」を使ってコンソールに表示してみます。

STDOUT.sync = true

goo = 1
par = 2
choki = 3

print("[1:グー、2:パー、3:チョキ]","\n")
print("[1,2,3]の数字を入力","\n")

human_hand = gets  
computer_hand = rand(3)+1
p(human_hand) #追加
p(computer_hand) #追加

試しにキーボードから3を入力します。
実行結果

[1:グー、2:パー、3:チョキ]
[1,2,3]の数字を入力
3 #この数字はRDEが表示しています。
"3\n" #この部分がキーボートから入力した値です
1 #ここはコンピューターがランダムに決めた値です。
引き分け判定を実行
グー判定を実行
パー判定を実行
チョキ判定を実行
Complete(0)

この結果を見てみると、「human_hand」には「”3\n”」が代入され、「computer_hand」には「1」が代入されています。
「”3\n”」は「ダブルクォートで囲まれた文字」、「1」は整数。文字と整数を比較していたことになります。
「human_hand」に「”3\n”」(文字)が代入されている状態で条件が成立する「if文」がなかったので、ブログラムが予想した
通りに動かなかったようです。
「gets」と「p」はこちら
rubyには文字を整数に変換する命令があるので、それを使用します。

STDOUT.sync = true

goo = 1
par = 2
choki = 3

print("[1:グー、2:パー、3:チョキ]","\n")
print("[1,2,3]の数字を入力","\n")

human_hand = gets.to_i  #この部分を変更
computer_hand = rand(3)+1
p(human_hand)
p(computer_hand)

これで実行結果が正しく表示されます。
「to_i」についてはこちら

2020年9月
« 4月    
 12345
6789101112
13141516171819
20212223242526
27282930  

カテゴリー

広告

現在の住まい、将来はVPSへ引越します。 ロリポップの上位版です。

広告

広告

最近のコメント

    広告

    Railsを動かす予定のVPS。無料キャンペーン中。

    広告