class CodebreakerArtem::Game
Constants
- MAX_GUESS_NUMBER
Attributes
guess_count[R]
score[R]
secret_code[R]
Public Class Methods
new()
click to toggle source
# File lib/codebreaker_artem/game.rb, line 9 def initialize @guess_count = 0 @score = 0 @hint_available = true end
Public Instance Methods
hint()
click to toggle source
# File lib/codebreaker_artem/game.rb, line 27 def hint return unless hint_available? @hint_available = false position = rand(0..3) [@secret_code[position], position] end
mark_guess(guess)
click to toggle source
# File lib/codebreaker_artem/game.rb, line 19 def mark_guess(guess) return false unless Validator.code_valid? guess @guess_count += 1 counts = plus_minus_count(guess) score_set(counts[:pluses], counts[:minuses]) '' << ('+' * counts[:pluses]) << ('-' * counts[:minuses]) end
start()
click to toggle source
# File lib/codebreaker_artem/game.rb, line 15 def start generate_secret_code end
Private Instance Methods
generate_secret_code()
click to toggle source
# File lib/codebreaker_artem/game.rb, line 36 def generate_secret_code @secret_code = Array.new(4) { rand(1..6) }.join end
hint_available?()
click to toggle source
# File lib/codebreaker_artem/game.rb, line 60 def hint_available? @hint_available end
minus_count(not_plus)
click to toggle source
# File lib/codebreaker_artem/game.rb, line 48 def minus_count(not_plus) code = not_plus.transpose[0] guess = not_plus.transpose[1] guess.each { |item| code.delete_at(code.index(item) || code.length) } not_plus.count - code.size end
plus_minus_count(guess)
click to toggle source
# File lib/codebreaker_artem/game.rb, line 40 def plus_minus_count(guess) return { pluses: 4, minuses: 0 } if @secret_code == guess zipped = @secret_code.split('').zip(guess.split('')) not_plus = zipped.delete_if { |item| item.uniq.one? } plus_count = 4 - not_plus.count { pluses: plus_count, minuses: minus_count(not_plus) } end
score_set(plus_count, minus_count)
click to toggle source
# File lib/codebreaker_artem/game.rb, line 55 def score_set(plus_count, minus_count) @score = (plus_count * 3) + (minus_count * 1) + (MAX_GUESS_NUMBER - @guess_count) end