new_super_codebreaker_2021 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
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