class Codebreaker::Console
Constants
- DEMO
- EMPTY_INPUT
- HINT
- YES
Attributes
game[R]
scores[R]
Public Class Methods
new(game = DEMO)
click to toggle source
# File lib/codebreaker/console.rb, line 18 def initialize(game = DEMO) @locale = Localization.new(:console) load_console(game) start_game if game == DEMO end
Public Instance Methods
erase_scores()
click to toggle source
# File lib/codebreaker/console.rb, line 30 def erase_scores print message['alerts']['erase_scores'] erase_game_data if input_selector exit_console end
start_game()
click to toggle source
# File lib/codebreaker/console.rb, line 24 def start_game puts message['alerts']['welcome'].colorize(background: :blue) puts message['alerts']['hint_info'] submit_answer end
Private Instance Methods
erase_game_data()
click to toggle source
# File lib/codebreaker/console.rb, line 144 def erase_game_data begin erase_data_file scores.clear puts message['info']['successfully_erased'].green rescue puts message['errors']['file_not_found'].red end end
exit_console()
click to toggle source
# File lib/codebreaker/console.rb, line 132 def exit_console exit end
finish_game()
click to toggle source
# File lib/codebreaker/console.rb, line 94 def finish_game puts ERB.new(message['info']['results']).result(binding) save_game new_game end
input_selector()
click to toggle source
# File lib/codebreaker/console.rb, line 100 def input_selector input = EMPTY_INPUT until %w[y n].include?(input) print " (y/n) #{message['alerts']['yes_or_no']}:" input = gets.chomp end input == YES end
load_console(game)
click to toggle source
# File lib/codebreaker/console.rb, line 40 def load_console(game) raise ArgumentError, message['errors']['wrong_object'] unless game.is_a?(Game) @game = game @locale.lang = game.configuration.lang @game_config_snapshot = game.configuration.clone apply_external_path @scores = load_game_data end
load_new_game()
click to toggle source
# File lib/codebreaker/console.rb, line 136 def load_new_game @game = Game.new do |config| @game_config_snapshot.each_pair do |key, value| config[key] = value end end end
new_game()
click to toggle source
# File lib/codebreaker/console.rb, line 121 def new_game print message['alerts']['new_game'] if input_selector load_new_game start_game else puts message['alerts']['shutdown'] exit_console end end
process(input)
click to toggle source
# File lib/codebreaker/console.rb, line 79 def process(input) begin puts game.to_guess(input) puts motivation_message(message['alerts']['motivation']) rescue => error puts error finish_game end game.won? ? finish_game : submit_answer end
save_game()
click to toggle source
# File lib/codebreaker/console.rb, line 109 def save_game print message['alerts']['save_game'] save_game_data if input_selector end
save_game_data()
click to toggle source
# File lib/codebreaker/console.rb, line 114 def save_game_data save_user_score prepare_storage_dir save_to_yml puts message['info']['successfully_saved'].green end
show_hint()
click to toggle source
# File lib/codebreaker/console.rb, line 53 def show_hint puts begin "#{message['alerts']['hint']}: #{game.hint.to_s.green}" rescue => error error.to_s.red end end
submit_answer()
click to toggle source
# File lib/codebreaker/console.rb, line 49 def submit_answer process(user_interaction) end
summary()
click to toggle source
# File lib/codebreaker/console.rb, line 90 def summary game.won? ? message['alerts']['won'].green : message['alerts']['lose'].red end
user_interaction(input = EMPTY_INPUT)
click to toggle source
# File lib/codebreaker/console.rb, line 61 def user_interaction(input = EMPTY_INPUT) return if game.attempts.zero? status, step = false, 0 until status begin game.guess_valid?(input) status = true rescue => error puts error.to_s.red unless step.zero? || input == HINT puts "#{message['alerts']['guess']}:" input = gets.chomp step += 1 show_hint if input == HINT end end input end