class CodebreakerRostik::Game

Constants

LENGTH_GUESS_CODE
RANGE_GUESS_CODE

Attributes

attempts_left[R]
hints_left[R]
secret_code[R]
secret_code_for_hints[R]

Public Class Methods

new() click to toggle source
# File lib/game.rb, line 9
def initialize
  @hints_left = 0
  @attempts_left = 0
  @secret_code = generate_secrete_code
  @secret_code_for_hints = @secret_code.clone.shuffle
end

Public Instance Methods

attempts_left_increase(user) click to toggle source
# File lib/game.rb, line 32
def attempts_left_increase(user)
  user[:attempts_left] += 1
end
attempts_left_increment() click to toggle source
# File lib/game.rb, line 28
def attempts_left_increment
  @attempts_left += 1
end
compare_guess_and_secret_codes(guess_code) click to toggle source
# File lib/game.rb, line 41
def compare_guess_and_secret_codes(guess_code)
  @result_signs = ''
  double_secret_code = @secret_code.clone
  code_arr = guess_code.split('').map(&:to_i)
  double_guess_code = code_arr

  check_same_index(code_arr, double_secret_code, double_guess_code)
  [double_secret_code, double_guess_code].each(&:compact!)
  check_different_index(double_guess_code, double_secret_code)
  @result_signs
end
give_digit_hint() click to toggle source
# File lib/game.rb, line 36
def give_digit_hint
  @hints_left += 1
  @secret_code_for_hints.pop
end
hints_left_increase(user) click to toggle source
# File lib/game.rb, line 20
def hints_left_increase(user)
  user[:hints_left] += 1
end
hints_left_increment() click to toggle source
# File lib/game.rb, line 24
def hints_left_increment
  @hints_left += 1
end
valid_guess_code?(guess_code) click to toggle source
# File lib/game.rb, line 16
def valid_guess_code?(guess_code)
  validate_each_char_in_range?(guess_code.split(''), RANGE_GUESS_CODE) && valid_length?(guess_code, LENGTH_GUESS_CODE)
end

Private Instance Methods

check_different_index(double_guess_code, double_secret_code) click to toggle source
# File lib/game.rb, line 64
def check_different_index(double_guess_code, double_secret_code)
  double_guess_code.each do |guess_digit|
    next unless double_secret_code.include?(guess_digit)

    double_secret_code[double_secret_code.find_index(guess_digit)] = nil
    @result_signs += '-'
  end
end
check_same_index(code_arr, double_secret_code, double_guess_code) click to toggle source
# File lib/game.rb, line 55
def check_same_index(code_arr, double_secret_code, double_guess_code)
  code_arr.each_index do |index|
    next unless code_arr[index] == @secret_code[index]

    double_secret_code[index], double_guess_code[index] = nil
    @result_signs += '+'
  end
end
generate_secrete_code() click to toggle source
# File lib/game.rb, line 73
def generate_secrete_code
  Array.new(LENGTH_GUESS_CODE) { rand(RANGE_GUESS_CODE) }
end