Class: Codebreaker::ConsoleInterface

Inherits:
Object
  • Object
show all
Defined in:
lib/codebreaker/console_interface.rb

Constant Summary collapse

MAX_SYM_RANGE =
16
Welcome_text =
'Welcome to my codebreaker game!'
Game_start_text =
"\nThe game starts right now!"
Diff_select_text =
'Select difficulty'
Same_diff_tex =
'[Enter] to play same difficulty'
IndexErorr_text =
'Wrong number of arguments'
Guesses_took_0 =
'It took you'
Guesses_took_1 =
'guesses'
Ask_for_guess_text =
"Your guess: "
Score_is_text =
'Your score is:'
The_answer_text =
'The answer was'
Win_text =
'You won!'
Lose_text =
'You lost, noob!'
Replay_text =
'Wanna replay? (y/n)'
Bye_text =
'Bye!'

Instance Method Summary collapse

Instance Method Details

#ask_for_replayObject



97
98
99
100
# File 'lib/codebreaker/console_interface.rb', line 97

def ask_for_replay
  puts Replay_text
  answer = gets.chomp
end

#difficulty_infoObject



58
59
60
61
62
63
64
# File 'lib/codebreaker/console_interface.rb', line 58

def difficulty_info
  puts "
  Symbol range: #{@session.symbols_range}
  Symbols:      #{@session.symbols_count}
  Attempts:     #{@session.attempts}
  Hints:        #{@session.hints_left}"
end

#goodbyeObject



102
103
104
# File 'lib/codebreaker/console_interface.rb', line 102

def goodbye
  puts Bye_text
end

#guessingObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/codebreaker/console_interface.rb', line 66

def guessing
  loop do
    print Ask_for_guess_text
    guess = gets.chomp
    if guess == 'hint'
      p @session.hint.map {|x| x.is_a?(Fixnum) ? x.to_s(MAX_SYM_RANGE) : '*'}
    else
      begin
        code = guess.split('').map {|x| x.to_i(MAX_SYM_RANGE) }
        response = @session.guess code
        puts "#{'+' * response[0] + '-' * response[1]}"
      rescue IndexError
        puts IndexErorr_text
        next
      end
    end
    break unless @session.state == :playing
  end
end

#playObject



34
35
36
37
38
39
40
41
42
43
# File 'lib/codebreaker/console_interface.rb', line 34

def play
  loop do
    select_difficulty
    difficulty_info
    guessing
    @played = true
    results
    ask_for_replay == 'y' ? next : break
  end
end

#resultsObject



86
87
88
89
90
91
92
93
94
95
# File 'lib/codebreaker/console_interface.rb', line 86

def results
  if @session.state == :won
    puts Win_text
    puts "#{Guesses_took_0} #{@session.attempts_taken} #{Guesses_took_1}"
    puts "#{Score_is_text} #{@session.score}"
  elsif @session.state == :lost
    puts Lose_text
    puts "#{The_answer_text} #{@session.secret}"
  end
end

#select_difficultyObject



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/codebreaker/console_interface.rb', line 45

def select_difficulty
  puts "#{Diff_select_text} #{Game::GAME_SETTINGS.keys.inspect.delete(':')}"
  puts Same_diff_tex if @played
  diff = gets
  puts Game_start_text
  if @played && diff == "\n"
    @session.restart
  else
    diff.chomp!
    @session.start diff.to_sym
  end
end

#startObject



23
24
25
26
27
# File 'lib/codebreaker/console_interface.rb', line 23

def start
  welcome
  play
  goodbye
end

#welcomeObject



29
30
31
32
# File 'lib/codebreaker/console_interface.rb', line 29

def welcome
  puts Welcome_text
  @session  = Game.new
end