codebreaker_kub 0.1.7 → 0.2.3

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: 368897134f5e57306064d5dcc9b5ad197a11e77070d3b1923b8c9250160af688
4
- data.tar.gz: 918822ffa12cd59fa3744487b0b22415d98fc09c2e38d6f4e6fb7dbfd9d9daa7
3
+ metadata.gz: d1f87c8960638cc276a0e4696362cae4a24d49cd34cfc994bc75b1a50f6460a9
4
+ data.tar.gz: 9156070ec7042aab41049a171a876d78ef55785d846d8c5d863771243480eadb
5
5
  SHA512:
6
- metadata.gz: 2caf1d95e69d331e6de3d39f65007d5d3402388f550475cda78a53b8504a1d65f65ed3e63d72380a199163a4d731d4906c46c57de31443bb2cc0b6cb83d2dba6
7
- data.tar.gz: 58b74baba40482c14d058334ba18cc57b490c468c97e68f7c39dacc0ef52b22dda652637dc37724a291a697970e02e485bd3e966893fbd5fff70c26adc17b030
6
+ metadata.gz: cb5a4a7bc9b7395e7fbd57b28410b66ad18bc465678f3d603611b7c7eeea5974496570b0aa3c6a0ce867a38aa232607a4fa25ff5f5129f0c39fea84da2bfda25
7
+ data.tar.gz: d440bc81a3ceb655c4557bf6d7566f1f842e2a48519710937ac9576e1e9f923e1d580dc1d455b36f44fffa6a26513c3073cf5f18504d387161b96864119d47e8
@@ -7,9 +7,6 @@ Style/Documentation:
7
7
  Layout/LineLength:
8
8
  Max: 110
9
9
 
10
- Style/FrozenStringLiteralComment:
11
- Enabled: false
12
-
13
10
  Metrics/BlockLength:
14
11
  Enabled: false
15
12
 
data/Gemfile CHANGED
@@ -1,7 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in codebreaker.gemspec
4
6
  gemspec
5
-
6
- gem 'rake', '~> 12.0'
7
- gem 'rspec', '~> 3.0'
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- codebreaker_kub (0.1.6)
4
+ codebreaker_kub (0.2.3)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -65,7 +65,7 @@ DEPENDENCIES
65
65
  fasterer (~> 0.8)
66
66
  i18n (~> 1.8)
67
67
  rake (~> 12.0)
68
- rspec (~> 3.0)
68
+ rspec (~> 3.9)
69
69
  rubocop (~> 0.87)
70
70
  simplecov (~> 0.18)
71
71
 
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'codebreaker'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'lib/codebreaker/version'
2
4
 
3
5
  Gem::Specification.new do |spec|
@@ -28,6 +30,7 @@ Gem::Specification.new do |spec|
28
30
 
29
31
  spec.add_development_dependency 'fasterer', '~>0.8'
30
32
  spec.add_development_dependency 'i18n', '~>1.8'
33
+ spec.add_development_dependency 'rake', '~> 12.0'
31
34
  spec.add_development_dependency 'rspec', '~>3.9'
32
35
  spec.add_development_dependency 'rubocop', '~>0.87'
33
36
  spec.add_development_dependency 'simplecov', '~>0.18'
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'codebreaker/guess_checker'
1
4
  require_relative 'codebreaker/game'
2
5
  require_relative 'codebreaker/loader'
3
6
  require_relative 'codebreaker/output'
@@ -19,11 +19,11 @@
19
19
  wrong_difficulty: "There is no such level. Select from available, please"
20
20
  get_hint: "You can choose get hint - puts 'hint'"
21
21
  no_hints: "You have no hints"
22
+ enter_guess: "Enter your guess, please"
22
23
  wrong_input: "Your input is invalid or there is no such command."
23
24
  win: "YOU WIN!"
24
25
  lose: "You lose, sorry("
25
26
  code: "The code was: "
26
27
  no_stats: "Sorry, you have not any statistic yet"
27
28
  save_result: "Do you want to save result y/n"
28
- game_over: "GAME OVER"
29
29
 
@@ -1,10 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
4
  class Game
5
+ include Codebreaker::GuessChecker
6
+
3
7
  attr_accessor :input_code, :code, :name, :difficulties, :difficulty, :hints_left, :attempts_left
8
+ attr_reader :minuse, :plus, :none, :hints_code
9
+
10
+ CODE_LENGTH = 4
11
+ CODE_RANGE = (1..6).freeze
4
12
 
5
13
  def initialize
6
14
  @difficulties = Codebreaker::Loader.load('difficulties')
7
15
  @code = generate_code
16
+ @hints_code = @code.chars.shuffle
17
+ symbols
8
18
  end
9
19
 
10
20
  def game_option(name, difficulty)
@@ -22,47 +32,36 @@ module Codebreaker
22
32
  end
23
33
 
24
34
  def hints_left?
25
- @hints_left.positive?
35
+ hints_left.positive?
26
36
  end
27
37
 
28
38
  def input_operation(input_code)
29
- @input_code = input_code
30
39
  return unless attempts_left?
31
40
 
32
41
  @attempts_left -= 1
33
- check_input
42
+ check_input(@code, input_code)
34
43
  end
35
44
 
36
45
  def attempts_left?
37
- @attempts_left.positive?
46
+ attempts_left.positive?
38
47
  end
39
48
 
40
49
  def win?
41
- @input_code == @code
50
+ input_code == code
42
51
  end
43
52
 
44
53
  def save
45
- Codebreaker::Loader.save(to_h, 'stat')
54
+ Codebreaker::Loader.save(to_h, 'stats')
46
55
  end
47
56
 
48
57
  private
49
58
 
50
- def check_input(code = @code.chars)
51
- input = @input_code.chars
52
- minuses = (code & input).map { |element| [code.count(element), input.count(element)].min }.sum
53
- result = '-' * minuses
54
- input.each.with_index do |element, index|
55
- result.sub!('-', '+') if element == code[index]
56
- end
57
- result
58
- end
59
-
60
59
  def generate_code
61
- Array.new(4) { rand(1..6) }.join
60
+ Array.new(CODE_LENGTH) { rand(CODE_RANGE) }.join
62
61
  end
63
62
 
64
63
  def generate_hint
65
- @code.chars.shuffle.pop
64
+ @hints_code.pop
66
65
  end
67
66
 
68
67
  def difficulty_option
@@ -77,8 +76,7 @@ module Codebreaker
77
76
  hints: difficulty_option[:hints],
78
77
  code: @code,
79
78
  used_attempts: difficulty_option[:attempts] - @attempts_left,
80
- used_hints: difficulty_option[:hints] - @hints_left,
81
- win: win?
79
+ used_hints: difficulty_option[:hints] - @hints_left
82
80
  }
83
81
  end
84
82
  end
@@ -1,12 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
4
  module Loader
3
5
  PATH = File.join(File.dirname(__FILE__), 'data/').freeze
4
- EXTENCTION = '.yml'.freeze
6
+ EXTENCTION = '.yml'
5
7
  def self.load(file_name)
6
8
  file_name = PATH + file_name + EXTENCTION.to_s
7
- raise LoadError, 'No such file to load' unless File.exist?(file_name)
8
-
9
- YAML.load_file(file_name)
9
+ if File.exist?(file_name)
10
+ YAML.load_file(file_name)
11
+ else
12
+ File.new(file_name, 'w')
13
+ []
14
+ end
10
15
  end
11
16
 
12
17
  def self.save(obj, file_name)
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
4
  class Output
3
5
  attr_reader :stats
4
6
  def initialize
5
7
  I18n.load_path << Dir[File.expand_path(File.join(File.dirname(__FILE__), 'data/locales/')) + '/*.yml']
6
8
  I18n.config.available_locales = :en
7
- @stats = Codebreaker::Loader.load('stat')
9
+ @stats = Codebreaker::Loader.load('stats')
8
10
  end
9
11
 
10
12
  def greeting
@@ -57,7 +59,6 @@ module Codebreaker
57
59
 
58
60
  def no_hints
59
61
  puts I18n.t(:no_hints)
60
- puts I18n.t(:code)
61
62
  end
62
63
 
63
64
  def choose_difficulty
@@ -68,6 +69,10 @@ module Codebreaker
68
69
  puts I18n.t(:wrong_difficulty)
69
70
  end
70
71
 
72
+ def enter_guess
73
+ puts I18n.t(:enter_guess)
74
+ end
75
+
71
76
  def wrong_input
72
77
  puts I18n.t(:wrong_input)
73
78
  end
@@ -78,6 +83,7 @@ module Codebreaker
78
83
 
79
84
  def lose
80
85
  puts I18n.t(:lose)
86
+ puts I18n.t(:code)
81
87
  end
82
88
 
83
89
  def save_result
@@ -87,9 +93,5 @@ module Codebreaker
87
93
  def goodbye
88
94
  puts I18n.t(:goodbye)
89
95
  end
90
-
91
- def game_over
92
- puts I18n.t(:game_over)
93
- end
94
96
  end
95
97
  end
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
4
  module Validation
5
+ MIN_NAME_LENGTH = 3
6
+ MAX_NAME_LENGTH = 20
3
7
  def name_is_valid?(name)
4
- name.instance_of?(String) && name.length.between?(3, 20)
8
+ name.instance_of?(String) && name.length.between?(MIN_NAME_LENGTH, MAX_NAME_LENGTH)
5
9
  end
6
10
 
7
11
  def input_is_valid?(input)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Codebreaker
2
- VERSION = '0.1.7'.freeze
4
+ VERSION = '0.2.3'
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreaker_kub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - katia kub
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-07-11 00:00:00.000000000 Z
11
+ date: 2020-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fasterer
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '12.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '12.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement