codeguessing 0.3.3 → 0.4

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