codebreaker_kub 0.1.6 → 0.2.2

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: 3a49f0af67627baefe1e347796218ea5ea54d8155e1187ded572e04c28729c0f
4
- data.tar.gz: f4d02d1790d23a479d48f3f24d2e62a20264d231c42c3d7a6c23a1a2532aabd2
3
+ metadata.gz: 051607a50601d334aa48d9d28785323e8d5c221c0aef317be4b4a5ceee34386e
4
+ data.tar.gz: 6a7ef0f973f7f648ab9ec282631d77f18f62ab2b8d271fa1959e6a4d50286225
5
5
  SHA512:
6
- metadata.gz: 10154c1f27c0dcb29b36280731de9b3c261eb69e5aebab8947f519a70012e035126f2f412be3bef4d70f41533b4432f23c88e5b88385d1ec00ac8566e22a6359
7
- data.tar.gz: 7a3f12d5f012885f3a0a89e940f5515f4569f0200e31f8bccf301ffdb241496b6388d1ad1c88ba14be31ea063893a689d1fffc74a22690d69ef8a89e2b21e16c
6
+ metadata.gz: a60a49f8ea3d902cc5455fba5e1acf75a1290d013bc4dda5ff4ca6cadabddd8795c8a8e25f697cfed92b1c10973e410b64070a5d48bc73e52afb252ec3c2da46
7
+ data.tar.gz: 50d31ee1829a607075be8ec34df7b77eea7aa5c783ea62b5f12bfdc119f4c9df5db751b2d195a2c19970375422442f4a797e6e8326b327a2325765fbba717f99
@@ -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.5)
4
+ codebreaker_kub (0.2.1)
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
@@ -76,9 +75,8 @@ module Codebreaker
76
75
  attempts: difficulty_option[:attempts],
77
76
  hints: difficulty_option[:hints],
78
77
  code: @code,
79
- attempts_left: @attempts_left,
80
- hints_left: @hints_left,
81
- win: win?
78
+ used_attempts: difficulty_option[:attempts] - @attempts_left,
79
+ used_hints: difficulty_option[:hints] - @hints_left
82
80
  }
83
81
  end
84
82
  end
@@ -1,7 +1,9 @@
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
9
  if File.exist?(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
@@ -27,16 +29,23 @@ module Codebreaker
27
29
  puts I18n.t(:rules)
28
30
  end
29
31
 
32
+ def sort_stats
33
+ @stats = @stats.sort_by do |game|
34
+ [game[:attempts], game[:used_attempts],
35
+ game[:used_hints]]
36
+ end
37
+ end
38
+
30
39
  def show_stats
31
- @stats.each do |game|
40
+ sort_stats
41
+ @stats.each_with_index do |game, index|
32
42
  puts "Hey, #{game[:name]}
43
+ Rating: #{index + 1}
33
44
  Attempts: #{game[:attempts]}
34
45
  Hints: #{game[:hints]}
35
- Code: #{game[:code]}
36
46
  Chosen difficulty: #{game[:difficulty]}
37
- Unused attempts: #{game[:attempts_left]}
38
- Unused hints: #{game[:hints_left]}
39
- Win: #{game[:win]}"
47
+ Used attempts: #{game[:used_attempts]}
48
+ Used hints: #{game[:used_hints]}"
40
49
  end
41
50
  end
42
51
 
@@ -50,7 +59,6 @@ module Codebreaker
50
59
 
51
60
  def no_hints
52
61
  puts I18n.t(:no_hints)
53
- puts I18n.t(:code)
54
62
  end
55
63
 
56
64
  def choose_difficulty
@@ -61,6 +69,10 @@ module Codebreaker
61
69
  puts I18n.t(:wrong_difficulty)
62
70
  end
63
71
 
72
+ def enter_guess
73
+ puts I18n.t(:enter_guess)
74
+ end
75
+
64
76
  def wrong_input
65
77
  puts I18n.t(:wrong_input)
66
78
  end
@@ -71,6 +83,7 @@ module Codebreaker
71
83
 
72
84
  def lose
73
85
  puts I18n.t(:lose)
86
+ puts I18n.t(:code)
74
87
  end
75
88
 
76
89
  def save_result
@@ -80,9 +93,5 @@ module Codebreaker
80
93
  def goodbye
81
94
  puts I18n.t(:goodbye)
82
95
  end
83
-
84
- def game_over
85
- puts I18n.t(:game_over)
86
- end
87
96
  end
88
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.6'.freeze
4
+ VERSION = '0.2.2'
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.6
4
+ version: 0.2.2
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