class AndriiCodebreaker::Game

Attributes

available_hints[RW]
difficulties[R]
player_name[R]
secret_code[R]
used_attempts[RW]
used_hints[RW]

Public Class Methods

new(player, difficulties) click to toggle source
# File lib/andrii_codebreaker/game.rb, line 11
def initialize(player, difficulties)
  @player_name = player
  @difficulties = difficulties
  @used_attempts = 0
  @used_hints = 0
end

Public Instance Methods

check_result(result, guess) click to toggle source
# File lib/andrii_codebreaker/game.rb, line 58
def check_result(result, guess)
  guess.each.with_index do |code, index|
    result.sub!(MINUS, PLUS) if code == @secret_code[index]
  end
  result
end
code_valid?(code) click to toggle source
# File lib/andrii_codebreaker/game.rb, line 69
def code_valid?(code)
  code.to_s.match(/^[1-6]{4}$/)
end
compare_codes(guess) click to toggle source
# File lib/andrii_codebreaker/game.rb, line 48
def compare_codes(guess)
  @used_attempts += 1

  guess = guess.chars.map(&:to_i)
  minuses = (@secret_code & guess).map { |element| [@secret_code.count(element), guess.count(element)].min }.sum
  result = MINUS * minuses

  check_result(result, guess)
end
generate_code() click to toggle source
# File lib/andrii_codebreaker/game.rb, line 65
def generate_code
  Array.new(CODE_LENGTH_COUNT) { rand(RANGE_SECRET_CODE) }
end
hint() click to toggle source
# File lib/andrii_codebreaker/game.rb, line 23
def hint
  return unless left_hint?

  hint = @available_hints.chars.sample
  @available_hints.sub!(hint, '')
  @used_hints += 1
  hint
end
left_hint?() click to toggle source
# File lib/andrii_codebreaker/game.rb, line 32
def left_hint?
  @used_hints < @difficulties.hints
end
lose() click to toggle source
# File lib/andrii_codebreaker/game.rb, line 42
def lose
  return false if @used_attempts < @difficulties.attempts

  true
end
start() click to toggle source
# File lib/andrii_codebreaker/game.rb, line 18
def start
  @secret_code = generate_code
  @available_hints = @secret_code.join.dup
end
win?(guees) click to toggle source
# File lib/andrii_codebreaker/game.rb, line 36
def win?(guees)
  return true if @secret_code.join == guees

  false
end