codebreaker-rg-te 0.1.14 → 0.1.16

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