game_codebreaker 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []