この記事は【完走したい】楽しくいろいろやる Advent Calendar 2023の2日目です。
簡単なゲームを作る
簡単な数あてゲームです。
数字を入力し、決められた数よりも大きいか小さいか、あるいは正解かを判断する例のあれです。
これを作るにあたって、数字を入力する部分、if文について学んでいきます。
数字を入力できるようにする
数字を入力するには「gets」を使うようです。
また、入力後にEnterを押した際改行がされるのを防ぐために「chomp」というのをつけるそうです。
さらに、入力した文字を数値に変えるために「to_i」を用いるようです。
全て組み合わせて、実際にやってみた結果がこちら
↓コード
puts "ある人は"
getter =gets.chomp
puts "ある人は"+getter+"です。"
出力
C:\Users\xxxxx\Desktop>ruby Advent2023.rb
ある人は
人間
ある人は人間です。
さらに、入力した文字を数値に変えるために「to_i」を用いるようです。
さっきのやつにくっつけたら
Advent2023.rb:3:in `+': no implicit conversion of Integer into String (TypeError)
from Advent2023.rb:3:in `<main>'
このようなエラーが出ます。これは、int型からstring型に変換できない?エラーが出ています。
いずれにしても、int型が認識されているので、ちゃんと数値に置き換わっています。
if
条件式を作っていきます。
条件式は、if 〇〇 then 〇〇の感じで作れるそうです。
else ifはelsifとかくようです。
最後にendをつけ忘れないようにすればOKみたいです。
試しに、入力された数値が5以下なら「A」、そうでなければ「B」を出力するようなコードを書いていきます。
Getter=gets.chomp.to_i
if Getter<=5 then
puts "A"
else
puts "B"
end
結果
C:\Users\xxxxx\Desktop>ruby Advent2023.rb
3
A
C:\Users\xxxxx\Desktop>ruby Advent2023.rb
8
B
いい感じになってきました
ランダムに数字を選ぶ
ランダムに数字を選ぶようにしてみます
ランダムは、randを使うようです。
randの中でも用途によっていろいろあるみたいです。
今回は1から100まで(0を含まない)ようにしたいので、
rand(1..100)
と書きました。
終わるまで処理を実行する
続いている間は終わらないようにします。今回の場合は数字を入力して大きいか小さいか判定した後また数字が入力できるようにします。whileを使うそうです。
while 条件
やりたいこと
end
みたいな感じで書くようです。nextで先頭に戻り、breakで強制終了します。
やりながら覚えます。
さっきまでの知識を組み合わせて、
↓書いたコード
Ans=rand (1..100)
puts "数値を入力してください"
ch =gets.chomp.to_i
while Ans!=ch do
if Ans>ch then
puts "もっと大きいです"
elsif Ans<ch then
puts"もっと小さいです"
end
ch =gets.chomp.to_i
end
puts"正解!("+Ans.to_s+")"
while横の条件を'Ans=ch'としたらうまく動きませんでした。
!とかdoをつけるとうまくいくようです。
!は条件を逆にする?みたいです(今回はAnsとchが同じ'ではない'間繰り返す)
doは、{}と同じ意味らしいです。
whileを使うときに使われ、endまでの中をwhileで実行するみたいです。
ちなみに、動かした結果はこうなりました
アドベントカレンダー用 2 数当てゲーム pic.twitter.com/6Nuybc01Ua
— ある暇な人 (@Aruhimanahito) November 30, 2023
ちゃんと動いています。よかった。
感想
if文の使いかたや文字の入力、ランダムの使いかたを学びました。
なかなかしっかり動かせたので満足です。
参考