codebreaker-rg-te 0.1.14 → 0.1.16
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/lib/codebreaker.rb +1 -9
- data/lib/codebreaker/console.rb +19 -21
- data/lib/codebreaker/game.rb +28 -16
- data/lib/codebreaker/validation.rb +4 -4
- metadata +2 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5bc73e3efb3c0ed966cf0714f5fd0caa4c3a8f8
|
4
|
+
data.tar.gz: '0094d8dec63d2938c89f42286b4985235a292a4b'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05e272aa262a9e221290e4cdd9c79890958f848ef4d4676b4cbdbd3c4089a15f1728805faaa2afae2d6c832149dd2642d960b301b3e449450d2c73516e3193d5
|
7
|
+
data.tar.gz: d960c5c1e39030f6aa1e462e53222f89f8f6f387052f6877b1d6dcb04306e8d10c85c889505fa069466b5750db90f4381f0ddfd08a7d5053cbd0ea1dfc6cce27
|
data/lib/codebreaker.rb
CHANGED
@@ -1,12 +1,4 @@
|
|
1
|
-
require '
|
2
|
-
require 'yaml'
|
3
|
-
require 'codebreaker/storage/storage_interceptor.rb'
|
4
|
-
require 'codebreaker/console.rb'
|
5
|
-
require 'codebreaker/localization.rb'
|
6
|
-
require 'codebreaker/validation.rb'
|
7
|
-
require 'codebreaker/statistics.rb'
|
8
|
-
require 'codebreaker/game.rb'
|
9
|
-
require 'codebreaker.rb'
|
1
|
+
require 'autoload.rb'
|
10
2
|
|
11
3
|
module Codebreaker
|
12
4
|
end
|
data/lib/codebreaker/console.rb
CHANGED
@@ -14,32 +14,22 @@ module Codebreaker
|
|
14
14
|
ANSWERS = { yes: 'yes' }.freeze
|
15
15
|
|
16
16
|
def launch
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
return check_answer
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def start_game
|
26
|
-
@game = Codebreaker::Game.new
|
27
|
-
enter_name
|
28
|
-
enter_level
|
29
|
-
@game.new_game
|
30
|
-
round_game
|
17
|
+
message(:start_game)
|
18
|
+
message(:wel_instruct, COMMANDS)
|
19
|
+
@answer = read_from_console
|
20
|
+
check_answer
|
31
21
|
end
|
32
22
|
|
33
23
|
def round_game
|
34
24
|
while @game.attempts.positive?
|
35
25
|
user_answer = message_game_read_console
|
36
26
|
next hint_show if user_answer == HINT
|
37
|
-
next message(:invalid_number) unless @game.validate_code(user_answer)
|
27
|
+
next message(:invalid_number) unless @game.validate_code(user_answer, Codebreaker::Game::USER_ANSWER_REX)
|
38
28
|
|
39
29
|
@game.handle_guess(user_answer)
|
30
|
+
message_game_result
|
40
31
|
return win if @game.equal_codes?(user_answer)
|
41
32
|
|
42
|
-
message_game_result
|
43
33
|
end
|
44
34
|
loose
|
45
35
|
end
|
@@ -63,11 +53,6 @@ module Codebreaker
|
|
63
53
|
continue_game? ? start_game : exit
|
64
54
|
end
|
65
55
|
|
66
|
-
def continue_game?
|
67
|
-
message(:new_game)
|
68
|
-
read_from_console.eql? ANSWERS[:yes]
|
69
|
-
end
|
70
|
-
|
71
56
|
def stats_show
|
72
57
|
@stat = Codebreaker::Statistics.new
|
73
58
|
return message(:empty_stat) unless data = @stat.stats
|
@@ -85,6 +70,19 @@ module Codebreaker
|
|
85
70
|
|
86
71
|
private
|
87
72
|
|
73
|
+
def continue_game?
|
74
|
+
message(:new_game)
|
75
|
+
read_from_console.eql? ANSWERS[:yes]
|
76
|
+
end
|
77
|
+
|
78
|
+
def start_game
|
79
|
+
@game = Codebreaker::Game.new
|
80
|
+
enter_name
|
81
|
+
enter_level
|
82
|
+
@game.new_game
|
83
|
+
round_game
|
84
|
+
end
|
85
|
+
|
88
86
|
def check_answer
|
89
87
|
case @answer
|
90
88
|
when COMMANDS[:start] then start_game
|
data/lib/codebreaker/game.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module Codebreaker
|
4
4
|
class Game
|
5
5
|
include Validation
|
6
|
-
attr_reader :attempts, :hints, :level, :name, :level_num
|
6
|
+
attr_reader :attempts, :hints, :level, :name, :level_num, :current_time
|
7
7
|
attr_reader :hints_index, :result
|
8
8
|
attr_reader :user_code, :secret_code, :phrases
|
9
9
|
RANGE = (1..6).freeze
|
@@ -17,6 +17,7 @@ module Codebreaker
|
|
17
17
|
COUNTS_OF_HINTS = (0..3).freeze
|
18
18
|
DIGITS_COUNT = 4
|
19
19
|
USER_ANSWER_REX = /^[1-6]{4}$/.freeze
|
20
|
+
NAME_SIZE_RANGE = (3..20).freeze
|
20
21
|
|
21
22
|
def new_game
|
22
23
|
@secret_code = Array.new(DIGITS_COUNT) { rand(RANGE) }
|
@@ -34,7 +35,7 @@ module Codebreaker
|
|
34
35
|
end
|
35
36
|
|
36
37
|
def enter_name(name)
|
37
|
-
return unless validate_length(name)
|
38
|
+
return unless validate_length(name, NAME_SIZE_RANGE)
|
38
39
|
|
39
40
|
@name = name
|
40
41
|
end
|
@@ -65,8 +66,27 @@ module Codebreaker
|
|
65
66
|
end
|
66
67
|
|
67
68
|
def game_result
|
68
|
-
|
69
|
+
puts @secret_code
|
70
|
+
count_plus + count_minus
|
71
|
+
end
|
72
|
+
|
73
|
+
def storage_data(codebreaker_data)
|
74
|
+
attempts_used = GAME_LEVELS.dig(level.to_sym, :attempts) - attempts
|
75
|
+
hints_used = GAME_LEVELS.dig(level.to_sym, :hints) - hints
|
76
|
+
game_date = Time.new.strftime "%Y/%m/%d %H:%M:%S"
|
77
|
+
hash_stat = { name: @name, level: @level, level_num: @level_num, attempts: @attempts, attempts_used: attempts_used, hints: @hints, hints_used: hints_used, game_date: game_date }
|
78
|
+
codebreaker_data << hash_stat
|
79
|
+
end
|
69
80
|
|
81
|
+
def save
|
82
|
+
storage = StorageInterceptor.new
|
83
|
+
codebreaker_data = storage.read_database || []
|
84
|
+
storage.write_database(storage_data(codebreaker_data))
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
def count_plus
|
70
90
|
result = ''
|
71
91
|
@secret_code_clone = @secret_code.clone
|
72
92
|
@user_code.each_with_index do |digit, index|
|
@@ -76,7 +96,12 @@ module Codebreaker
|
|
76
96
|
@secret_code_clone[index] = nil
|
77
97
|
@user_code[index] = nil
|
78
98
|
end
|
99
|
+
result
|
100
|
+
end
|
79
101
|
|
102
|
+
def count_minus
|
103
|
+
result = ''
|
104
|
+
@secret_code_clone = @secret_code.clone
|
80
105
|
@user_code.compact.each_with_index do |digit, _index|
|
81
106
|
next unless @secret_code_clone.include?(digit)
|
82
107
|
|
@@ -85,18 +110,5 @@ module Codebreaker
|
|
85
110
|
end
|
86
111
|
result
|
87
112
|
end
|
88
|
-
|
89
|
-
def storage_data(codebreaker_data)
|
90
|
-
attempts_used = GAME_LEVELS.dig(level.to_sym, :attempts) - attempts
|
91
|
-
hints_used = GAME_LEVELS.dig(level.to_sym, :hints) - hints
|
92
|
-
hash_stat = { name: @name, level: @level, level_num: @level_num, attempts: @attempts, attempts_used: attempts_used, hints: @hints, hints_used: hints_used }
|
93
|
-
codebreaker_data << hash_stat
|
94
|
-
end
|
95
|
-
|
96
|
-
def save
|
97
|
-
storage = StorageInterceptor.new
|
98
|
-
codebreaker_data = storage.read_database || []
|
99
|
-
storage.write_database(storage_data(codebreaker_data))
|
100
|
-
end
|
101
113
|
end
|
102
114
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Validation
|
2
|
-
def validate_length(word)
|
3
|
-
|
2
|
+
def validate_length(word, range)
|
3
|
+
range.include?(word.size)
|
4
4
|
end
|
5
5
|
|
6
|
-
def validate_code(code)
|
7
|
-
code =~
|
6
|
+
def validate_code(code, regexp)
|
7
|
+
code =~ regexp
|
8
8
|
end
|
9
9
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codebreaker-rg-te
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eugene Tereschenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: fasterer
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: i18n
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|