new_super_codebreaker_2021 0.3.4 → 0.4.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: 157dbae0333bd8d36649060482f89ea9f7327d475f948e8fef0aeac1eb0dd64d
4
- data.tar.gz: d1819c81e8c1c84eafafeb1d0cce41bf8a714d1e3bfa36e7d2bdebe931b61f73
3
+ metadata.gz: dd7869a4d751d84d0a042d1cd3952bab0d885810a52108988056d7e060064fca
4
+ data.tar.gz: f352eda0a33895d65c847f80f4f393382a48eebfac47a218dfb713b9f763248b
5
5
  SHA512:
6
- metadata.gz: 94d7ff189e12b46cee85e11ffc6a2c3cde3346d922e4525d864be652d426851aec4580d9bb2dec84cb34dcb9fd2d3119a4c7f8e2f38f89494357c4ca2c894dab
7
- data.tar.gz: b0e22fee9f1104399f138e6042d8321d98ff88805809f26750dd5b0b934e10a9e63ea6f46560d438710134ed7f0c707fd2e43b14d4d5656245ebce1eb391446a
6
+ metadata.gz: 6504ce6e5d9162e084b055deb28710aaf73b7433eb0f0e58ba543ac219e3e22c8154ad6e4604e14955c70cc7ab58c5988b27095cf7e8cdcbef2fe590eef39958
7
+ data.tar.gz: 96bd8fb3d4797bd36ac5ba4e735a7a8741a165fa046db94cc9ab9ac5231364eef1a2d857d35c31c317afe4fbcb027962ef99653559c02bb4232eb488ae21b7f9
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- source "https://rubygems.org"
3
+ source 'https://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in new_super_codebreaker_2021.gemspec
6
6
  gemspec
data/Rakefile CHANGED
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "rubocop/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rubocop/rake_task'
5
3
 
6
4
  begin
7
- require "rspec/core/rake_task"
5
+ require 'rspec/core/rake_task'
8
6
  RSpec::Core::RakeTask.new(:spec)
9
7
  rescue LoadError
10
8
  # Ignored
data/bin/console CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "bundler/setup"
5
- require "new_super_codebreaker_2021"
4
+ require 'bundler/setup'
5
+ require 'new_super_codebreaker_2021'
6
6
 
7
7
  # You can add fixtures and/or initialization code here to make experimenting
8
8
  # with your gem easier. You can also use a different console, if you like.
@@ -11,5 +11,5 @@ require "new_super_codebreaker_2021"
11
11
  # require "pry"
12
12
  # Pry.start
13
13
 
14
- require "irb"
14
+ require 'irb'
15
15
  IRB.start(__FILE__)
data/lib/db_methods.rb CHANGED
@@ -1,10 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module DBMethods
4
2
  def save(user, file)
5
3
  rating = load_file(file)
6
4
  rating.push(user)
7
- File.open(file, "w") do |filename|
5
+ File.open(file, 'w') do |filename|
8
6
  YAML.dump(rating, filename)
9
7
  end
10
8
  end
data/lib/game.rb CHANGED
@@ -1,26 +1,30 @@
1
- require "yaml"
2
- require_relative "validate"
3
- require_relative "show_content"
4
- require_relative "db_methods"
5
- require_relative "user"
1
+ require 'yaml'
2
+ require_relative 'validate'
3
+ require_relative 'show_content'
4
+ require_relative 'db_methods'
5
+ require_relative 'user'
6
6
  module NewSuperCodebreaker2021
7
7
  class Game
8
8
  include Validate
9
9
  include ShowContent
10
10
  include DBMethods
11
11
 
12
+ def initialize
13
+ @code = generate_code
14
+ end
15
+
16
+ GUESS_COMMANDS = %i[hint rules exit].freeze
12
17
  START_COMMANDS = %i[start rules stats exit].freeze
13
18
  DIFFICULTY_COMMANDS = %i[easy medium hell exit].freeze
14
- GUESS_COMMANDS = %i[hint rules exit].freeze
15
19
  AFTER_GAME_COMMANDS = %i[start save exit].freeze
16
20
  YES_NO_COMMANDS = %i[yes no].freeze
17
21
 
18
- def chose_com(command)
19
- START_COMMANDS.include?(command.to_sym) ? command.to_sym : false
22
+ def chose_command(command)
23
+ check_input(command, START_COMMANDS)
20
24
  end
21
25
 
22
26
  def take_name(input_name)
23
- if input_name == "exit"
27
+ if input_name == 'exit'
24
28
  :exit
25
29
  else
26
30
  validate_name(input_name)
@@ -28,59 +32,65 @@ module NewSuperCodebreaker2021
28
32
  end
29
33
 
30
34
  def chose_difficulty(difficulty)
31
- DIFFICULTY_COMMANDS.include?(difficulty.to_sym) ? difficulty.to_sym : false
32
- end
33
-
34
- def generate_code
35
- Array.new(4) { rand(1..6) }
35
+ check_input(difficulty, DIFFICULTY_COMMANDS)
36
36
  end
37
37
 
38
38
  def user_guess(code)
39
- GUESS_COMMANDS.include?(code.to_s.to_sym) ? code.to_s.to_sym : validate_user_code(code)
39
+ if code.to_i != 0
40
+ validate_user_code(code)
41
+ elsif GUESS_COMMANDS.include?(code.to_sym)
42
+ code.to_sym
43
+ else false
44
+ end
40
45
  end
41
46
 
42
- def take_hint(user, code, used_hints)
47
+ def take_hint(user, used_hints)
48
+ code_copy = @code.dup
43
49
  if user.hints_total > user.hints_used
44
50
  user.hints_used += 1
45
- used_hints.each { |hint| code.delete(hint) }
46
- code.sample
51
+ used_hints.each { |hint| code_copy.delete(hint) }
52
+ code_copy.sample
47
53
  else
48
54
  false
49
55
  end
50
56
  end
51
57
 
52
58
  def after_game_commands(command)
53
- AFTER_GAME_COMMANDS.include?(command.to_sym) ? command.to_sym : false
59
+ check_input(command, AFTER_GAME_COMMANDS)
54
60
  end
55
61
 
56
62
  def attempt_to_start(command)
57
- YES_NO_COMMANDS.include?(command.to_sym) ? command.to_sym : false
63
+ check_input(command, YES_NO_COMMANDS)
58
64
  end
59
65
 
60
- def compare_codes(secret_code, user_code)
61
- matches, u_char = number_on_right_place(secret_code, user_code)
62
- number_in_secret_code(secret_code, user_code, matches, u_char)
66
+ def compare_codes(user_code)
67
+ matches, u_char = number_on_right_place(user_code)
68
+ number_in_secret_code(user_code, matches, u_char)
63
69
  end
64
70
 
65
71
  private
66
72
 
67
- def number_on_right_place(secret_code, user_code)
73
+ def number_on_right_place(user_code)
68
74
  matches = []
69
75
  u_char = []
70
76
  user_code.each_index do |i|
71
- if secret_code[i] == user_code[i]
72
- matches.unshift("+")
77
+ if @code[i] == user_code[i]
78
+ matches.unshift('+')
73
79
  u_char << user_code[i]
74
80
  end
75
81
  end
76
82
  [matches, u_char]
77
83
  end
78
84
 
79
- def number_in_secret_code(secret_code, user_code, matches, u_char)
85
+ def number_in_secret_code(user_code, matches, u_char)
80
86
  user_code.each do |element|
81
- matches.push("-") if secret_code.include?(element) && !u_char.include?(element)
87
+ matches.push('-') if @code.include?(element) && !u_char.include?(element)
82
88
  end
83
89
  matches
84
90
  end
91
+
92
+ def generate_code
93
+ Array.new(4) { rand(1..6) }
94
+ end
85
95
  end
86
96
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module NewSuperCodebreaker2021
4
- VERSION = "0.3.4"
4
+ VERSION = '0.4.2'
5
5
  end
@@ -1,5 +1,5 @@
1
- require_relative "new_super_codebreaker_2021/version"
2
- require "game"
1
+ require_relative 'new_super_codebreaker_2021/version'
2
+ require 'game'
3
3
 
4
4
  module NewSuperCodebreaker2021
5
5
  class Error < StandardError; end
data/lib/show_content.rb CHANGED
@@ -1,8 +1,32 @@
1
+ require 'terminal-table'
2
+
1
3
  module ShowContent
4
+ DIFFICULTY = {
5
+ easy: { attempts: 15, hints: 2 },
6
+ medium: { attempts: 10, hints: 1 },
7
+ hell: { attempts: 5, hints: 1 }
8
+ }.freeze
9
+
2
10
  def show_stats(file)
3
11
  data = YAML.load_file(file) || []
4
12
  data.sort_by(&:hints_used).sort_by(&:attempts_used).sort_by { |game| -game.difficulty }
13
+ create_table(data)
5
14
  rescue Errno::ENOENT
6
15
  []
7
16
  end
17
+
18
+ private
19
+
20
+ def create_table(users)
21
+ table = Terminal::Table.new(headings: ['Rating', 'Name', 'Difficulty', 'Attempts Total',
22
+ 'Attempts Used', 'Hints Total', 'Hints Used'])
23
+ rate = 1
24
+
25
+ users.each do |user|
26
+ table.add_row([rate, user.name, DIFFICULTY.keys[user.difficulty],
27
+ user.attempts_total, user.attempts_used, user.hints_used, user.hints_total])
28
+ rate += 1
29
+ end
30
+ table
31
+ end
8
32
  end
data/lib/validate.rb CHANGED
@@ -16,6 +16,13 @@ module Validate
16
16
  end
17
17
  end
18
18
 
19
+ def check_input(input, command_list)
20
+ if input.to_i.zero? && command_list.include?(input.to_sym)
21
+ input.to_sym
22
+ else false
23
+ end
24
+ end
25
+
19
26
  private
20
27
 
21
28
  def valid_number?(arr_code)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: new_super_codebreaker_2021
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nazar Dakhno
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-29 00:00:00.000000000 Z
11
+ date: 2021-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fasterer
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.21.2
83
+ - !ruby/object:Gem::Dependency
84
+ name: terminal-table
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 3.0.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 3.0.1
83
97
  description: Game where you need to guess the secret code
84
98
  email:
85
99
  - dakhnonazar@gmail.com