class CodebreakerVukolovEdition::Controller
Constants
- AVAILIABLE_VALUES
Attributes
game[RW]
services[RW]
Public Class Methods
new()
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 11 def initialize @game = Game.new @messages = Messages.new end
Public Instance Methods
get_action(*question)
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 68 def get_action(*question) @messages.show_messages(question.first) if question value = gets.chomp value.empty? ? get_action(*question) : value end
make_a_decision(option)
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 61 def make_a_decision(option) decision = validate(get_action(option)) return decision unless decision.nil? @messages.show_messages(:instruction) make_a_decision(option) end
next_step(decision, *option) { || ... }
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 37 def next_step(decision, *option) if decision == 'yes' yield elsif decision == 'no' && option.include?('save_result') @messages.show_messages(:game_unsaved) else abort end end
play()
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 16 def play return total_result(:lose) if @game.turns == Game::MAX_TURNS @messages.before_round_info(@game.turns) show_hint guess = provided_guess result = @game.round_result(guess) round_info(result) @game.add_new_turn play end
provided_guess()
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 74 def provided_guess input = validate(get_action(:input)) if input.nil? @messages.show_messages(:input_warning) provided_guess elsif input == 'hint' @game.use_hint play else input end end
round_info(result)
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 27 def round_info(result) return total_result(:won) if result == :won @messages.show_messages(:round_result, result) end
show_hint()
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 32 def show_hint return @messages.print_hint(@game.hint) if @game.hint[:used] @messages.hint_info end
total_result(state)
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 47 def total_result(state) @messages.total_game_info(state, @game.turns, @game.secret_code) next_step(make_a_decision(:save_result), 'save_result') do username = get_action(:name) save = Saves.new(username, state, @game) save.write_to_file @messages.show_messages(:result_saved, CodebreakerVukolovEdition::Saves::FILENAME) end next_step(make_a_decision(:new_game)) do game = CodebreakerVukolovEdition::Controller.new game.play end end
Private Instance Methods
validate(input)
click to toggle source
# File lib/codebreaker_vukolov_edition.rb, line 89 def validate(input) input if (input.to_i.positive? && input.length == 4) || AVAILIABLE_VALUES.include?(input) end