この記事はCrystal Advent Calendar 2015の10日目の記事です。
どうも、サークルの記事にCrystalについて書いたらpineたんに捕まってしまった者です。
Rubyすらドットインストール見たきりの雑魚ですが、初心者向けの簡単な記事を書かせていただきます。
といっても、
ほとんどRubyのリファレンス見ながら書いたので、ほぼRubyですorz
今回作成したのは、Hit&Blowです。
以下がソースコードになります。
class HitAndBlow
NUMBERS_LENGTH = 4
def initialize
@numbers = (0..9).to_a.sample(NUMBERS_LENGTH)
end
# Hitをカウント
def decide_hit(input)
hit = 0
i = 0
while i < NUMBERS_LENGTH
if @numbers[i] == input[i].to_i
hit += 1
end
i += 1
end
return hit
end
# Blowをカウント
def decide_blow(input)
blow = 0
i = 0
while i < NUMBERS_LENGTH
j = 0
while j < NUMBERS_LENGTH
if i == j
j += 1
next
end
if @numbers[i] == input[j].to_i
blow += 1
end
j += 1
end
i += 1
end
return blow
end
# 判定
def decide(input)
hit = decide_hit(input)
blow = decide_blow(input)
if hit == 4
puts "正解です"
puts "おめでとうございます"
exit()
else
puts hit.to_s + "Hit! " + blow.to_s + "Blow!"
end
end
end
def main()
loop do
puts "4桁の整数を入力して下さい"
puts "※ 途中で終わるときはCtrl+cで"
input = gets
input = input.to_s
# エンター連打してたら戻る
if input == "\n"
next
end
# 数字かどうか判定
begin
input.to_i
rescue
puts "数字のみを入力してください"
next
end
# 桁数を判定
# 改行含むので5文字で判定
if input.size != 5
puts "4桁入力して下さい"
next
end
puts "Number"
$hit_and_blow.decide(input)
end
end
$hit_and_blow = HitAndBlow.new
main()
見るに耐えないコードだと思いますが、一応動いたのでお許し下さい...。
#Rubyとの違い
Rubyと違った部分は、
- is_a?で数値を判定するときはis_a?(Integer)じゃなくてis_a?(Number) (結局使わなかった...)
- 文字列の長さを取得するときは.lengthじゃなくて.size
の2点くらいでした。
そもそも、ほとんどRuby触ってないからよくわからないorz
雑ですが以上になります。
ありがとうございました!
明日は白瀬蒼さんのターンです!