Class: Codebreaker::Game

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

Constant Summary collapse

HINT =
1
ATTEMPS =
10
PROPER =
'+'
WRONG_POSITION =
'-'

Instance Method Summary collapse

Constructor Details

#initializeGame

Returns a new instance of Game.



12
13
14
15
16
17
# File 'lib/edlvj_codebreaker.rb', line 12

def initialize
  @secret_code = Array.new(4) { rand(1..6) }.join
  @hint = HINT
  @attempts = ATTEMPS
  @win_status = false
end

Instance Method Details

#get_hintObject



48
49
50
51
# File 'lib/edlvj_codebreaker.rb', line 48

def get_hint
  @hint -= 1
  @hint >= 0 ? @secret_code[rand(4)] : "Not Available"
end

#loose?Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/edlvj_codebreaker.rb', line 40

def loose?
  @attempts == 0  
end

#match_guess(code) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/edlvj_codebreaker.rb', line 19

def match_guess(code)
  return "Your code is not valid" unless code.match(/(^([1-6]{4})$)/)
  
  @win_status = true if @secret_code == code
  @attempts -= 1
  secret = @secret_code.chars.map(&:to_i)
  
  res = []
  code.chars.map(&:to_i).each_with_index do |number, index|
    if number == secret[index]
      secret[index] = nil
      res << PROPER
    elsif secret.include? number
      secret[secret.find_index(number)] = nil
      res << WRONG_POSITION
    end  
  end 
 
  res.join
end

#save_stat(username) ⇒ Object



53
54
55
56
57
# File 'lib/edlvj_codebreaker.rb', line 53

def save_stat( username )
  File.open('./stat.yml','a+') do |f|
    f.write([user: username, attempts: @attempts, date: Time.now].to_yaml)
  end
end

#win?Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/edlvj_codebreaker.rb', line 44

def win?
  @win_status
end