目次

数当てゲーム (CLI)

game.cr

MAX_GUESSES = 10

def play_game
  the_number = rand(1..100)

  guesses = 0
  success = false
  last_guess = 0

  while !success && guesses < MAX_GUESSES
    guess = read_number
    guesses += 1

    if guess == the_number
      success = true
    else
      large_or_small = guess > the_number ? "too large" : "too small"
      print "#{large_or_small} (#{guesses}/#{MAX_GUESSES}). "
      if last_guess > 1
        puts "last guess: #{last_guess}"
      else
        puts
      end
      last_guess = guess
    end
  end

  if success
    puts "Conguratulations!"
  else
    puts "I'm sorry, but you are not an esper."
  end
end

def read_number
  print "guess? "
  while true
    r = read_line
    if r.to_i?
      break
    end
    puts "#{r} is not a number, try again."
    print "guess? "
  end
  r.to_i
end

def ask_play_again
  print "play again [y/N]? "
  read_line.upcase.starts_with? "Y"
end

play_game
while ask_play_again
  play_game
end

Makefile

.PHONY: all
all: game

game: game.cr
	crystal build $< -o $@