class Codebraker::Game

Attributes

attempts[R]
hints[R]
result_of_comparing[R]

Public Class Methods

new() click to toggle source
# File lib/codebracker/game.rb, line 9
def initialize
  @secret_code = ''
  @user_suggested_code = ''
  @attempts = 5
  @hints = 2
  @score = 0
  generate_code
end

Public Instance Methods

compare_codes() click to toggle source
# File lib/codebracker/game.rb, line 43
def compare_codes
  @secret_code_for_comparing = @secret_code.dup
  4.times { |i|
    if @secret_code_for_comparing[i] == @user_suggested_code[i]
      @secret_code_for_comparing[i] = '$'
      @user_suggested_code[i] = '+'
    end
  }
  4.times { |i|
    if @secret_code_for_comparing.include?(@user_suggested_code[i])
      @secret_code_for_comparing.sub!(@user_suggested_code[i], '$')
      @user_suggested_code[i] = '-'
    end
  }
  4.times { |i|
    if /[\d]/ =~ @user_suggested_code[i]
      @user_suggested_code[i] = ' '
    end
  }
  @result_of_comparing = @user_suggested_code.dup
end
count_score() click to toggle source
# File lib/codebracker/game.rb, line 65
def count_score
  @score = @attempts * 10 + @hints * 15
end
decrease_attempts() click to toggle source
# File lib/codebracker/game.rb, line 69
def decrease_attempts
  @attempts -= 1
end
generate_code() click to toggle source
# File lib/codebracker/game.rb, line 34
def generate_code
  @secret_code = (1..4).map { rand(1..6) }.join
end
loose?() click to toggle source
# File lib/codebracker/game.rb, line 30
def loose?
  @attempts.zero?
end
show_hint() click to toggle source
# File lib/codebracker/game.rb, line 79
def show_hint
  puts @secret_code[rand(0..3)]
end
show_result_of_comparing() click to toggle source
# File lib/codebracker/game.rb, line 83
def show_result_of_comparing
  puts @user_suggested_code
end
start(user_suggested_code) click to toggle source
# File lib/codebracker/game.rb, line 18
def start(user_suggested_code)
  @user_suggested_code = user_suggested_code
  decrease_attempts
  validate_input(user_suggested_code)
  compare_codes
  show_result_of_comparing
end
use_hint() click to toggle source
# File lib/codebracker/game.rb, line 73
def use_hint
  return ABSENT_HITNS_MESSAGE if @hints.zero?
  @hints -= 1
  show_hint
end
validate_input(input) click to toggle source
# File lib/codebracker/game.rb, line 38
def validate_input(input)
  raise ArgumentError, 'Type exactly 4 integer' unless input.length == 4
  raise ArgumentError, 'Type only integers from 1 to 6' if input =~ /[^1-6]/
end
win?() click to toggle source
# File lib/codebracker/game.rb, line 26
def win?
  @result_of_comparing == '++++'
end