ep-codebreaker 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +0 -1
- data/lib/ep-codebreaker/game.rb +17 -19
- data/lib/ep-codebreaker/game_writer.rb +23 -0
- data/lib/ep-codebreaker/messages.rb +1 -1
- data/lib/ep-codebreaker/version.rb +1 -1
- data/lib/ep-codebreaker.rb +2 -4
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9d8b421d3c5caf1b37d80b9d168a7ebc32820b58
|
|
4
|
+
data.tar.gz: 26c7ee1e48c44513879769ebce8984bc6b9d5e7f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f7e0278325eabc82ccfa08f38035df512801f64ef8270521b3ade44ad4a1bf3fe869bdec67adba03c481be69b2e5a8713491419181dfea4d67edd063acf1ec6c
|
|
7
|
+
data.tar.gz: a84d3cf7b3136cec8df57365cc71ef2262b1d43a60ec6496b62a9edce86c947a7b985c22b4a443975dc64325e41f79aa85c9e891be510c3cbaa050a8bf51b663
|
data/README.md
CHANGED
data/lib/ep-codebreaker/game.rb
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require_relative 'player'
|
|
4
|
+
require_relative 'game_writer'
|
|
5
|
+
|
|
3
6
|
module Codebreaker
|
|
4
7
|
class Game
|
|
8
|
+
include GameWriter
|
|
9
|
+
|
|
5
10
|
MIN = 1
|
|
6
11
|
MAX = 6
|
|
7
12
|
LENGTH = 4
|
|
@@ -42,10 +47,7 @@ module Codebreaker
|
|
|
42
47
|
@hints_left -= 1
|
|
43
48
|
define_stage
|
|
44
49
|
|
|
45
|
-
|
|
46
|
-
hint = '_' * LENGTH
|
|
47
|
-
hint[index] = @code[index]
|
|
48
|
-
hint
|
|
50
|
+
generate_hint
|
|
49
51
|
end
|
|
50
52
|
|
|
51
53
|
def finished?
|
|
@@ -60,18 +62,12 @@ module Codebreaker
|
|
|
60
62
|
@code if finished?
|
|
61
63
|
end
|
|
62
64
|
|
|
63
|
-
def save_score(name
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
scores = process_file(file_name)
|
|
67
|
-
scores << player
|
|
68
|
-
scores = scores.max_by(10, &:points)
|
|
69
|
-
|
|
70
|
-
File.open(file_name, 'w') { |f| f.write scores.to_yaml }
|
|
65
|
+
def save_score(name)
|
|
66
|
+
write Player.new(name, @tries_left, @hints_left)
|
|
71
67
|
end
|
|
72
68
|
|
|
73
|
-
def high_scores
|
|
74
|
-
process_file
|
|
69
|
+
def high_scores
|
|
70
|
+
process_file
|
|
75
71
|
end
|
|
76
72
|
|
|
77
73
|
def as_json
|
|
@@ -105,6 +101,13 @@ module Codebreaker
|
|
|
105
101
|
('+' * num_of_pluses) + ('-' * num_of_minuses)
|
|
106
102
|
end
|
|
107
103
|
|
|
104
|
+
def generate_hint
|
|
105
|
+
hint = '_' * LENGTH
|
|
106
|
+
index = @indexes_for_hint.delete(@indexes_for_hint.sample)
|
|
107
|
+
hint[index] = @code[index]
|
|
108
|
+
hint
|
|
109
|
+
end
|
|
110
|
+
|
|
108
111
|
def define_stage(result = '')
|
|
109
112
|
if result == ('+' * LENGTH)
|
|
110
113
|
@finished = true
|
|
@@ -114,11 +117,6 @@ module Codebreaker
|
|
|
114
117
|
end
|
|
115
118
|
end
|
|
116
119
|
|
|
117
|
-
def process_file(file_name)
|
|
118
|
-
return [] if !File.exist?(file_name) || File.zero?(file_name)
|
|
119
|
-
YAML.load_file(file_name)
|
|
120
|
-
end
|
|
121
|
-
|
|
122
120
|
def verify(input)
|
|
123
121
|
msg = "Guesses must consist of #{LENGTH} digits from #{MIN} to #{MAX}"
|
|
124
122
|
raise(ArgumentError, msg) if !input.is_a?(String) || !input.match?(REGEXP)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'yaml'
|
|
4
|
+
|
|
5
|
+
module Codebreaker
|
|
6
|
+
module GameWriter
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
FILE_NAME = 'scores.yml'.freeze
|
|
10
|
+
|
|
11
|
+
def write(player)
|
|
12
|
+
scores = process_file
|
|
13
|
+
scores << player
|
|
14
|
+
scores = scores.max_by(10, &:points)
|
|
15
|
+
File.open(FILE_NAME, 'w') { |f| f.write scores.to_yaml }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def process_file
|
|
19
|
+
return [] if !File.exist?(FILE_NAME) || File.zero?(FILE_NAME)
|
|
20
|
+
YAML.load_file(FILE_NAME)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
data/lib/ep-codebreaker.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ep-codebreaker
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Eugene Poberezhny
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-06-
|
|
11
|
+
date: 2017-06-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -75,6 +75,7 @@ files:
|
|
|
75
75
|
- lib/ep-codebreaker.rb
|
|
76
76
|
- lib/ep-codebreaker/console_app.rb
|
|
77
77
|
- lib/ep-codebreaker/game.rb
|
|
78
|
+
- lib/ep-codebreaker/game_writer.rb
|
|
78
79
|
- lib/ep-codebreaker/messages.rb
|
|
79
80
|
- lib/ep-codebreaker/player.rb
|
|
80
81
|
- lib/ep-codebreaker/version.rb
|