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