codebreaker_kub 0.1.7 → 0.2.3

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: 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