Class: Codebreaker::Game

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

Constant Summary collapse

ATTEMPTS_COUNT =
10
HINTS_COUNT =
3

Instance Method Summary collapse

Constructor Details

#initializeGame

Returns a new instance of Game.



6
7
8
9
10
11
# File 'lib/codebreaker/game.rb', line 6

def initialize
  @secret_code = generate_code
  @attempt = 0
  @hint = 0
  @is_winner = false
end

Instance Method Details

#ended?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/codebreaker/game.rb', line 46

def ended?
  ATTEMPTS_COUNT == @attempt || @is_winner
end

#generate_codeObject



13
14
15
# File 'lib/codebreaker/game.rb', line 13

def generate_code
  @secret_code = Array.new(4){ rand(6) + 1 }.join
end

#guess(input) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/codebreaker/game.rb', line 17

def guess(input)
  return if input.length != 4
  @attempt += 1
  secret = @secret_code.chars.map(&:to_i)
  result = []
  input.chars.map(&:to_i).each_with_index do |digit, index|
    if digit == secret[index]
      secret[index] = nil
      result << '+'
    elsif secret.include? digit
      secret[secret.find_index(digit)] = nil
      result << '-'
    end
  end
  normalized_output = result.sort.join
  @is_winner = true if normalized_output == '++++'
  normalized_output
end

#hintObject



36
37
38
39
40
# File 'lib/codebreaker/game.rb', line 36

def hint
  return unless HINTS_COUNT > @hint
  @hint += 1
  @secret_code[rand(4)]
end

#saveObject



50
51
52
53
54
# File 'lib/codebreaker/game.rb', line 50

def save
  YAML::Store.new('storage/storage.yml').transaction do |storage|
    storage[Time.now] = "attempts taken: #{@attempt}; hints used: #{@hint}; result: #{(winner? ? 'won' : 'loose')}"
  end
end

#winner?Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/codebreaker/game.rb', line 42

def winner?
  @is_winner
end