class Codebreaker::Game
Constants
- DIFFICULTIES
Attributes
attempts[R]
hints[R]
secret_code[R]
user_code[RW]
Public Class Methods
generate_game_data(difficulty = :easy)
click to toggle source
# File lib/codebreaker/game.rb, line 21 def self.generate_game_data(difficulty = :easy) data = Hash.new(Array.new(4) { rand(1..6) }) data[:attempts] = DIFFICULTIES.dig(difficulty, :attempts) data[:hints] = data.default.shuffle.take(DIFFICULTIES.dig(difficulty, :hints)) data end
new(secret_code, attempts, hints)
click to toggle source
# File lib/codebreaker/game.rb, line 15 def initialize(secret_code, attempts, hints) @secret_code = secret_code @attempts = attempts @hints = hints end
Public Instance Methods
equal_codes?(user_answer)
click to toggle source
# File lib/codebreaker/game.rb, line 43 def equal_codes?(user_answer) secret_code.join == user_answer end
handle_guess(user_answer)
click to toggle source
# File lib/codebreaker/game.rb, line 28 def handle_guess(user_answer) @user_code = user_answer.each_char.map(&:to_i) handle_numbers @attempts -= 1 @round_result.empty? ? 'No matches' : @round_result end
take_a_hint!()
click to toggle source
# File lib/codebreaker/game.rb, line 39 def take_a_hint! @hints.pop end
valid_answer?(user_answer)
click to toggle source
# File lib/codebreaker/game.rb, line 35 def valid_answer?(user_answer) user_answer =~ /^[1-6]{4}$/ end
Private Instance Methods
check_numbers_for_correct_position()
click to toggle source
# File lib/codebreaker/game.rb, line 49 def check_numbers_for_correct_position secret_code.map.with_index do |element, index| next element unless element == user_code[index] user_code[index] = nil end end
handle_numbers()
click to toggle source
# File lib/codebreaker/game.rb, line 56 def handle_numbers uncatched_numbers = check_numbers_for_correct_position @round_result = '+' * uncatched_numbers.select(&:nil?).size user_code.compact.map do |number| next unless uncatched_numbers.compact.include?(number) @round_result += '-' uncatched_numbers[uncatched_numbers.index(number)] = nil end end