new_super_codebreaker_2021 0.3.3 → 0.3.4
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/db_methods.rb +1 -1
- data/lib/game.rb +86 -0
- data/lib/new_super_codebreaker_2021/version.rb +1 -1
- data/lib/new_super_codebreaker_2021.rb +1 -107
- data/lib/show_content.rb +0 -12
- data/lib/validate.rb +6 -2
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 157dbae0333bd8d36649060482f89ea9f7327d475f948e8fef0aeac1eb0dd64d
|
4
|
+
data.tar.gz: d1819c81e8c1c84eafafeb1d0cce41bf8a714d1e3bfa36e7d2bdebe931b61f73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94d7ff189e12b46cee85e11ffc6a2c3cde3346d922e4525d864be652d426851aec4580d9bb2dec84cb34dcb9fd2d3119a4c7f8e2f38f89494357c4ca2c894dab
|
7
|
+
data.tar.gz: b0e22fee9f1104399f138e6042d8321d98ff88805809f26750dd5b0b934e10a9e63ea6f46560d438710134ed7f0c707fd2e43b14d4d5656245ebce1eb391446a
|
data/lib/db_methods.rb
CHANGED
data/lib/game.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require_relative "validate"
|
3
|
+
require_relative "show_content"
|
4
|
+
require_relative "db_methods"
|
5
|
+
require_relative "user"
|
6
|
+
module NewSuperCodebreaker2021
|
7
|
+
class Game
|
8
|
+
include Validate
|
9
|
+
include ShowContent
|
10
|
+
include DBMethods
|
11
|
+
|
12
|
+
START_COMMANDS = %i[start rules stats exit].freeze
|
13
|
+
DIFFICULTY_COMMANDS = %i[easy medium hell exit].freeze
|
14
|
+
GUESS_COMMANDS = %i[hint rules exit].freeze
|
15
|
+
AFTER_GAME_COMMANDS = %i[start save exit].freeze
|
16
|
+
YES_NO_COMMANDS = %i[yes no].freeze
|
17
|
+
|
18
|
+
def chose_com(command)
|
19
|
+
START_COMMANDS.include?(command.to_sym) ? command.to_sym : false
|
20
|
+
end
|
21
|
+
|
22
|
+
def take_name(input_name)
|
23
|
+
if input_name == "exit"
|
24
|
+
:exit
|
25
|
+
else
|
26
|
+
validate_name(input_name)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def chose_difficulty(difficulty)
|
31
|
+
DIFFICULTY_COMMANDS.include?(difficulty.to_sym) ? difficulty.to_sym : false
|
32
|
+
end
|
33
|
+
|
34
|
+
def generate_code
|
35
|
+
Array.new(4) { rand(1..6) }
|
36
|
+
end
|
37
|
+
|
38
|
+
def user_guess(code)
|
39
|
+
GUESS_COMMANDS.include?(code.to_s.to_sym) ? code.to_s.to_sym : validate_user_code(code)
|
40
|
+
end
|
41
|
+
|
42
|
+
def take_hint(user, code, used_hints)
|
43
|
+
if user.hints_total > user.hints_used
|
44
|
+
user.hints_used += 1
|
45
|
+
used_hints.each { |hint| code.delete(hint) }
|
46
|
+
code.sample
|
47
|
+
else
|
48
|
+
false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def after_game_commands(command)
|
53
|
+
AFTER_GAME_COMMANDS.include?(command.to_sym) ? command.to_sym : false
|
54
|
+
end
|
55
|
+
|
56
|
+
def attempt_to_start(command)
|
57
|
+
YES_NO_COMMANDS.include?(command.to_sym) ? command.to_sym : false
|
58
|
+
end
|
59
|
+
|
60
|
+
def compare_codes(secret_code, user_code)
|
61
|
+
matches, u_char = number_on_right_place(secret_code, user_code)
|
62
|
+
number_in_secret_code(secret_code, user_code, matches, u_char)
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def number_on_right_place(secret_code, user_code)
|
68
|
+
matches = []
|
69
|
+
u_char = []
|
70
|
+
user_code.each_index do |i|
|
71
|
+
if secret_code[i] == user_code[i]
|
72
|
+
matches.unshift("+")
|
73
|
+
u_char << user_code[i]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
[matches, u_char]
|
77
|
+
end
|
78
|
+
|
79
|
+
def number_in_secret_code(secret_code, user_code, matches, u_char)
|
80
|
+
user_code.each do |element|
|
81
|
+
matches.push("-") if secret_code.include?(element) && !u_char.include?(element)
|
82
|
+
end
|
83
|
+
matches
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -1,112 +1,6 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "yaml"
|
4
1
|
require_relative "new_super_codebreaker_2021/version"
|
5
|
-
|
6
|
-
require_relative "show_content"
|
7
|
-
require_relative "db_methods"
|
8
|
-
require_relative "user"
|
2
|
+
require "game"
|
9
3
|
|
10
4
|
module NewSuperCodebreaker2021
|
11
5
|
class Error < StandardError; end
|
12
|
-
|
13
|
-
class Game
|
14
|
-
include Validate
|
15
|
-
include ShowContent
|
16
|
-
include DBMethods
|
17
|
-
def chose_com(command)
|
18
|
-
case command
|
19
|
-
when "start" then :start
|
20
|
-
when "rules" then :rules
|
21
|
-
when "stats" then :stats
|
22
|
-
when "exit" then :exit
|
23
|
-
else false
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def take_name(input_name)
|
28
|
-
if input_name == "exit"
|
29
|
-
:exit
|
30
|
-
else
|
31
|
-
validate_name(input_name)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def chose_difficulty(difficulty)
|
36
|
-
case difficulty
|
37
|
-
when "easy" then :easy
|
38
|
-
when "medium" then :medium
|
39
|
-
when "hell" then :hell
|
40
|
-
when "exit" then :exit
|
41
|
-
else
|
42
|
-
false
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def generate_code
|
47
|
-
Array.new(4) { rand(1..6) }
|
48
|
-
end
|
49
|
-
|
50
|
-
def user_guess(code)
|
51
|
-
case code
|
52
|
-
when "exit" then :exit
|
53
|
-
when "hint" then :hint
|
54
|
-
when "rules" then :rules
|
55
|
-
else validate_user_code(code)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def take_hint(user, code, used_hints)
|
60
|
-
if user.hints_total > user.hints_used
|
61
|
-
user.hints_used += 1
|
62
|
-
used_hints.each { |hint| code.delete(hint) }
|
63
|
-
code.sample
|
64
|
-
else
|
65
|
-
false
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def after_game_commands(command)
|
70
|
-
case command
|
71
|
-
when "start" then :start
|
72
|
-
when "save" then :save
|
73
|
-
when "exit" then :exit
|
74
|
-
else false
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
def attempt_to_start(command)
|
79
|
-
case command
|
80
|
-
when "yes" then :yes
|
81
|
-
when "no" then :no
|
82
|
-
else false
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
def compare_codes(secret_code, user_code)
|
87
|
-
matches, u_char = number_on_right_place(secret_code, user_code)
|
88
|
-
number_in_secret_code(secret_code, user_code, matches, u_char)
|
89
|
-
end
|
90
|
-
|
91
|
-
private
|
92
|
-
|
93
|
-
def number_on_right_place(secret_code, user_code)
|
94
|
-
matches = []
|
95
|
-
u_char = []
|
96
|
-
user_code.each_index do |i|
|
97
|
-
if secret_code[i] == user_code[i]
|
98
|
-
matches.unshift("+")
|
99
|
-
u_char << user_code[i]
|
100
|
-
end
|
101
|
-
end
|
102
|
-
[matches, u_char]
|
103
|
-
end
|
104
|
-
|
105
|
-
def number_in_secret_code(secret_code, user_code, matches, u_char)
|
106
|
-
user_code.each do |element|
|
107
|
-
matches.push("-") if secret_code.include?(element) && !u_char.include?(element)
|
108
|
-
end
|
109
|
-
matches
|
110
|
-
end
|
111
|
-
end
|
112
6
|
end
|
data/lib/show_content.rb
CHANGED
@@ -1,20 +1,8 @@
|
|
1
1
|
module ShowContent
|
2
|
-
def show_rules(rules)
|
3
|
-
rules
|
4
|
-
end
|
5
|
-
|
6
2
|
def show_stats(file)
|
7
3
|
data = YAML.load_file(file) || []
|
8
4
|
data.sort_by(&:hints_used).sort_by(&:attempts_used).sort_by { |game| -game.difficulty }
|
9
5
|
rescue Errno::ENOENT
|
10
6
|
[]
|
11
7
|
end
|
12
|
-
|
13
|
-
def show_goodbye(goodbye)
|
14
|
-
goodbye
|
15
|
-
end
|
16
|
-
|
17
|
-
def show_error(error)
|
18
|
-
error
|
19
|
-
end
|
20
8
|
end
|
data/lib/validate.rb
CHANGED
@@ -9,7 +9,7 @@ module Validate
|
|
9
9
|
|
10
10
|
def validate_user_code(us_code)
|
11
11
|
arr_code = check_splitting(us_code)
|
12
|
-
if
|
12
|
+
if valid_number?(arr_code)
|
13
13
|
arr_code
|
14
14
|
else
|
15
15
|
false
|
@@ -18,6 +18,10 @@ module Validate
|
|
18
18
|
|
19
19
|
private
|
20
20
|
|
21
|
+
def valid_number?(arr_code)
|
22
|
+
arr_code && check_length?(arr_code) && check_numbers?(arr_code)
|
23
|
+
end
|
24
|
+
|
21
25
|
def check_splitting(code)
|
22
26
|
code.chars.map!(&:to_i) if integer?(code)
|
23
27
|
end
|
@@ -32,7 +36,7 @@ module Validate
|
|
32
36
|
|
33
37
|
def check_numbers?(code)
|
34
38
|
code.each do |number|
|
35
|
-
return
|
39
|
+
return if number < 1 || number > 6
|
36
40
|
end
|
37
41
|
true
|
38
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: new_super_codebreaker_2021
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nazar Dakhno
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: fasterer
|
@@ -96,6 +96,7 @@ files:
|
|
96
96
|
- bin/console
|
97
97
|
- bin/setup
|
98
98
|
- lib/db_methods.rb
|
99
|
+
- lib/game.rb
|
99
100
|
- lib/new_super_codebreaker_2021.rb
|
100
101
|
- lib/new_super_codebreaker_2021/version.rb
|
101
102
|
- lib/show_content.rb
|