Class: Game

Inherits:
Object
  • Object
show all
Extended by:
Codebreaker::Storage
Defined in:
lib/codebreaker.rb

Constant Summary collapse

STATUS_IN_PROGRESS =
:in_progress
STATUS_WIN =
:win
STATUS_LOSE =
:lose

Constants included from Codebreaker::Storage

Codebreaker::Storage::FILE_NAME

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Codebreaker::Storage

init_store, load, save, storage_exists?, store

Constructor Details

#initializeGame

Returns a new instance of Game.



14
15
16
17
18
19
20
# File 'lib/codebreaker.rb', line 14

def initialize
  @secret_code = Codebreaker::CodeGenerator.generate
  @status = STATUS_IN_PROGRESS
  @hints = @secret_code.sample(@secret_code.length)
  @storage = Game.store
  save_storage unless Game.storage_exists?
end

Instance Attribute Details

#userObject (readonly)

Returns the value of attribute user.



8
9
10
# File 'lib/codebreaker.rb', line 8

def user
  @user
end

Instance Method Details

#create_difficulty(difficulty_name) ⇒ Object



26
27
28
# File 'lib/codebreaker.rb', line 26

def create_difficulty(difficulty_name)
  @difficulty = Codebreaker::DifficultyFactory.generate(difficulty_name)
end

#create_user(name, difficulty) ⇒ Object



22
23
24
# File 'lib/codebreaker.rb', line 22

def create_user(name, difficulty)
  @user = Codebreaker::User.new(name, difficulty)
end

#lose?Boolean

Returns:

  • (Boolean)


34
35
36
# File 'lib/codebreaker.rb', line 34

def lose?
  @status == STATUS_LOSE
end

#save_storageObject



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

def save_storage
  @storage.transaction do
    @storage[:winners] = @winners || []
  end
end

#take_attempt(guess) ⇒ Object



44
45
46
47
48
49
# File 'lib/codebreaker.rb', line 44

def take_attempt(guess)
  return equal(@secret_code, guess.to_s) if user.attempts?

  @status = STATUS_LOSE
  nil
end

#take_hintObject



38
39
40
41
42
# File 'lib/codebreaker.rb', line 38

def take_hint
  user.hint if user.hints?

  @hints.pop
end

#win?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/codebreaker.rb', line 30

def win?
  @status == STATUS_WIN
end