./lib/burger_game.rb in burger_game-1.0.6 vs ./lib/burger_game.rb in burger_game-1.1.0
- old
+ new
@@ -1,199 +1,199 @@
-# For command line argument
-require 'optparse'
-require 'ostruct'
-
-require_relative './game_state'
-require_relative './screen_message'
-require_relative './recipe'
-require_relative './customer_request'
-require_relative './player_option'
-require_relative './score_comparison'
-
-class BurgerGame
- def initialize(*args)
- # Initialise
- game_state = GameState.new
- show_menu = Recipe.new
- no_of_recipe = Recipe.no_of_recipe
- screen = ScreenMessage.new
- player_options = PlayerOption.new
- customer = CustomerRequest.new
- no_of_customer = CustomerRequest.no_of_customer
- options = OpenStruct.new
-
- # Handle command line argument
- opt_parser = OptionParser.new do |opt|
- opt.banner = "Usage: start_burger_game [options]"
-
- opt.on("-h", "--help", "Print this Help menu for Ruby Burger Game.") do |arg|
- puts opt
- exit
- end
-
- opt.on("-m", "--money TARGET_MONEY", screen.display_h_money) { |arg| options.target_money = arg }
-
- opt.on("-r", "--reputation MAX_REPUTATION", screen.display_h_reputation) { |arg| options.max_reputation = arg }
- end
-
- # ERROR HANDLING for command line argument
- begin
- opt_parser.parse!(args)
- rescue OptionParser::InvalidOption => e
- puts "You have entered an invalid option. Please check the available options in our Help menu '-h' or '--help'."
- puts e.message
- exit
- rescue OptionParser::MissingArgument => e
- puts "You have not entered the argument for your option."
- puts e.message
- exit
- rescue OptionParser::ParseError => e
- puts "Error when parsing argument."
- puts e.message
- exit
- rescue => e
- puts "Something went wrong."
- puts "Error message: " + e.message
- exit
- end
-
- if (options.target_money)
- if ((options.target_money.to_i >= 10 ) && (options.target_money.to_i <= 99 ))
- puts "Change TARGET_MONEY to: $#{options.target_money}.00."
- # Set target money in GameState
- game_state.set_target_money(options.target_money.to_f)
- else
- puts screen.display_invalid("for TARGET_MONEY.")
- exit
- end
-
- end
- if (options.max_reputation)
- if ((options.max_reputation.to_i >= 1 ) && (options.max_reputation.to_i <= 10 ))
- puts "Change MAX_REPUTATION to: #{options.max_reputation}."
- # Set max reputation in GameState
- game_state.set_max_reputation(options.max_reputation.to_i)
- else
- puts screen.display_invalid("for MAX_REPUTATION.")
- exit
- end
- end
-
- # Ask user if they want to launch the game or exit
- puts
- launch_game = player_options.launch_game
-
- # Exit command line if user select Exit
- exit if launch_game === false
-
- # Show welcome message
- puts
- puts screen.display_welcome
- puts
- screen.go_to_next
-
- # Feature 1: Options to see instructions or to start the game
- loop do
- puts
- start_game = player_options.start_game
-
- break if start_game === true
-
- # Show instructions
- puts
- puts screen.display_instructions
-
- puts
- screen.go_to_next
- end
-
- # Show prologue
- puts
- puts screen.display_prologue
-
- puts
- screen.go_to_next
-
- # Loop game until WIN / GAME OVER
- loop do
- # Display current money and reputation status
- puts game_state.display_game_state
-
- puts
- screen.go_to_next
-
- # Feature 2: Formatted display for showing shop's menu
- puts
- puts "Ruby Burger's Menu"
- puts
- puts
- puts "We have #{no_of_recipe} recipes. Try to remember the recipe name, the stack order of ingredients and the quantity. We will build the burger from bottom to top."
- puts
-
- # Loop to display all recipes
- i = 0
- loop do
- puts show_menu.display_recipe(i)
-
- puts
- screen.go_to_next
-
- i += 1
- break if i > (no_of_recipe - 1)
- end
-
- # Feature 3: Randomised customers with set of request (and associated preferences) and responses
- # Display customer request
- puts
- puts "There is a customer in the queue..."
- puts
- # Randomise customer
- customer_no = rand(no_of_customer)
- puts customer.display_request(customer_no)
- puts
-
- puts
- screen.go_to_next
-
- # Feature 4: Selectable options for list of ingredients, so no manual entry (typing) is needed.
- # Quantity input as integer within a pre-set range.
- # Display player's options
- player_recipe = player_options.get_selection
- customer_recipe = customer.get_request(customer_no)
-
- # Feature 5: Score calculation based on customer's request and preferences compared to player's input
- # Calculate score
- compare = ScoreComparison.new(player_recipe, customer_recipe)
- score = compare.get_score
- mood = compare.get_mood(score)
-
- # Feautre 6: Get customers' responses from a JSON file
- # Display customer's response
- puts
- puts "The customer wants to say something..."
- puts
- puts customer.display_response(customer_no, mood)
-
- puts
- screen.go_to_next
- puts
-
- # Update game state
- compare.calculate_state(mood)
-
- # Feature 7: Lose/win criteria based on reputation and money
- # GAME OVER condition
- if GameState.current_reputation == 0
- puts screen.display_game_over
- puts
- break
- end
-
- # WIN condition
- if GameState.current_money >= GameState.target_money
- puts screen.display_win
- puts
- break
- end
- end
- end
+# For command line argument
+require 'optparse'
+require 'ostruct'
+
+require_relative './game_state'
+require_relative './screen_message'
+require_relative './recipe'
+require_relative './customer_request'
+require_relative './player_option'
+require_relative './score_comparison'
+
+class BurgerGame
+ def initialize(*args)
+ # Initialise
+ game_state = GameState.new
+ show_menu = Recipe.new
+ no_of_recipe = Recipe.no_of_recipe
+ screen = ScreenMessage.new
+ player_options = PlayerOption.new
+ customer = CustomerRequest.new
+ no_of_customer = CustomerRequest.no_of_customer
+ options = OpenStruct.new
+
+ # Handle command line argument
+ opt_parser = OptionParser.new do |opt|
+ opt.banner = "Usage (Gem's executable): start_burger_game [options]\nOR\nUsage (bash script - install game): install.sh [options]\nUsage (bash script - run game): burger_game.sh [options]\n\n"
+
+ opt.on("-h", "--help", "Print this Help menu for Ruby Burger Game.") do |arg|
+ puts opt
+ exit
+ end
+
+ opt.on("-m", "--money TARGET_MONEY", screen.display_h_money) { |arg| options.target_money = arg }
+
+ opt.on("-r", "--reputation MAX_REPUTATION", screen.display_h_reputation) { |arg| options.max_reputation = arg }
+ end
+
+ # ERROR HANDLING for command line argument
+ begin
+ opt_parser.parse!(args)
+ rescue OptionParser::InvalidOption => e
+ puts "You have entered an invalid option. Please check the available options in our Help menu '-h' or '--help'."
+ puts e.message
+ exit
+ rescue OptionParser::MissingArgument => e
+ puts "You have not entered the argument for your option."
+ puts e.message
+ exit
+ rescue OptionParser::ParseError => e
+ puts "Error when parsing argument."
+ puts e.message
+ exit
+ rescue => e
+ puts "Something went wrong."
+ puts "Error message: " + e.message
+ exit
+ end
+
+ if (options.target_money)
+ if ((options.target_money.to_i >= 10 ) && (options.target_money.to_i <= 99 ))
+ puts "Change TARGET_MONEY to: $#{options.target_money}.00."
+ # Set target money in GameState
+ game_state.set_target_money(options.target_money.to_f)
+ else
+ puts screen.display_invalid("for TARGET_MONEY.")
+ exit
+ end
+
+ end
+ if (options.max_reputation)
+ if ((options.max_reputation.to_i >= 1 ) && (options.max_reputation.to_i <= 10 ))
+ puts "Change MAX_REPUTATION to: #{options.max_reputation}."
+ # Set max reputation in GameState
+ game_state.set_max_reputation(options.max_reputation.to_i)
+ else
+ puts screen.display_invalid("for MAX_REPUTATION.")
+ exit
+ end
+ end
+
+ # Ask user if they want to launch the game or exit
+ puts
+ launch_game = player_options.launch_game
+
+ # Exit command line if user select Exit
+ exit if launch_game === false
+
+ # Show welcome message
+ puts
+ puts screen.display_welcome
+ puts
+ screen.go_to_next
+
+ # Feature 1: Options to see instructions or to start the game
+ loop do
+ puts
+ start_game = player_options.start_game
+
+ break if start_game === true
+
+ # Show instructions
+ puts
+ puts screen.display_instructions
+
+ puts
+ screen.go_to_next
+ end
+
+ # Show prologue
+ puts
+ puts screen.display_prologue
+
+ puts
+ screen.go_to_next
+
+ # Loop game until WIN / GAME OVER
+ loop do
+ # Display current money and reputation status
+ puts game_state.display_game_state
+
+ puts
+ screen.go_to_next
+
+ # Feature 2: Formatted display for showing shop's menu
+ puts
+ puts "Ruby Burger's Menu"
+ puts
+ puts
+ puts "We have #{no_of_recipe} recipes. Try to remember the recipe name, the stack order of ingredients and the quantity. We will build the burger from bottom to top."
+ puts
+
+ # Loop to display all recipes
+ i = 0
+ loop do
+ puts show_menu.display_recipe(i)
+
+ puts
+ screen.go_to_next
+
+ i += 1
+ break if i > (no_of_recipe - 1)
+ end
+
+ # Feature 3: Randomised customers with set of request (and associated preferences) and responses
+ # Display customer request
+ puts
+ puts "There is a customer in the queue..."
+ puts
+ # Randomise customer
+ customer_no = rand(no_of_customer)
+ puts customer.display_request(customer_no)
+ puts
+
+ puts
+ screen.go_to_next
+
+ # Feature 4: Selectable options for list of ingredients, so no manual entry (typing) is needed.
+ # Quantity input as integer within a pre-set range.
+ # Display player's options
+ player_recipe = player_options.get_selection
+ customer_recipe = customer.get_request(customer_no)
+
+ # Feature 5: Score calculation based on customer's request and preferences compared to player's input
+ # Calculate score
+ compare = ScoreComparison.new(player_recipe, customer_recipe)
+ score = compare.get_score
+ mood = compare.get_mood(score)
+
+ # Feautre 6: Get customers' responses from a JSON file
+ # Display customer's response
+ puts
+ puts "The customer wants to say something..."
+ puts
+ puts customer.display_response(customer_no, mood)
+
+ puts
+ screen.go_to_next
+ puts
+
+ # Update game state
+ compare.calculate_state(mood)
+
+ # Feature 7: Lose/win criteria based on reputation and money
+ # GAME OVER condition
+ if GameState.current_reputation == 0
+ puts screen.display_game_over
+ puts
+ break
+ end
+
+ # WIN condition
+ if GameState.current_money >= GameState.target_money
+ puts screen.display_win
+ puts
+ break
+ end
+ end
+ end
end
\ No newline at end of file