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