From 841b162ead87ed010f33f6e89abbb52bb998592e Mon Sep 17 00:00:00 2001 From: Nicolas McCurdy Date: Fri, 9 Jan 2015 17:13:50 -0500 Subject: [PATCH 1/3] Nick's game --- Nicks-Game/cli.rb | 42 +++++++++++++++++++++++++++++++++++++ Nicks-Game/game.rb | 21 +++++++++++++++++++ Nicks-Game/game_settings.rb | 8 +++++++ 3 files changed, 71 insertions(+) create mode 100644 Nicks-Game/cli.rb create mode 100644 Nicks-Game/game.rb create mode 100644 Nicks-Game/game_settings.rb diff --git a/Nicks-Game/cli.rb b/Nicks-Game/cli.rb new file mode 100644 index 0000000..77c4a65 --- /dev/null +++ b/Nicks-Game/cli.rb @@ -0,0 +1,42 @@ +require 'optparse' +require_relative 'game' +require_relative 'game_settings' + +options = {} +OptionParser.new do |opts| + opts.banner = 'Usage: 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 'Welcome to the guessing game!' +puts "You have #{game.settings.guess_limit || 'unlimited'} tries to guess a number from 1 to #{game.settings.max}." +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..5e236c6 --- /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) + if @guesses_remaining.is_a? Numeric + 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 From d5641b8d2e03c5fcef07c16a4d957d6749a4a2bf Mon Sep 17 00:00:00 2001 From: Nicolas McCurdy Date: Fri, 9 Jan 2015 17:16:46 -0500 Subject: [PATCH 2/3] Update banner to include the "ruby" command --- Nicks-Game/README.md | 6 ++++++ Nicks-Game/cli.rb | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 Nicks-Game/README.md 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 index 77c4a65..57fb6f5 100644 --- a/Nicks-Game/cli.rb +++ b/Nicks-Game/cli.rb @@ -4,7 +4,7 @@ options = {} OptionParser.new do |opts| - opts.banner = 'Usage: cli.rb [options]' + 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 From 4d76ac676e2539315e53e81a928491641fe19c90 Mon Sep 17 00:00:00 2001 From: Nicolas McCurdy Date: Fri, 23 Jan 2015 11:48:44 -0500 Subject: [PATCH 3/3] Follow @jaybobo's suggestions --- Nicks-Game/cli.rb | 7 +++++-- Nicks-Game/game.rb | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Nicks-Game/cli.rb b/Nicks-Game/cli.rb index 57fb6f5..52316bb 100644 --- a/Nicks-Game/cli.rb +++ b/Nicks-Game/cli.rb @@ -17,8 +17,11 @@ game = Game.new options -puts 'Welcome to the guessing game!' -puts "You have #{game.settings.guess_limit || 'unlimited'} tries to guess a number from 1 to #{game.settings.max}." +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!' diff --git a/Nicks-Game/game.rb b/Nicks-Game/game.rb index 5e236c6..bea0f8b 100644 --- a/Nicks-Game/game.rb +++ b/Nicks-Game/game.rb @@ -10,7 +10,7 @@ def initialize(options = {}) end def guess(number) - if @guesses_remaining.is_a? Numeric + unless @guesses_remaining.nil? raise RunTimeError, 'No guesses remaining' unless @guesses_remaining > 0 @guesses_remaining -= 1 @guesses_used += 1