codebreaker-rg-te 0.1.14 → 0.1.16

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
  SHA1:
3
- metadata.gz: 020310ae40a06b7de5cb7c1c8d4df8561c302141
4
- data.tar.gz: 18146b099cbb27927321c03e42169fb76b5e3112
3
+ metadata.gz: d5bc73e3efb3c0ed966cf0714f5fd0caa4c3a8f8
4
+ data.tar.gz: '0094d8dec63d2938c89f42286b4985235a292a4b'
5
5
  SHA512:
6
- metadata.gz: 3ec664379784d094d85e45155a86db85b3020184d994bc2fdf76ffb241f8dbdbd80ce322225f0e000024e5ddf1d9d54cb5ef587663019ba1fc71454abb97578c
7
- data.tar.gz: 988dda9468fd84201c7dfa748e9cacc49d75af71b476d522c457205bc7d02ad13d859768b02e475a2b447a68702eaa190fc754b3fc4e926974efb6e5d448a3bf
6
+ metadata.gz: 05e272aa262a9e221290e4cdd9c79890958f848ef4d4676b4cbdbd3c4089a15f1728805faaa2afae2d6c832149dd2642d960b301b3e449450d2c73516e3193d5
7
+ data.tar.gz: d960c5c1e39030f6aa1e462e53222f89f8f6f387052f6877b1d6dcb04306e8d10c85c889505fa069466b5750db90f4381f0ddfd08a7d5053cbd0ea1dfc6cce27
data/lib/codebreaker.rb CHANGED
@@ -1,12 +1,4 @@
1
- require 'i18n'
2
- require 'yaml'
3
- require 'codebreaker/storage/storage_interceptor.rb'
4
- require 'codebreaker/console.rb'
5
- require 'codebreaker/localization.rb'
6
- require 'codebreaker/validation.rb'
7
- require 'codebreaker/statistics.rb'
8
- require 'codebreaker/game.rb'
9
- require 'codebreaker.rb'
1
+ require 'autoload.rb'
10
2
 
11
3
  module Codebreaker
12
4
  end
@@ -14,32 +14,22 @@ module Codebreaker
14
14
  ANSWERS = { yes: 'yes' }.freeze
15
15
 
16
16
  def launch
17
- loop do
18
- message(:start_game)
19
- message(:wel_instruct, COMMANDS)
20
- @answer = read_from_console
21
- return check_answer
22
- end
23
- end
24
-
25
- def start_game
26
- @game = Codebreaker::Game.new
27
- enter_name
28
- enter_level
29
- @game.new_game
30
- round_game
17
+ message(:start_game)
18
+ message(:wel_instruct, COMMANDS)
19
+ @answer = read_from_console
20
+ check_answer
31
21
  end
32
22
 
33
23
  def round_game
34
24
  while @game.attempts.positive?
35
25
  user_answer = message_game_read_console
36
26
  next hint_show if user_answer == HINT
37
- next message(:invalid_number) unless @game.validate_code(user_answer)
27
+ next message(:invalid_number) unless @game.validate_code(user_answer, Codebreaker::Game::USER_ANSWER_REX)
38
28
 
39
29
  @game.handle_guess(user_answer)
30
+ message_game_result
40
31
  return win if @game.equal_codes?(user_answer)
41
32
 
42
- message_game_result
43
33
  end
44
34
  loose
45
35
  end
@@ -63,11 +53,6 @@ module Codebreaker
63
53
  continue_game? ? start_game : exit
64
54
  end
65
55
 
66
- def continue_game?
67
- message(:new_game)
68
- read_from_console.eql? ANSWERS[:yes]
69
- end
70
-
71
56
  def stats_show
72
57
  @stat = Codebreaker::Statistics.new
73
58
  return message(:empty_stat) unless data = @stat.stats
@@ -85,6 +70,19 @@ module Codebreaker
85
70
 
86
71
  private
87
72
 
73
+ def continue_game?
74
+ message(:new_game)
75
+ read_from_console.eql? ANSWERS[:yes]
76
+ end
77
+
78
+ def start_game
79
+ @game = Codebreaker::Game.new
80
+ enter_name
81
+ enter_level
82
+ @game.new_game
83
+ round_game
84
+ end
85
+
88
86
  def check_answer
89
87
  case @answer
90
88
  when COMMANDS[:start] then start_game
@@ -3,7 +3,7 @@
3
3
  module Codebreaker
4
4
  class Game
5
5
  include Validation
6
- attr_reader :attempts, :hints, :level, :name, :level_num
6
+ attr_reader :attempts, :hints, :level, :name, :level_num, :current_time
7
7
  attr_reader :hints_index, :result
8
8
  attr_reader :user_code, :secret_code, :phrases
9
9
  RANGE = (1..6).freeze
@@ -17,6 +17,7 @@ module Codebreaker
17
17
  COUNTS_OF_HINTS = (0..3).freeze
18
18
  DIGITS_COUNT = 4
19
19
  USER_ANSWER_REX = /^[1-6]{4}$/.freeze
20
+ NAME_SIZE_RANGE = (3..20).freeze
20
21
 
21
22
  def new_game
22
23
  @secret_code = Array.new(DIGITS_COUNT) { rand(RANGE) }
@@ -34,7 +35,7 @@ module Codebreaker
34
35
  end
35
36
 
36
37
  def enter_name(name)
37
- return unless validate_length(name)
38
+ return unless validate_length(name, NAME_SIZE_RANGE)
38
39
 
39
40
  @name = name
40
41
  end
@@ -65,8 +66,27 @@ module Codebreaker
65
66
  end
66
67
 
67
68
  def game_result
68
- return '++++' if equal_codes?(@user_code.join)
69
+ puts @secret_code
70
+ count_plus + count_minus
71
+ end
72
+
73
+ def storage_data(codebreaker_data)
74
+ attempts_used = GAME_LEVELS.dig(level.to_sym, :attempts) - attempts
75
+ hints_used = GAME_LEVELS.dig(level.to_sym, :hints) - hints
76
+ game_date = Time.new.strftime "%Y/%m/%d %H:%M:%S"
77
+ hash_stat = { name: @name, level: @level, level_num: @level_num, attempts: @attempts, attempts_used: attempts_used, hints: @hints, hints_used: hints_used, game_date: game_date }
78
+ codebreaker_data << hash_stat
79
+ end
69
80
 
81
+ def save
82
+ storage = StorageInterceptor.new
83
+ codebreaker_data = storage.read_database || []
84
+ storage.write_database(storage_data(codebreaker_data))
85
+ end
86
+
87
+ private
88
+
89
+ def count_plus
70
90
  result = ''
71
91
  @secret_code_clone = @secret_code.clone
72
92
  @user_code.each_with_index do |digit, index|
@@ -76,7 +96,12 @@ module Codebreaker
76
96
  @secret_code_clone[index] = nil
77
97
  @user_code[index] = nil
78
98
  end
99
+ result
100
+ end
79
101
 
102
+ def count_minus
103
+ result = ''
104
+ @secret_code_clone = @secret_code.clone
80
105
  @user_code.compact.each_with_index do |digit, _index|
81
106
  next unless @secret_code_clone.include?(digit)
82
107
 
@@ -85,18 +110,5 @@ module Codebreaker
85
110
  end
86
111
  result
87
112
  end
88
-
89
- def storage_data(codebreaker_data)
90
- attempts_used = GAME_LEVELS.dig(level.to_sym, :attempts) - attempts
91
- hints_used = GAME_LEVELS.dig(level.to_sym, :hints) - hints
92
- hash_stat = { name: @name, level: @level, level_num: @level_num, attempts: @attempts, attempts_used: attempts_used, hints: @hints, hints_used: hints_used }
93
- codebreaker_data << hash_stat
94
- end
95
-
96
- def save
97
- storage = StorageInterceptor.new
98
- codebreaker_data = storage.read_database || []
99
- storage.write_database(storage_data(codebreaker_data))
100
- end
101
113
  end
102
114
  end
@@ -1,9 +1,9 @@
1
1
  module Validation
2
- def validate_length(word)
3
- word.size > 2 && word.size < 21
2
+ def validate_length(word, range)
3
+ range.include?(word.size)
4
4
  end
5
5
 
6
- def validate_code(code)
7
- code =~ Codebreaker::Game::USER_ANSWER_REX
6
+ def validate_code(code, regexp)
7
+ code =~ regexp
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codebreaker-rg-te
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.14
4
+ version: 0.1.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Tereschenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-16 00:00:00.000000000 Z
11
+ date: 2019-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: fasterer
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: i18n
29
15
  requirement: !ruby/object:Gem::Requirement