class Codebreaker::Console

Constants

ACTIONS_FOR_DATABASE
USER_ACTIONS

Public Instance Methods

choose_action() click to toggle source
# File lib/entities/console.rb, line 14
def choose_action
  respondent.show_message(:greeting)
  loop do
    respondent.show_message(:choose_action)
    case input
    when USER_ACTIONS[:start] then return process
    when USER_ACTIONS[:rules] then rules.show_rules
    when USER_ACTIONS[:stats] then show_statistics
    else respondent.show_message(:wrong_input_action)
    end
  end
end
show_statistics() click to toggle source
# File lib/entities/console.rb, line 27
def show_statistics
  respondent.show(winners_load)
end
winners_load() click to toggle source
# File lib/entities/console.rb, line 31
def winners_load
  statistic.winners(load_db)
end

Private Instance Methods

game() click to toggle source
# File lib/entities/console.rb, line 45
def game
  @game ||= Game.new
end
game_state_valid?() click to toggle source
# File lib/entities/console.rb, line 90
def game_state_valid?
  game.attempts_left.positive? && !game.winner
end
input() click to toggle source
# File lib/entities/console.rb, line 115
def input
  input = gets.chomp.downcase
  input == USER_ACTIONS[:leave] ? leave : input
end
leave() click to toggle source
# File lib/entities/console.rb, line 120
def leave
  respondent.show_message(:leave)
  exit
end
lose() click to toggle source
# File lib/entities/console.rb, line 98
def lose
  game.remove_instance_helpers
  respondent.show_message(:when_lose)
  new_process
end
new_process() click to toggle source
# File lib/entities/console.rb, line 111
def new_process
  choose_action
end
play_game() click to toggle source
# File lib/entities/console.rb, line 79
def play_game
  respondent.show_message(:in_process)
  while game_state_valid?
    what_guessed = game.attempt(input)
    next if game.winner
      respondent.show(what_guessed) if what_guessed
      respondent.show(game.errors) unless game.errors.empty?
  end
  result_decision
end
player() click to toggle source
# File lib/entities/console.rb, line 37
def player
  @player ||= Player.new
end
process() click to toggle source
# File lib/entities/console.rb, line 57
def process
  game.game_options(user_difficulty: setup_difficulty, player: setup_player)
  play_game
end
respondent() click to toggle source
# File lib/entities/console.rb, line 49
def respondent
  @respondent ||= Respondent.new
end
result_decision() click to toggle source
# File lib/entities/console.rb, line 94
def result_decision
  game.winner ? win : lose
end
rules() click to toggle source
# File lib/entities/console.rb, line 41
def rules
  @rules ||= Rules.new
end
setup_difficulty() click to toggle source
# File lib/entities/console.rb, line 71
def setup_difficulty
  loop do
    respondent.show_message(:select_difficulty)
    user_difficulty_input = input
    return user_difficulty_input if game.valid_difficulties?(user_difficulty_input)
  end
end
setup_player() click to toggle source
# File lib/entities/console.rb, line 62
def setup_player
  respondent.show_message(:ask_name)
  loop do
    player.assign_name(input.capitalize)
    next respondent.show(player.errors_store) unless player.valid?
    return player if player.valid?
  end
end
statistic() click to toggle source
# File lib/entities/console.rb, line 53
def statistic
  @statistic ||= Statistics.new
end
win() click to toggle source
# File lib/entities/console.rb, line 104
def win
  game.remove_instance_helpers
  respondent.show_message(:when_win)
  save_to_db(game) if input == ACTIONS_FOR_DATABASE[:save_player]
  new_process
end