game_codebreaker 0.1.0
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 +7 -0
- data/bin/game_codebreaker +5 -0
- data/lib/game_codebreaker/game.rb +9 -0
- data/lib/game_codebreaker/message.rb +47 -0
- data/lib/game_codebreaker/play.rb +57 -0
- data/lib/game_codebreaker/remember.rb +47 -0
- data/lib/game_codebreaker/user.rb +13 -0
- data/lib/game_codebreaker/version.rb +3 -0
- data/lib/game_codebreaker.rb +28 -0
- metadata +81 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 68f61b18a1da7c5996935e6a33984fadb2748592
|
4
|
+
data.tar.gz: 3db34ff020d6d625f2dff9a3c96556c8f1b963aa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4498f36e35a838ce22f419ed55b32de26fa8748d6c7b77b1ad9059d4c59d846fa1ded2c6818ed9b25ccdcb2c2a40c084981c0de659d250851a03f81fefc76455
|
7
|
+
data.tar.gz: 0494839f786847662b28d629eea761c5a71158a9fc4c317c661d085cf7704a6095c2508533264f4ea8074e1103b6f0d88bde5f97d92308bf2b9bb1ef8c9d8583
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Message
|
2
|
+
|
3
|
+
attr_accessor :user, :turns, :number, :history, :win
|
4
|
+
|
5
|
+
def question( mess )
|
6
|
+
p mess
|
7
|
+
value = gets.chomp
|
8
|
+
end
|
9
|
+
|
10
|
+
def user_data
|
11
|
+
if question( mess 4 ).capitalize == "Y"
|
12
|
+
user = question( mess 6 )
|
13
|
+
user_data unless user =~ /^(.+)\s(.+)\s(.+)$/
|
14
|
+
return array = [name = $1, surname = $2, age = $3]
|
15
|
+
end
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def print_info( array )
|
20
|
+
p "Name: " << array[0]
|
21
|
+
p "Surname: " << array[1]
|
22
|
+
p "Age " << array[2]
|
23
|
+
p "Total games " << array[3].to_s
|
24
|
+
p "Total wins " << array[4].to_s
|
25
|
+
p "Total losses " << array[5].to_s
|
26
|
+
p "Average amount of turns " << array[6].to_s
|
27
|
+
p "Average amount of level " << array[7].to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
def mess( value )
|
31
|
+
case value
|
32
|
+
when 1
|
33
|
+
%Q^ Enter your integer and press 'Enter' ^
|
34
|
+
when 2
|
35
|
+
%Q^ Replay ? -- Y/N ^
|
36
|
+
when 4
|
37
|
+
%Q^ Save games? -- Y/N ^
|
38
|
+
when 5
|
39
|
+
%Q^ I am waiting the GARBAGE COLLECTOR ^
|
40
|
+
when 6
|
41
|
+
%Q^ Please enter your data separated by a space and press 'Enter'. Example: Name Surname Age ^
|
42
|
+
else
|
43
|
+
%Q^ читер ? ^
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require "game_codebreaker/game"
|
2
|
+
require "game_codebreaker/message"
|
3
|
+
|
4
|
+
class Play < Message
|
5
|
+
|
6
|
+
attr_accessor :code, :turns, :history, :win, :level
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@code = ""
|
10
|
+
@turns = 0
|
11
|
+
@history = []
|
12
|
+
@level = 15
|
13
|
+
end
|
14
|
+
|
15
|
+
def dice
|
16
|
+
4.times{ @code << rand(1..6).to_s }
|
17
|
+
@code.to_i
|
18
|
+
end
|
19
|
+
|
20
|
+
def start
|
21
|
+
dice
|
22
|
+
process
|
23
|
+
Game.new( @code, @turns, @history, @win, @level )
|
24
|
+
end
|
25
|
+
|
26
|
+
def process
|
27
|
+
@level.times do
|
28
|
+
skynet = Array.new(@code.to_s.split(//))
|
29
|
+
human = question( mess 1 ).split(//)
|
30
|
+
list = [@code, human.join("")]
|
31
|
+
p result = to_think( skynet, human )
|
32
|
+
@turns += 1; @history << ( list << result )
|
33
|
+
p @code
|
34
|
+
return @win = true if game_over?( result )
|
35
|
+
end
|
36
|
+
@win = false
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_think( skynet, human )
|
40
|
+
string = ""
|
41
|
+
(0..3).each do |i|
|
42
|
+
if skynet[i] == human[i]
|
43
|
+
string += "+"
|
44
|
+
skynet[i] = nil
|
45
|
+
human[i] = nil
|
46
|
+
end
|
47
|
+
end
|
48
|
+
skynet.compact!; human.compact!;
|
49
|
+
human.each { |val| string += "-" if skynet.include?( val ) }
|
50
|
+
string
|
51
|
+
end
|
52
|
+
|
53
|
+
def game_over?( string )
|
54
|
+
return true if string.count("+") == 4
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
class Remember
|
2
|
+
|
3
|
+
attr_accessor :users
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@users = []
|
7
|
+
end
|
8
|
+
|
9
|
+
def add_games( object )
|
10
|
+
@users.each { |user| @user = user if user.hash == object.hash }
|
11
|
+
object.games.each { |game| @user.games << game }
|
12
|
+
end
|
13
|
+
|
14
|
+
def exists?( object )
|
15
|
+
@users.each { |user| return true if user.hash == object.hash }
|
16
|
+
false
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_user( object )
|
20
|
+
@users.each { |user| @user = user if user.hash == object.hash }
|
21
|
+
@user
|
22
|
+
end
|
23
|
+
|
24
|
+
def info( user )
|
25
|
+
a = []
|
26
|
+
a << name = user.name
|
27
|
+
a << surname = user.surname
|
28
|
+
a << age = user.age
|
29
|
+
a << total_game = user.games.size
|
30
|
+
array_win = user.games.select { |game| game.win == true }
|
31
|
+
a << total_win = array_win.size
|
32
|
+
a << total_losses = ( user.games.select { |game| game.win == false } ).size
|
33
|
+
average_turns = 0 and array_win.each { |game| average_turns += game.turns }
|
34
|
+
a << average_turns /= total_win
|
35
|
+
average_level = 0 and user.games.select { |game| average_level += game.level }
|
36
|
+
a << average_level /= total_game
|
37
|
+
end
|
38
|
+
|
39
|
+
def save(path)
|
40
|
+
File.open(path, 'w') { |f| f.write Marshal.dump self }
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.load(path)
|
44
|
+
Marshal.load File.open(path, 'r').read if File.exists?(path)
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "game_codebreaker/version"
|
2
|
+
require "game_codebreaker/message"
|
3
|
+
require "game_codebreaker/play"
|
4
|
+
require "game_codebreaker/user"
|
5
|
+
require "game_codebreaker/remember"
|
6
|
+
require "game_codebreaker/game"
|
7
|
+
|
8
|
+
module GameCodebreaker
|
9
|
+
|
10
|
+
output = Message.new
|
11
|
+
games = []
|
12
|
+
loop do
|
13
|
+
g = Play.new
|
14
|
+
games << g.start
|
15
|
+
break unless output.question( output.mess 2 ).capitalize == "Y"
|
16
|
+
end
|
17
|
+
|
18
|
+
if user_data = output.user_data
|
19
|
+
user = User.new( user_data[0], user_data[1], user_data[2], games )
|
20
|
+
memory = Remember.new unless memory = Remember.load("./dump")
|
21
|
+
memory.exists?( user ) ? ( memory.add_games(user); user = memory.get_user(user) ) : memory.users << user
|
22
|
+
memory.save("./dump")
|
23
|
+
output.print_info( memory.info(user) )
|
24
|
+
end
|
25
|
+
|
26
|
+
p output.mess 5
|
27
|
+
# Your code goes here...
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: game_codebreaker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- woodcrust
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-11-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description: PLAY NOW!
|
42
|
+
email:
|
43
|
+
- roboucrop@gmail.com
|
44
|
+
executables:
|
45
|
+
- game_codebreaker
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- bin/game_codebreaker
|
50
|
+
- lib/game_codebreaker.rb
|
51
|
+
- lib/game_codebreaker/game.rb
|
52
|
+
- lib/game_codebreaker/message.rb
|
53
|
+
- lib/game_codebreaker/play.rb
|
54
|
+
- lib/game_codebreaker/remember.rb
|
55
|
+
- lib/game_codebreaker/user.rb
|
56
|
+
- lib/game_codebreaker/version.rb
|
57
|
+
homepage: https://github.com/woodcrust/Codebreaker
|
58
|
+
licenses:
|
59
|
+
- MIT
|
60
|
+
metadata: {}
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubyforge_project:
|
77
|
+
rubygems_version: 2.4.8
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: This is game codebreaker for your terminal
|
81
|
+
test_files: []
|