diff --git a/Nicks-Game/README.md b/Nicks-Game/README.md new file mode 100644 index 0000000..babad69 --- /dev/null +++ b/Nicks-Game/README.md @@ -0,0 +1,6 @@ +# Nick's Game: Guessing Game +``` +Usage: ruby cli.rb [options] + -m, --max MAX set the maximum number to guess from + -g, --guess_limit GUESS_LIMIT set the number of guesses allowed +``` diff --git a/Nicks-Game/cli.rb b/Nicks-Game/cli.rb new file mode 100644 index 0000000..52316bb --- /dev/null +++ b/Nicks-Game/cli.rb @@ -0,0 +1,45 @@ +require 'optparse' +require_relative 'game' +require_relative 'game_settings' + +options = {} +OptionParser.new do |opts| + opts.banner = 'Usage: ruby cli.rb [options]' + + opts.on('-m', '--max MAX', 'set the maximum number to guess from') do |v| + options[:max] = v.to_i + end + + opts.on('-g', '--guess_limit GUESS_LIMIT', 'set the number of guesses allowed') do |v| + options[:guess_limit] = v.to_i + end +end.parse! + +game = Game.new options + +puts <<-EOF +Welcome to the guessing game! +You have #{game.settings.guess_limit || 'unlimited'} tries to guess a number from 1 to #{game.settings.max}. +EOF + +loop do + if game.guesses_remaining == 0 + puts 'You ran out of tries... You lose!' + exit + else + if game.guesses_remaining + print "Guess #{game.guesses_used + 1} of #{game.settings.guess_limit}: " + else + print "Guess #{game.guesses_used + 1}: " + end + + result = game.guess gets.to_i + case result + when 0 + puts 'You won!' + exit + when -1 then puts 'Higher...' + when 1 then puts 'Lower...' + end + end +end diff --git a/Nicks-Game/game.rb b/Nicks-Game/game.rb new file mode 100644 index 0000000..bea0f8b --- /dev/null +++ b/Nicks-Game/game.rb @@ -0,0 +1,21 @@ +require_relative 'game_settings' + +class Game + attr_reader :settings, :guesses_used, :guesses_remaining + def initialize(options = {}) + @settings = GameSettings.new(options) + @winning_number = rand(1..@settings.max) + @guesses_used = 0 + @guesses_remaining = @settings.guess_limit + end + + def guess(number) + unless @guesses_remaining.nil? + raise RunTimeError, 'No guesses remaining' unless @guesses_remaining > 0 + @guesses_remaining -= 1 + @guesses_used += 1 + end + + number <=> @winning_number + end +end diff --git a/Nicks-Game/game_settings.rb b/Nicks-Game/game_settings.rb new file mode 100644 index 0000000..d7e14a2 --- /dev/null +++ b/Nicks-Game/game_settings.rb @@ -0,0 +1,8 @@ +class GameSettings + attr_reader :max, :guess_limit + + def initialize(max: 10, guess_limit: nil) + @max = max + @guess_limit = guess_limit + end +end