codebreaker-ga 0.2.8 → 0.2.9
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/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/lib/codebreaker/compare_codes.rb +4 -8
- data/lib/codebreaker/game.rb +20 -15
- data/lib/codebreaker/game_stage.rb +7 -4
- data/lib/codebreaker/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: be1e59f2f709152c69c3a63b15e3ba7418b2305f3c0de91f5f290cb330f1a696
|
4
|
+
data.tar.gz: 95342c1fac36f34f760109028bb85c13c9cf2ea3e8b8872f3de158aa1634a73a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2367c6e2ffc4fc051a03a4e5707f697b0bd447d2d91028729241de2e20f8f5c6dc041d5e25ad5c5e924bca676e16cb219b3f50a238e80ff57234074bad0e935
|
7
|
+
data.tar.gz: 493ff78fd80619b4f34726f4ed785f867875ba4319f407f92dbe15bb8a7cd886f891512140060e4a39200db169f031b7ce21a8c2800bc42302aefeae6d234aff
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
module Codebreaker
|
2
|
-
|
3
|
-
def
|
4
|
-
@
|
5
|
-
@secret_code_positions = get_code_positions(@secret_code)
|
6
|
-
end
|
7
|
-
|
8
|
-
def compare(match_code)
|
2
|
+
module CompareCodes
|
3
|
+
def compare(secret_code, match_code)
|
4
|
+
@secret_code_positions = get_code_positions(secret_code)
|
9
5
|
@match_code_positions = get_code_positions(match_code)
|
10
|
-
crossing_values =
|
6
|
+
crossing_values = secret_code & match_code
|
11
7
|
crossing_values.each_with_object([]) { |value, cross_result| cross_result << get_cross_value(value) }
|
12
8
|
.flatten.sort_by { |item| item ? 0 : 1 }
|
13
9
|
end
|
data/lib/codebreaker/game.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module Codebreaker
|
2
2
|
class Game < BaseClass
|
3
3
|
include InitDifficulties
|
4
|
+
include CompareCodes
|
4
5
|
|
5
6
|
CODE_LENGTH = 4
|
6
7
|
CODE_NUMBERS = ('1'..'6').freeze
|
@@ -18,35 +19,43 @@ module Codebreaker
|
|
18
19
|
def match_code_valid_length?(match_code)
|
19
20
|
return true if validate_length?(match_code, CODE_LENGTH..CODE_LENGTH)
|
20
21
|
|
21
|
-
|
22
|
+
@errors[:match_code] = 'error_match_code_length'
|
23
|
+
false
|
22
24
|
end
|
23
25
|
|
24
26
|
def validate_match_code_number_range?(match_code)
|
25
27
|
return true if validate_number_range?(match_code, CODE_NUMBERS)
|
26
28
|
|
27
|
-
|
29
|
+
@errors[:match_code] = 'error_match_code_number'
|
30
|
+
false
|
28
31
|
end
|
29
32
|
|
30
33
|
def difficulty=(difficulty)
|
31
34
|
@difficulty = @difficulties.detect { |value| value.name == difficulty }
|
35
|
+
difficulty_valid?
|
32
36
|
end
|
33
37
|
|
34
38
|
def game_start
|
35
39
|
generate_secret_code
|
36
40
|
generate_hints
|
37
|
-
@game_stage = GameStage.new(
|
41
|
+
@game_stage = GameStage.new(attempts: @difficulty.attempts)
|
38
42
|
end
|
39
43
|
|
40
44
|
def game_step(match_codes)
|
41
45
|
return unless match_code_valid?(match_codes)
|
46
|
+
return unless @game_stage.valide_allow_step?
|
42
47
|
|
43
|
-
@game_stage.step(
|
48
|
+
@game_stage.step(compare(@secret_code, match_codes))
|
44
49
|
@game_stage.compare_result
|
45
50
|
end
|
46
51
|
|
47
52
|
def registration(username)
|
48
53
|
@user = User.new(username)
|
49
|
-
|
54
|
+
if @user.valid?
|
55
|
+
{ status: true, value: @user.username }
|
56
|
+
else
|
57
|
+
{ status: false, value: @user.errors[:user] }
|
58
|
+
end
|
50
59
|
end
|
51
60
|
|
52
61
|
def hint_show
|
@@ -70,13 +79,6 @@ module Codebreaker
|
|
70
79
|
true
|
71
80
|
end
|
72
81
|
|
73
|
-
def difficulty_valid?
|
74
|
-
return true unless @difficulty.nil?
|
75
|
-
|
76
|
-
@errors[:difficulty] = 'difficulty_change_error'
|
77
|
-
false
|
78
|
-
end
|
79
|
-
|
80
82
|
def generate_number
|
81
83
|
Array.new(CODE_LENGTH) { CODE_NUMBERS.to_a.sample }
|
82
84
|
end
|
@@ -87,11 +89,14 @@ module Codebreaker
|
|
87
89
|
|
88
90
|
def generate_secret_code
|
89
91
|
@secret_code = generate_number
|
90
|
-
@compare_codes = CompareCodes.new(@secret_code)
|
91
92
|
end
|
92
93
|
|
93
|
-
def
|
94
|
-
|
94
|
+
def difficulty_valid?
|
95
|
+
return true unless @difficulty.nil?
|
96
|
+
|
97
|
+
@errors = {}
|
98
|
+
@errors[:difficulty] = 'difficulty_change_error'
|
99
|
+
false
|
95
100
|
end
|
96
101
|
end
|
97
102
|
end
|
@@ -3,20 +3,23 @@ module Codebreaker
|
|
3
3
|
attr_reader :step_number, :endgame, :attempts, :compare_result, :win
|
4
4
|
attr_accessor :hint_used
|
5
5
|
|
6
|
-
def initialize(
|
6
|
+
def initialize(attempts:)
|
7
7
|
@step_number = 1
|
8
8
|
@endgame = false
|
9
9
|
@attempts = attempts
|
10
10
|
@compare_result = []
|
11
|
-
@match_code_length = match_code_length
|
12
11
|
@hint_used = 0
|
13
12
|
end
|
14
13
|
|
15
14
|
def step(compare_result)
|
16
15
|
@compare_result = compare_result
|
17
16
|
@step_number += 1
|
18
|
-
@win = @compare_result.length ==
|
19
|
-
@endgame = true if
|
17
|
+
@win = @compare_result.length == Game::CODE_LENGTH && @compare_result.all?
|
18
|
+
@endgame = true if !valide_allow_step? || @win
|
19
|
+
end
|
20
|
+
|
21
|
+
def valide_allow_step?
|
22
|
+
@attempts >= @step_number
|
20
23
|
end
|
21
24
|
end
|
22
25
|
end
|
data/lib/codebreaker/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codebreaker-ga
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GorohovAlex
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|