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 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,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "game_codebreaker"
4
+
5
+ GameCodebreaker::Main.new
@@ -0,0 +1,9 @@
1
+ class Game
2
+
3
+ attr_reader :code, :turns, :history, :win, :level
4
+
5
+ def initialize( code, turns, history, win, level )
6
+ @code, @turns, @history, @win, @level = code, turns, history, win, level
7
+ end
8
+
9
+ end
@@ -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,13 @@
1
+ class User
2
+
3
+ attr_accessor :name, :surname, :age, :games
4
+
5
+ def initialize( name, surname, age, games=[] )
6
+ @name, @surname, @age, @games = name, surname, age, games
7
+ end
8
+
9
+ def hash
10
+ [@name, @surname].hash
11
+ end
12
+
13
+ end
@@ -0,0 +1,3 @@
1
+ module GameCodebreaker
2
+ VERSION = "0.1.0"
3
+ 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: []