codeguessing 0.3.3 → 0.4

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: 047e3995be8f530e9bdabfc971a420dd32bbf191
4
- data.tar.gz: 83a0e3abad28f67917f85ff50b72e4ac7317c692
3
+ metadata.gz: e2be5270a620c86f26d398e9c6af49b43aa5c8f4
4
+ data.tar.gz: 1327eb3f6a111ee3581cdc8593d350f1283ce728
5
5
  SHA512:
6
- metadata.gz: 963795b20259881a44a8f52b8ceb46df397c6516e954061876859cd264eb872cb5b22f5753da0165835e2cc3bc0ce7063f65d46a68e98f6a3b10b560dd19ddb5
7
- data.tar.gz: f99eb025924bcbf607a4560209eea4491a66aa78a47e0a54d15a8548501d54ff239e6a21c225152b9bbe1491a83cca144f2cc3a093a609acf5f53a5f7e849dbc
6
+ metadata.gz: 6c6db8055afff298cf5d5c4abc09d7f88f32679c425bf08bb42a1a31c8a4913f3c20f2b53820d6bec01fa725634eda7bd34cee8e8ec09dc2173c9b7e781e26fe
7
+ data.tar.gz: fbc530de9fe44ed38e626068f01643c5dc41ac34cb84384082728a5be3c6fd9b29bb3d5a90b10c5539a23a575011e05c21ab8b74a7f9ae90f78ddf4631e335bc
data/.gitignore CHANGED
File without changes
data/.rspec CHANGED
File without changes
data/.travis.yml CHANGED
File without changes
data/CODE_OF_CONDUCT.md CHANGED
File without changes
data/Gemfile CHANGED
File without changes
data/LICENSE.txt CHANGED
File without changes
data/README.md CHANGED
File without changes
data/Rakefile CHANGED
File without changes
data/bin/console CHANGED
File without changes
data/bin/setup CHANGED
File without changes
data/codeguessing.gemspec CHANGED
File without changes
@@ -1,94 +1,107 @@
1
1
  module Codeguessing
2
- class Console
3
- def initialize(again = false, opt = {})
2
+ class Console
3
+ attr_reader :game, :scores, :path
4
+
5
+ def initialize(opt = {})
4
6
  @path = File.join(File.dirname(__FILE__), 'scores.yml')
5
7
  @scores = load(@path)
6
- @game = Game.new(opt)
7
- return start if again
8
- knowing
9
- end
10
-
11
- def knowing
12
- puts "Are you ready broke code? (Y/N)"
13
- if confirm?
14
- puts '-----------------Rules!----------------------'.yellow
15
- puts "You need guess secret code. This four-digit number with symbols from 1 to 6".yellow
16
- puts "You have #{@game.attempts} attempt(s) and #{@game.hint_count} hint(s)".yellow
17
- puts "If you want get hint write 'hint'".yellow
18
- puts '---------------------------------------------'.yellow
19
- return start
20
- else
21
- puts 'Goodbie!'
22
- end
23
- end
24
-
25
- def start
26
- puts "Attempt(s): #{@game.attempts} | Hint(s): #{@game.hint_count}"
27
- return loose if @game.state == 'false'
28
- return win if @game.state == 'true'
29
-
30
- action = gets.chomp
31
- if action == 'hint'
32
- puts @game.hint
33
- return start
34
- end
35
- unless @game.valid?(action)
36
- puts 'Invalid data'.red
37
- return start
38
- end
39
- puts coloring(@game.guess(action))
40
- start
41
- end
42
-
43
- def win
44
- puts 'You win!'.green
45
- puts 'Do you want save result? (Y/N)'
46
- return puts 'Goodbie!' unless confirm?
47
- puts 'Write your name'
48
- save(gets.chomp)
49
- again?
50
- end
51
-
52
- def loose
53
- puts 'You loose!'.red
54
- again?
55
- end
56
-
57
- def again?
58
- puts 'Do you want start again? (Y/N)'
59
- if confirm?
60
- Console.new(true)
61
- else
62
- puts '-----------Scores----------'.yellow
63
- puts @scores
64
- puts '---------------------------'.yellow
65
- end
8
+ @game = Game.new(opt)
66
9
  end
10
+
11
+ def go(know = true)
12
+ rules if know
13
+ puts "Attempt(s): #{@game.attempts} | Hint(s): #{@game.hint_count}"
14
+ case @game.state
15
+ when 'true'
16
+ win
17
+ when 'false'
18
+ loose
19
+ else
20
+ gaming
21
+ end
22
+ end
23
+
24
+ def rules
25
+ puts "Do you know rules? (Y/N)"
26
+ rules = [
27
+ '-----------------Rules!----------------------',
28
+ "You need guess secret code. This four-digit number with symbols from 1 to 6",
29
+ "You have #{@game.attempts} attempt(s) and #{@game.hint_count} hint(s)",
30
+ "If you want get hint write 'hint'",
31
+ '---------------------------------------------'
32
+ ]
33
+ unless confirm?
34
+ puts rules.join("\n")
35
+ end
36
+ end
37
+
38
+ def gaming
39
+ action = gets.chomp
40
+ if action == 'hint'
41
+ puts @game.hint
42
+ return go(false)
43
+ end
44
+ if @game.valid?(action)
45
+ puts @game.guess(action)
46
+ else
47
+ puts 'Invalid data'
48
+ end
49
+ go(false)
50
+ end
67
51
 
68
52
  def confirm?(action = gets.chomp)
69
- return true if action == 'Y'
53
+ return true if action.downcase == 'y'
70
54
  false
71
55
  end
72
56
 
73
- def coloring(string)
74
- color_s = ''
75
- string.chars { |w| color_s += w == '+' ? '+'.green : '-'.red }
76
- color_s
77
- end
78
-
79
57
  def load(path)
80
58
  YAML.load(File.open(path)) if File.exist?(path)
81
59
  end
82
60
 
83
- def save(name = 'Anonim')
84
- return if @game.state != 'true'
85
- @scores << @game.cur_score(name)
61
+ def save!(name = 'Anonim')
62
+ if @game.state != 'true'
63
+ return puts 'You cant save game'
64
+ end
65
+ name.chomp!
66
+ @scores << @game.cur_score(name)
86
67
  File.new(@path, 'w') unless File.exist?(@path)
87
68
  File.open(@path, "r+") do |f|
88
69
  f.write(@scores.to_yaml)
89
70
  end
90
71
  @scores
91
72
  end
73
+
74
+ private
75
+
76
+ def win
77
+ puts 'You win!'
78
+ save?
79
+ again?
80
+ end
92
81
 
82
+ def loose
83
+ puts 'You loose!'
84
+ again?
85
+ end
86
+
87
+ def save?
88
+ puts 'Do you want save result? (Y/N)'
89
+ return puts 'Goodbie!' unless confirm?
90
+ puts 'Write your name'
91
+ save!(gets)
92
+ end
93
+
94
+ def again?
95
+ puts 'Do you want start again? (Y/N)'
96
+ if confirm?
97
+ @game = Game.new
98
+ return go(false)
99
+ else
100
+ puts '-----------Scores----------'
101
+ p @scores
102
+ puts '---------------------------'
103
+ end
104
+ end
105
+
93
106
  end
94
107
  end
@@ -1,7 +1,6 @@
1
1
  module Codeguessing
2
2
  class Game
3
- attr_reader :attempts, :hint_count, :state, :answer
4
- attr_accessor :secret_code
3
+ attr_accessor :attempts, :hint_count, :state, :answer, :secret_code
5
4
 
6
5
  MAX_HINT = 2
7
6
  MAX_ATTEMPTS = 5
@@ -16,14 +15,17 @@ module Codeguessing
16
15
 
17
16
  def guess(code)
18
17
  loose unless check?(use_attempt)
18
+ hash = {}
19
19
  res = ''
20
20
  code.each_char.with_index do |char, i|
21
- if char == secret_code[i]
22
- res += '+'
23
- else
24
- res += '-'
25
- end
21
+ case
22
+ when char == secret_code[i]
23
+ res += '+'
24
+ when secret_code.count(char) == 1
25
+ hash[char] = '-'
26
+ end
26
27
  end
28
+ res += hash.values.join('')
27
29
  win if res == '++++'
28
30
  @answer = res
29
31
  end
@@ -1,22 +1,21 @@
1
1
  ---
2
- - :name: Yaroslav
3
- :secret_code: '1234'
4
- :attempts: 4
5
- :hint_count: 2
6
- :state: true
7
- - :name: '1234435'
8
- :secret_code: '1234'
9
- :attempts: 4
2
+ - :secret_code: '2222'
3
+ :attempts: 5
10
4
  :hint_count: 2
11
- :state: 'true'
12
- :answer: "++++"
13
- - :name: '1384848484'
14
- :secret_code: '1234'
5
+ :name: Yaroslav
6
+ - :secret_code: '1222'
7
+ :attempts: 3
8
+ :hint_count: 1
9
+ :name: 'Yaroslav
10
+
11
+ '
12
+ - :secret_code: '1351'
13
+ :attempts: 1
14
+ :hint_count: 0
15
+ :name: 'Yaroslav
16
+
17
+ '
18
+ - :secret_code: '1111'
15
19
  :attempts: 4
16
- :hint_count: 2
17
- :state: 'true'
18
- :answer: "++++"
19
- - :secret_code: '1234'
20
- :attempts: 4
21
- :hint_count: 2
22
- :name: Yayryary
20
+ :hint_count: 0
21
+ :name: Ivan
@@ -1,3 +1,3 @@
1
1
  module Codeguessing
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4"
3
3
  end
data/lib/codeguessing.rb CHANGED
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeguessing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: '0.4'
5
5
  platform: ruby
6
6
  authors:
7
7
  - bezrukavyi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-24 00:00:00.000000000 Z
11
+ date: 2016-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -109,7 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  version: '0'
110
110
  requirements: []
111
111
  rubyforge_project:
112
- rubygems_version: 2.6.6
112
+ rubygems_version: 2.5.1
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: Codeguessing