codebreaker-rg-te 0.1.14 → 0.1.16
Sign up to get free protection for your applications and to get access to all the features.
- 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
|