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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd386dbc10a479c2ef3009c011023e62302ddca4e3acff8673582ba96b73e508
4
- data.tar.gz: 3a597039a82a4e78bc29b8bb41c01133a785bbf958bf208cb2be4707ae86d3d7
3
+ metadata.gz: 157dbae0333bd8d36649060482f89ea9f7327d475f948e8fef0aeac1eb0dd64d
4
+ data.tar.gz: d1819c81e8c1c84eafafeb1d0cce41bf8a714d1e3bfa36e7d2bdebe931b61f73
5
5
  SHA512:
6
- metadata.gz: a8222847fefd1c56e9b0de5d945c0a18af5ee1f02fa33583b5c3ff1ccdaa17aa4314e38dc501a6a0d57425224cd9512c686b014056e08ec6e31f541ed424c2b6
7
- data.tar.gz: 33b13a1bf320dc6b9c5a349365246ebb1a17c647c1ecca6887aa836588a5cd8d1a8a7e94f7b33f83e140703f803a080d644940178c9b2d8e36cd9a8126864618
6
+ metadata.gz: 94d7ff189e12b46cee85e11ffc6a2c3cde3346d922e4525d864be652d426851aec4580d9bb2dec84cb34dcb9fd2d3119a4c7f8e2f38f89494357c4ca2c894dab
7
+ data.tar.gz: b0e22fee9f1104399f138e6042d8321d98ff88805809f26750dd5b0b934e10a9e63ea6f46560d438710134ed7f0c707fd2e43b14d4d5656245ebce1eb391446a
data/lib/db_methods.rb CHANGED
@@ -10,7 +10,7 @@ module DBMethods
10
10
  end
11
11
 
12
12
  def load_file(file)
13
- YAML.load_file(file) || []
13
+ YAML.load_file(file)
14
14
  rescue Errno::ENOENT
15
15
  []
16
16
  end
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,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NewSuperCodebreaker2021
4
- VERSION = "0.3.3"
4
+ VERSION = "0.3.4"
5
5
  end
@@ -1,112 +1,6 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml"
4
1
  require_relative "new_super_codebreaker_2021/version"
5
- require_relative "validate"
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 arr_code && check_length?(arr_code) && check_numbers?(arr_code)
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 false if number < 1 || number > 6
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.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-23 00:00:00.000000000 Z
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