class Codebreaker::Game

Constants

CODE_LENGTH
CODE_RANGE

Attributes

all_attempts[RW]
all_hints[RW]
attempts_left[RW]
code[RW]
difficulties[RW]
difficulty[RW]
hints_code[R]
hints_left[RW]
input_code[RW]
name[RW]

Public Class Methods

new(name, difficulty) click to toggle source
# File lib/codebreaker/game.rb, line 12
def initialize(name, difficulty)
  @difficulties = Loader.load('difficulties')
  @code = generate_code
  @hints_code = @code.chars.shuffle
  game_option(name, difficulty)
end

Public Instance Methods

attempts_left?() click to toggle source
# File lib/codebreaker/game.rb, line 47
def attempts_left?
  attempts_left.positive?
end
game_option(name, difficulty) click to toggle source
# File lib/codebreaker/game.rb, line 19
def game_option(name, difficulty)
  @name = name
  @difficulty = difficulty.to_sym
  @all_attempts = difficulty_option[:attempts]
  @all_hints = difficulty_option[:hints]
  @attempts_left = difficulty_option[:attempts]
  @hints_left = difficulty_option[:hints]
end
hint() click to toggle source
# File lib/codebreaker/game.rb, line 28
def hint
  return unless hints_left?

  @hints_left -= 1
  generate_hint
end
hints_left?() click to toggle source
# File lib/codebreaker/game.rb, line 35
def hints_left?
  hints_left.positive?
end
input_operation(input_code) click to toggle source
# File lib/codebreaker/game.rb, line 39
def input_operation(input_code)
  @input_code = input_code
  return unless attempts_left?

  @attempts_left -= 1
  check_input(@code, @input_code)
end
save(filename = 'stats') click to toggle source
# File lib/codebreaker/game.rb, line 55
def save(filename = 'stats')
  Codebreaker::Loader.save(to_h, filename)
end
win?() click to toggle source
# File lib/codebreaker/game.rb, line 51
def win?
  input_code == code
end

Private Instance Methods

check_input(code, input) click to toggle source
# File lib/codebreaker/game.rb, line 73
def check_input(code, input)
  guess_checker = Codebreaker::GuessChecker.new(code, input)
  guess_checker.symbols
  guess_checker.check_input
end
difficulty_option() click to toggle source
# File lib/codebreaker/game.rb, line 69
def difficulty_option
  @difficulties[@difficulty]
end
generate_code() click to toggle source
# File lib/codebreaker/game.rb, line 61
def generate_code
  Array.new(CODE_LENGTH) { rand(CODE_RANGE) }.join
end
generate_hint() click to toggle source
# File lib/codebreaker/game.rb, line 65
def generate_hint
  @hints_code.pop
end
to_h() click to toggle source
# File lib/codebreaker/game.rb, line 79
def to_h
  {
    name: @name,
    difficulty: @difficulty,
    attempts: @all_attempts,
    hints: @all_hints,
    code: @code,
    used_attempts: @all_attempts - @attempts_left,
    used_hints: @all_hints - @hints_left,
    date: Time.now
  }
end