lekanmastermind 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 90884d2c8d82edf9fec44a76634ed95810feff4e
4
+ data.tar.gz: d7bdd6c7d3fbeddd1f5335b6dea0c6ff1baa13c5
5
+ SHA512:
6
+ metadata.gz: c71e9a3688c07bb7924ff32edc75a4d0591af07e4688f2d0828c70ab290ef827134b66b376c41a85390f32384bcd75d3f182f1060a5132fb169dc77bfea8ff71
7
+ data.tar.gz: b33858958bd41a0cf5664d41ec880b72a17bac89424affaa02898233e563ff04d0012b96fc4d4041f877276aee3458125eb238560d332d7715fd4d2cfcdf2540
@@ -0,0 +1 @@
1
+ CODECLIMATE_REPO_TOKEN: 2221841a0794f2c05b80fb61684b8b5c615b5a6d48ef1167688c49ee5d278248
@@ -0,0 +1 @@
1
+ repo_token: dyp0tKFbP0SZIqr6SIWOF5mKvTc8PBVay
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.2.1
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in lekanmastermind.gemspec
4
+ gemspec
5
+ #gem "codeclimate-test-reporter", group: :test, require: nil
@@ -0,0 +1,53 @@
1
+ **Lekanmastermind** [![Code Climate](https://codeclimate.com/github/andela-oeyiowuawi/lekanmastermind/badges/gpa.svg)](https://codeclimate.com/github/andela-oeyiowuawi/lekanmastermind) [![Circle CI](https://circleci.com/gh/andela-oeyiowuawi/lekanmastermind.svg?style=svg)](https://circleci.com/gh/andela-oeyiowuawi/lekanmastermind) [![Coverage Status](https://coveralls.io/repos/github/andela-oeyiowuawi/lekanmastermind/badge.svg?branch=master)](https://coveralls.io/github/andela-oeyiowuawi/lekanmastermind?branch=master)
2
+ ===================
3
+
4
+
5
+ Welcome to mastermind. This is a classic code breaking game between two players. In this implementation, It is between a player and the computer.
6
+ The player selects the level(Beginner, Intermediate and Advanced) in which He/She wants to play and the computer generates Colour sequence based on the level chosen. The game is won when a player correctly guesses the computer sequence or the player runs out of guesses: there are 12 guesses for a player.
7
+
8
+ ----------
9
+
10
+
11
+ **Installation**
12
+ -------------
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ ```ruby
17
+ gem 'lekanmastermind'
18
+ ```
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ Or install it yourself as:
25
+
26
+ $ gem install lekanmastermind
27
+ ## **Usage**
28
+
29
+ To play the game, open your terminal and run lekanmastermind. Once the game loads up, You can select play or read Instructions.
30
+
31
+ A random code of varying length is generated depending on the level selected by the player(Duplicates are allowed).
32
+
33
+ You have twelve guesses per game.
34
+
35
+ On every guess, you are presented with a message identifying the number of elements you got correctly, and number of colours you got correctly but are in different positions.
36
+
37
+ To view entry history, enter h or history at any time. To view sequence generated, enter c or cheat at any time To quit the game at any point enter q or quit.
38
+
39
+ After the game is over or won, The top ten players and the time it tok them to guess the sequence corectly is displayed.
40
+
41
+ ## **Development**
42
+
43
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/lekanmastermind` for an interactive prompt that will allow you to experiment.
44
+
45
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
46
+
47
+ ## Contributing
48
+
49
+ 1. Fork it ( https://github.com/andela-oeyiowuawi/lekanmastermind/fork)
50
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
51
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
52
+ 4. Push to the branch (`git push origin my-new-feature`)
53
+ 5. Create a new Pull Request
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,6 @@
1
+ module ExtraMethods
2
+ def game_exit
3
+ puts @message.goodbye
4
+ system(exit)
5
+ end
6
+ end
@@ -0,0 +1,86 @@
1
+ # require 'extra_methods'
2
+ # require 'lekanmastermind/messages'
3
+ # require 'lekanmastermind/filemanager'
4
+ require_relative 'logic'
5
+ class Cli
6
+ include ExtraMethods
7
+ def initialize
8
+ @message = Lekanmastermind::Messages.new
9
+ @file_handler = Lekanmastermind::FileHandler.new
10
+ end
11
+
12
+ def welcome
13
+ puts @message.welcome
14
+ input = gets.chomp
15
+ process_input(input)
16
+ end
17
+
18
+ def process_input(input)
19
+ if game_option.include? input
20
+ send(game_option[input])
21
+ else
22
+ puts @message.error_input
23
+ welcome
24
+ end
25
+ end
26
+
27
+ def game_option
28
+ {
29
+ 'quit' => :game_exit, 'q' => :game_exit,
30
+ 'play' => :play, 'p' => :play,
31
+ 'instruction' => :load_instructions, 'i' => :load_instructions,
32
+ 'top' => :top_ten, 't' => :top_ten
33
+ }
34
+ end
35
+
36
+ def load_instructions
37
+ puts @message.instructions
38
+ loop do
39
+ response = gets.chomp.downcase
40
+ break if response == 'menu'
41
+ puts @message.error_input
42
+ end
43
+ welcome
44
+ end
45
+
46
+ def play
47
+ level = select_level
48
+ @logic = Logic.new(@message, level)
49
+ @logic.start_game
50
+ end
51
+
52
+ def select_level
53
+ puts @message.select_level
54
+ input = gets.chomp
55
+ game_exit if input == 'q' || input == 'quit'
56
+ process_level(input)
57
+ end
58
+
59
+ def process_level(input)
60
+ if supported_level.include? input
61
+ [input, supported_level[input]]
62
+ else
63
+ puts @message.error_input
64
+ select_level
65
+ end
66
+ end
67
+
68
+ def supported_level
69
+ {
70
+ 'beginner' => {num_of_colors: 4, num_of_char: 4},#[4,4],
71
+ 'advanced' => {num_of_colors: 6, num_of_char: 8},#[8,6],
72
+ 'intermediate' => {num_of_colors: 5, num_of_char: 6},#[6,5]
73
+ }
74
+ end
75
+
76
+ def top_ten
77
+ level = select_level
78
+ puts @file_handler.print_top_scores(level[0])
79
+ loop do
80
+ puts @message.go_to_menu
81
+ response = gets.chomp.downcase
82
+ break if response == 'menu'
83
+ end
84
+ welcome
85
+ end
86
+ end
@@ -0,0 +1,103 @@
1
+ require 'lekanmastermind/computer'
2
+ require 'lekanmastermind/game_engine'
3
+ require_relative 'set_player'
4
+ require_relative 'extra_methods'
5
+ class Logic
6
+ include ExtraMethods
7
+ def initialize(message, level)
8
+ @player_level = level[0]
9
+ @message = message
10
+ @set_player = SetPlayer.new(message)
11
+ @comp_handler = Lekanmastermind::Computer.new(level[1])
12
+ @game_engine = Lekanmastermind::GameEngine.new(@comp_handler.computer_guess,
13
+ message)
14
+ @file_handler = Lekanmastermind::FileHandler.new
15
+ end
16
+
17
+ def start_game
18
+ players = @set_player.player_collection
19
+ @players_count = players.count
20
+ puts @message.level_welcome(@player_level, @comp_handler)
21
+ begin_game(players)
22
+ end
23
+
24
+ def begin_game(players)
25
+ chances = 1
26
+ start_time = (Time.now).to_i
27
+ while chances < 13
28
+ players.each do |player|
29
+ check_input(player)
30
+ check_guess(player, chances, start_time)
31
+ end
32
+ chances += 1
33
+ end
34
+ out_of_chance
35
+ end
36
+
37
+ def check_guess(player, chances,start_time)
38
+ if @game_engine.won?(player)
39
+ end_time = (Time.now).to_i
40
+ time_elapsed = (end_time - start_time)
41
+ puts @message.congratulation(player, chances, time_elapsed)
42
+ file_operations(player, chances, time_elapsed)
43
+ else
44
+ puts @game_engine.process_guess(player, chances)
45
+ end
46
+ end
47
+
48
+ def file_operations(player, chances, time_elapsed)
49
+ puts @message.save_record
50
+ if yes_or_no?
51
+ @file_handler.writer(player.name, player.guess, time_elapsed, chances, @player_level)
52
+ end
53
+ puts @message.view_top_scores
54
+ show_top_score
55
+ replay
56
+ end
57
+
58
+ def show_top_score
59
+ if yes_or_no?
60
+ puts @message.top_ten
61
+ puts @file_handler.print_top_scores(@player_level)
62
+ end
63
+ end
64
+
65
+ def check_input(player)
66
+ loop do
67
+ puts "Enter your guess #{player.name}"
68
+ player.guess = @players_count >1 ? STDIN.noecho(&:gets).chomp : gets.chomp
69
+ check_options(player)
70
+ break unless @game_engine.invalid_play(player)
71
+ end
72
+ end
73
+
74
+ def check_options(player)
75
+ case player.guess
76
+ when 'c', 'C' then puts @game_engine.cheat
77
+ when 'q', 'Q' then game_exit
78
+ when 'h', 'H' then puts @game_engine.print_history(player)
79
+ else puts @game_engine.input_length_check(player.guess)
80
+ end
81
+ end
82
+
83
+ def yes_or_no?
84
+ loop do
85
+ input = gets.chomp
86
+ case input.downcase
87
+ when 'y', 'yes' then return true
88
+ when 'no', 'n' then return false
89
+ else puts @message.error_input
90
+ end
91
+ end
92
+ end
93
+
94
+ def replay
95
+ puts @message.replay_option
96
+ yes_or_no? ? Cli.new.welcome : game_exit
97
+ end
98
+
99
+ def out_of_chance
100
+ puts @message.out_of_chance
101
+ replay
102
+ end
103
+ end
@@ -0,0 +1,32 @@
1
+ require 'lekanmastermind/player'
2
+ class SetPlayer
3
+ def initialize(message)
4
+ @message = message
5
+ end
6
+ def player_collection
7
+ loop do
8
+ puts @message.number_of_players
9
+ @number_of_players = gets.chomp
10
+ break if check_input(@number_of_players)
11
+ puts @message.error_input
12
+ end
13
+ generate_players(@number_of_players)
14
+
15
+ end
16
+
17
+ def check_input(input)
18
+ true if input =~ /\A[-+]?[0-9]*\.?[0-9]+\Z/
19
+ end
20
+
21
+ def generate_players(number_of_players)
22
+ number_of_players = number_of_players.to_i
23
+ players = []
24
+ (0..(number_of_players - 1)).each do |i|
25
+ puts "Enter your name player#{(i + 1).to_s}"
26
+ input = gets.chomp
27
+ players << Lekanmastermind::Players.new(input)
28
+ end
29
+ players
30
+ end
31
+
32
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'lekanmastermind'
5
+ require 'game_start'
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ Cli.new.welcome
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,6 @@
1
+ machine:
2
+ ruby:
3
+ version: 2.2.3
4
+ dependencies:
5
+ pre:
6
+ - gem install bundler -v 1.11.2
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'lekanmastermind/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'lekanmastermind'
8
+ spec.version = Lekanmastermind::VERSION
9
+ spec.authors = ['Olalekan Eyiowuawi']
10
+ spec.email = ['olalekan.eyiowuawi@andela.com']
11
+
12
+ spec.summary = 'The is an implementation of the mastermind game.'
13
+ spec.description = 'This is an implementation of the mastermind game with 3 difficulty levels'
14
+ spec.homepage = 'https://github.com/andela-oeyiowuawi/lekanmastermind'
15
+
16
+ # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
17
+ # delete this section to allow pushing this gem to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
20
+ else
21
+ raise 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
22
+ end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.bindir = 'bin'
26
+ spec.executables = ['lekanmastermind']
27
+ spec.require_paths = ['lib', "bin/CLI"]
28
+
29
+ spec.add_development_dependency 'bundler', '~> 1.11'
30
+ spec.add_development_dependency 'rake', '~> 10.0'
31
+ spec.add_development_dependency 'rspec', '~> 3.0'
32
+ spec.add_development_dependency 'pry'
33
+ spec.add_development_dependency 'coveralls'
34
+ # spec.add_development_dependency 'codeclimate-test-reporter'
35
+ # spec.add_development_dependency 'simplecov'
36
+ end
@@ -0,0 +1,18 @@
1
+ require 'lekanmastermind/version'
2
+ require 'lekanmastermind/messages'
3
+ require 'lekanmastermind/game_engine'
4
+ #require 'lekanmastermind/game_methods'
5
+ require 'lekanmastermind/player'
6
+ require 'lekanmastermind/computer'
7
+ require 'lekanmastermind/filemanager'
8
+ require 'io/console'
9
+ require 'lekanmastermind/player_result'
10
+ require 'yaml'
11
+
12
+ module Lekanmastermind
13
+ # class Mastermind
14
+ # def initialize
15
+ # Lekanmastermind::GameEngine.new.game_menu
16
+ # end
17
+ # end
18
+ end
@@ -0,0 +1,24 @@
1
+ module Lekanmastermind
2
+ class Computer
3
+ attr_reader :number_of_colors, :number_of_character, :level_colors
4
+ def initialize(num_of_colors:, num_of_char:)
5
+ @number_of_colors = num_of_colors
6
+ @number_of_character = num_of_char
7
+ colors = %w(Red Blue Green Yellow Orange Indigo Violet Cyan Purple)
8
+ @level_colors = colors.shuffle[0...@number_of_colors]
9
+ end
10
+
11
+ def computer_guess
12
+ computer_colors = ''
13
+ number_of_character.times do
14
+ computer_colors << random_colour_char
15
+ end
16
+ computer_colors.downcase
17
+ end
18
+
19
+ def random_colour_char
20
+ colour_index = Random.new.rand(number_of_colors)
21
+ @level_colors[colour_index][0]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ require 'yaml'
2
+ module Lekanmastermind
3
+ class FileHandler
4
+ def writer(name, guess, time, chance, level)
5
+ player_result = Lekanmastermind::PlayerResult.new(
6
+ name, guess, time, chance, level)
7
+ File.open('scores.yaml', 'a') do |file|
8
+ file.write(YAML.dump(player_result))
9
+ end
10
+ end
11
+
12
+ def print_top_scores(level)
13
+ if top_ten(level)
14
+ top_ten(level).each_with_index { |player, index| "#{index + 1} #{player}" }
15
+ else
16
+ 'No Records yet!!'
17
+ end
18
+ end
19
+
20
+ def top_ten(level)
21
+ if File.file?('scores.yaml')
22
+ scores = YAML.load_stream(File.open('scores.yaml','r')).select do |player|
23
+ player.level == level
24
+ end
25
+ scores.sort do |player1, player2|
26
+ by_guess = player1.time <=> player2.time
27
+ by_guess == 0 ? player1.chances <=> player2.chances : by_guess
28
+ end[0...10]
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,86 @@
1
+
2
+ # This class controls all the logic in the game
3
+ # it checks the guesses againt computer's and return the appropriate response
4
+
5
+ module Lekanmastermind
6
+ class GameEngine
7
+ attr_accessor :computer_sequence
8
+ def initialize(sequence,message)
9
+ @message = message
10
+ @computer_sequence = sequence
11
+ end
12
+
13
+ def print_history(player)
14
+ player.history.empty? ? "No history right now" : player.history
15
+ end
16
+
17
+ def won?(player)
18
+ player.guess == computer_sequence
19
+ end
20
+
21
+ def cheat
22
+ computer_sequence
23
+ end
24
+ def combined_guesses(player)
25
+ guess = player.guess.split('')
26
+ comp = computer_sequence.split('')
27
+ combined_guesses = comp.zip(guess)
28
+ end
29
+ def process_guess(player, chances)
30
+ combined_guesses = combined_guesses(player)
31
+ exact_numb = exacts(combined_guesses)
32
+ partial_numb = partials(combined_guesses)
33
+ player.save_guess(player.guess, exact_numb, partial_numb)
34
+ @message.guess_process_message(player.guess, exact_numb,
35
+ partial_numb, chances)
36
+ end
37
+
38
+ def exacts(combined_guesses)
39
+ combined_guesses.count { |guess| guess[0] == guess[1] }
40
+ end
41
+
42
+ def partials(combined_guesses)
43
+ combined_guesses.select! { |guess| guess[0] != guess[1] }
44
+ computer_guess, player_guess = combined_guesses.transpose
45
+ partial_match = []
46
+ calculate_partials(computer_guess, player_guess, partial_match)
47
+ end
48
+
49
+ def calculate_partials(computer_guess, player_guess, partial_match)
50
+ player_guess.each do |a|
51
+ if computer_guess.include? a
52
+ computer_guess.delete_at(computer_guess.index(a))
53
+ partial_match << a
54
+ end
55
+ end
56
+ partial_match.size
57
+ end
58
+
59
+ def input_length_check(guess)
60
+ character_count = computer_sequence.length
61
+ if guess.length > character_count
62
+ "Your guess is longer than the required length(#{character_count})"
63
+ elsif guess.length < computer_sequence.length
64
+ "Your guess is shorter than the required length(#{character_count})"
65
+ end
66
+ end
67
+
68
+ def invalid_play(player)
69
+ not_letters?(player.guess) || !validate_number_of_characters(player.guess)
70
+ end
71
+
72
+ def not_letters?(guess)
73
+ trimmed_guess = guess.strip
74
+ true if /[^a-z]/ =~ trimmed_guess
75
+ end
76
+
77
+ def comp_number_characters
78
+ computer_sequence.length
79
+ end
80
+
81
+ def validate_number_of_characters(guess)
82
+ guess.length == comp_number_characters
83
+ end
84
+
85
+ end
86
+ end
@@ -0,0 +1,115 @@
1
+ module Lekanmastermind
2
+ class Messages
3
+ def welcome
4
+ <<-EOS
5
+ *************************************************
6
+ * Welcome to mastermind *
7
+ * *
8
+ * Press p(lay) to start a new game *
9
+ * Press (i)nstruction to load a saved game *
10
+ * Press (t)op to view Top scores *
11
+ * Press (q)uit to quit the game at anytime *
12
+ * > *
13
+ *************************************************
14
+ EOS
15
+ end
16
+
17
+ def instructions
18
+ <<-EOS
19
+ **************************************************
20
+ * This is MASTERMIND game v0.1.0 *
21
+ * By Olalekan Eyiowuawi *
22
+ * Enjoy and expect the next version *
23
+ * Press q at anytime to quit the game. *
24
+ * Enter your level and number of players *
25
+ * beginner, intermediate, advanced *
26
+ * To view guess history, enter h at any time *
27
+ * when the game starts *
28
+ * Press Menu to go back to the menu. *
29
+ **************************************************
30
+ EOS
31
+ end
32
+
33
+ def error_input
34
+ <<-EOS
35
+ ************************************************************************
36
+ * You've entered an invalid letter. Read the instruction and try again *
37
+ ************************************************************************
38
+ EOS
39
+ end
40
+
41
+ def select_level
42
+ <<-EOS
43
+ *********************************************************
44
+ * Select Your preferred level of difficulty *
45
+ * Enter 'beginner' for beginner level *
46
+ * Enter 'intermediate' for intermediate *
47
+ * Enter 'advanced' for advanced level *
48
+ *********************************************************
49
+ EOS
50
+ end
51
+
52
+ def number_of_players
53
+ 'Enter the number of players'
54
+ end
55
+
56
+ def level_welcome(level, comp_handler)
57
+ <<-EOS
58
+ *********************************************************************
59
+ You are playing the #{level} level. You can choose
60
+ #{comp_handler.number_of_character} colors from the following colors
61
+ #{comp_handler.level_colors} To enter a sequence,
62
+ Enter just the first letters of your color sequence
63
+ ***********************************************************************
64
+ EOS
65
+ end
66
+
67
+ def go_to_menu
68
+ "Enter menu to back to the menu"
69
+ end
70
+
71
+ def congratulation(player, trial, time)
72
+ <<-EOS
73
+ *********************************************************
74
+ Congratulation #{player.name}!!
75
+ You guessed the correct sequence '#{player.guess}'
76
+ in #{trial} trial(s) over #{time / 3600}hrs
77
+ #{time / 60} min #{time % 60} secs.
78
+ *********************************************************
79
+ EOS
80
+ end
81
+
82
+ def save_record
83
+ 'Do you want to save your record? y/n'
84
+ end
85
+
86
+ def view_top_scores
87
+ 'Do you want to view top scores? y/n'
88
+ end
89
+
90
+ def replay_option
91
+ 'Do you want to play again? Press Y or N'
92
+ end
93
+
94
+ def guess_process_message(guess, exact, partial, chances)
95
+ <<-EOS
96
+ *****************************************************************
97
+ '#{guess.upcase}' has #{exact} exacts and #{partial} partials
98
+ #{12 - chances} chances left
99
+ *****************************************************************
100
+ EOS
101
+ end
102
+
103
+ def top_ten
104
+ '========= TOP TEN ========='
105
+ end
106
+
107
+ def out_of_chance
108
+ "GAME OVER!! You're out of Trials!"
109
+ end
110
+
111
+ def goodbye
112
+ 'Thanks for playing Master Mind. See you soon'
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,14 @@
1
+ module Lekanmastermind
2
+ class Players
3
+ attr_accessor :name, :guess, :history
4
+ def initialize(name)
5
+ @name = name
6
+ @history = []
7
+ end
8
+
9
+ def save_guess(guess, exact_numb, partial_numb)
10
+ result = "#{exact_numb} exacts, #{partial_numb} partials"
11
+ @history << [guess, result]
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,21 @@
1
+ module Lekanmastermind
2
+ class PlayerResult
3
+ attr_reader :name
4
+ attr_reader :guess
5
+ attr_reader :time
6
+ attr_reader :chances
7
+ attr_reader :level
8
+
9
+ def initialize(name, guess, time, chances, level)
10
+ @name = name
11
+ @guess = guess
12
+ @time = time
13
+ @chances = chances
14
+ @level = level
15
+ end
16
+
17
+ def to_s
18
+ "#{name} solved '#{guess.upcase}' in #{chances} guess(es) over #{time / 60}m#{time}s"
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ module Lekanmastermind
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,336 @@
1
+ --- !ruby/object:Lekanmastermind::PlayerResult
2
+ name: olalekan
3
+ guess: gggoor
4
+ time: 5
5
+ chances: 1
6
+ level: intermediate
7
+ --- !ruby/object:Lekanmastermind::PlayerResult
8
+ name: lateef
9
+ guess: gggroo
10
+ time: 6
11
+ chances: 1
12
+ level: intermediate
13
+ --- !ruby/object:Lekanmastermind::PlayerResult
14
+ name: poj
15
+ guess: rgry
16
+ time: 5
17
+ chances: 1
18
+ level: beginner
19
+ --- !ruby/object:Lekanmastermind::PlayerResult
20
+ name: lekan
21
+ guess: rgry
22
+ time: 1
23
+ chances: 1
24
+ level: beginner
25
+ --- !ruby/object:Lekanmastermind::PlayerResult
26
+ name: trump
27
+ guess: ggyorb
28
+ time: 33
29
+ chances: 2
30
+ level: intermediate
31
+ --- !ruby/object:Lekanmastermind::PlayerResult
32
+ name: olalekan
33
+ guess: yryr
34
+ time: 32
35
+ chances: 3
36
+ level: beginner
37
+ --- !ruby/object:Lekanmastermind::PlayerResult
38
+ name: Lekan
39
+ guess: ioyb
40
+ time: 120
41
+ chances: 5
42
+ level: beginner
43
+ --- !ruby/object:Lekanmastermind::PlayerResult
44
+ name: Lekan
45
+ guess: boob
46
+ time: 120
47
+ chances: 5
48
+ level: beginner
49
+ --- !ruby/object:Lekanmastermind::PlayerResult
50
+ name: Lekan
51
+ guess: rcyr
52
+ time: 120
53
+ chances: 5
54
+ level: beginner
55
+ --- !ruby/object:Lekanmastermind::PlayerResult
56
+ name: Lekan
57
+ guess: rryo
58
+ time: 190
59
+ chances: 5
60
+ level: beginner
61
+ --- !ruby/object:Lekanmastermind::PlayerResult
62
+ name: Lekan
63
+ guess: rbgy
64
+ time: 60
65
+ chances: 5
66
+ level: beginner
67
+ --- !ruby/object:Lekanmastermind::PlayerResult
68
+ name: ola
69
+ guess: boob
70
+ time: 63
71
+ chances: 1
72
+ level: beginner
73
+ --- !ruby/object:Lekanmastermind::PlayerResult
74
+ name: Lekan
75
+ guess: ioyb
76
+ time: 20
77
+ chances: 5
78
+ level: beginner
79
+ --- !ruby/object:Lekanmastermind::PlayerResult
80
+ name: Lekan
81
+ guess: rrrr
82
+ time: 20
83
+ chances: 5
84
+ level: beginner
85
+ --- !ruby/object:Lekanmastermind::PlayerResult
86
+ name: Lekan
87
+ guess: boyo
88
+ time: 100
89
+ chances: 5
90
+ level: beginner
91
+ --- !ruby/object:Lekanmastermind::PlayerResult
92
+ name: Lekan
93
+ guess: ioyb
94
+ time: 121
95
+ chances: 5
96
+ level: beginner
97
+ --- !ruby/object:Lekanmastermind::PlayerResult
98
+ name: Lekan
99
+ guess: ioyb
100
+ time: 190
101
+ chances: 5
102
+ level: beginner
103
+ --- !ruby/object:Lekanmastermind::PlayerResult
104
+ name: Lekan
105
+ guess: ioyb
106
+ time: 180
107
+ chances: 5
108
+ level: beginner
109
+ --- !ruby/object:Lekanmastermind::PlayerResult
110
+ name: Lekan
111
+ guess: ioyb
112
+ time: 170
113
+ chances: 5
114
+ level: beginner
115
+ --- !ruby/object:Lekanmastermind::PlayerResult
116
+ name: Lekan
117
+ guess: ioyb
118
+ time: 160
119
+ chances: 5
120
+ level: beginner
121
+ --- !ruby/object:Lekanmastermind::PlayerResult
122
+ name: Lekan
123
+ guess: ioyb
124
+ time: 150
125
+ chances: 5
126
+ level: beginner
127
+ --- !ruby/object:Lekanmastermind::PlayerResult
128
+ name: Lekan
129
+ guess: ioyb
130
+ time: 140
131
+ chances: 5
132
+ level: beginner
133
+ --- !ruby/object:Lekanmastermind::PlayerResult
134
+ name: laztopaz
135
+ guess: oobo
136
+ time: 41
137
+ chances: 1
138
+ level:
139
+ --- !ruby/object:Lekanmastermind::PlayerResult
140
+ name: olalekan
141
+ guess: ccpo
142
+ time: 16
143
+ chances: 2
144
+ level:
145
+ --- !ruby/object:Lekanmastermind::PlayerResult
146
+ name: olalekan
147
+ guess: rvvvbg
148
+ time: 0
149
+ chances: 1
150
+ level: intermediate
151
+ --- !ruby/object:Lekanmastermind::PlayerResult
152
+ name: boss
153
+ guess: cooocg
154
+ time: 12
155
+ chances: 1
156
+ level: intermediate
157
+ --- !ruby/object:Lekanmastermind::PlayerResult
158
+ name: debare
159
+ guess: vgcicb
160
+ time: 8
161
+ chances: 1
162
+ level: intermediate
163
+ --- !ruby/object:Lekanmastermind::PlayerResult
164
+ name: pope
165
+ guess: igii
166
+ time: 4
167
+ chances: 1
168
+ level: beginner
169
+ --- !ruby/object:Lekanmastermind::PlayerResult
170
+ name: Lekan
171
+ guess: RRBYIO
172
+ time: 146
173
+ chances: 2
174
+ level: intermediate
175
+ --- !ruby/object:Lekanmastermind::PlayerResult
176
+ name: Lekan
177
+ guess: RRBYIO
178
+ time: 146
179
+ chances: 2
180
+ level: intermediate
181
+ --- !ruby/object:Lekanmastermind::PlayerResult
182
+ name: Lekan
183
+ guess: RRBYIO
184
+ time: 146
185
+ chances: 2
186
+ level: intermediate
187
+ --- !ruby/object:Lekanmastermind::PlayerResult
188
+ name: Lekan
189
+ guess: RRBYIO
190
+ time: 146
191
+ chances: 2
192
+ level: intermediate
193
+ --- !ruby/object:Lekanmastermind::PlayerResult
194
+ name: Lekan
195
+ guess: RRBYIO
196
+ time: 146
197
+ chances: 2
198
+ level: intermediate
199
+ --- !ruby/object:Lekanmastermind::PlayerResult
200
+ name: Lekan
201
+ guess: RRBYIO
202
+ time: 146
203
+ chances: 2
204
+ level: intermediate
205
+ --- !ruby/object:Lekanmastermind::PlayerResult
206
+ name: Lekan
207
+ guess: RRBYIO
208
+ time: 146
209
+ chances: 2
210
+ level: intermediate
211
+ --- !ruby/object:Lekanmastermind::PlayerResult
212
+ name: lekan
213
+ guess: rrvy
214
+ time: 120
215
+ chances: 5
216
+ level: beginner
217
+ --- !ruby/object:Lekanmastermind::PlayerResult
218
+ name: Lekan
219
+ guess: RRBYIO
220
+ time: 146
221
+ chances: 2
222
+ level: intermediate
223
+ --- !ruby/object:Lekanmastermind::PlayerResult
224
+ name: lekan
225
+ guess: rrvy
226
+ time: 120
227
+ chances: 5
228
+ level: beginner
229
+ --- !ruby/object:Lekanmastermind::PlayerResult
230
+ name: Lekan
231
+ guess: RRBYIO
232
+ time: 146
233
+ chances: 2
234
+ level: intermediate
235
+ --- !ruby/object:Lekanmastermind::PlayerResult
236
+ name: lekan
237
+ guess: rrvy
238
+ time: 120
239
+ chances: 5
240
+ level: beginner
241
+ --- !ruby/object:Lekanmastermind::PlayerResult
242
+ name: Lekan
243
+ guess: RRBYIO
244
+ time: 146
245
+ chances: 2
246
+ level: intermediate
247
+ --- !ruby/object:Lekanmastermind::PlayerResult
248
+ name: lekan
249
+ guess: rrvy
250
+ time: 120
251
+ chances: 5
252
+ level: beginner
253
+ --- !ruby/object:Lekanmastermind::PlayerResult
254
+ name: Lekan
255
+ guess: RRBYIO
256
+ time: 146
257
+ chances: 2
258
+ level: intermediate
259
+ --- !ruby/object:Lekanmastermind::PlayerResult
260
+ name: lekan
261
+ guess: rrvy
262
+ time: 120
263
+ chances: 5
264
+ level: beginner
265
+ --- !ruby/object:Lekanmastermind::PlayerResult
266
+ name: Lekan
267
+ guess: RRBYIO
268
+ time: 146
269
+ chances: 2
270
+ level: intermediate
271
+ --- !ruby/object:Lekanmastermind::PlayerResult
272
+ name: lekan
273
+ guess: rrvy
274
+ time: 120
275
+ chances: 5
276
+ level: beginner
277
+ --- !ruby/object:Lekanmastermind::PlayerResult
278
+ name: Lekan
279
+ guess: RRBYIO
280
+ time: 146
281
+ chances: 2
282
+ level: intermediate
283
+ --- !ruby/object:Lekanmastermind::PlayerResult
284
+ name: lekan
285
+ guess: rrvy
286
+ time: 120
287
+ chances: 5
288
+ level: beginner
289
+ --- !ruby/object:Lekanmastermind::PlayerResult
290
+ name: Lekan
291
+ guess: RRBYIO
292
+ time: 146
293
+ chances: 2
294
+ level: intermediate
295
+ --- !ruby/object:Lekanmastermind::PlayerResult
296
+ name: lekan
297
+ guess: rrvy
298
+ time: 120
299
+ chances: 5
300
+ level: beginner
301
+ --- !ruby/object:Lekanmastermind::PlayerResult
302
+ name: Lekan
303
+ guess: RRBYIO
304
+ time: 146
305
+ chances: 2
306
+ level: intermediate
307
+ --- !ruby/object:Lekanmastermind::PlayerResult
308
+ name: lekan
309
+ guess: rrvy
310
+ time: 120
311
+ chances: 5
312
+ level: beginner
313
+ --- !ruby/object:Lekanmastermind::PlayerResult
314
+ name: Lekan
315
+ guess: RRBYIO
316
+ time: 146
317
+ chances: 2
318
+ level: intermediate
319
+ --- !ruby/object:Lekanmastermind::PlayerResult
320
+ name: lekan
321
+ guess: rrvy
322
+ time: 120
323
+ chances: 5
324
+ level: beginner
325
+ --- !ruby/object:Lekanmastermind::PlayerResult
326
+ name: Lekan
327
+ guess: RRBYIO
328
+ time: 146
329
+ chances: 2
330
+ level: intermediate
331
+ --- !ruby/object:Lekanmastermind::PlayerResult
332
+ name: lekan
333
+ guess: rrvy
334
+ time: 120
335
+ chances: 5
336
+ level: beginner
metadata ADDED
@@ -0,0 +1,141 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lekanmastermind
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Olalekan Eyiowuawi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-03-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.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
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
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: coveralls
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: This is an implementation of the mastermind game with 3 difficulty levels
84
+ email:
85
+ - olalekan.eyiowuawi@andela.com
86
+ executables:
87
+ - lekanmastermind
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".codeclimate.yml"
92
+ - ".coveralls.yml"
93
+ - ".gitignore"
94
+ - ".rspec"
95
+ - ".travis.yml"
96
+ - Gemfile
97
+ - README.md
98
+ - Rakefile
99
+ - bin/CLI/extra_methods.rb
100
+ - bin/CLI/game_start.rb
101
+ - bin/CLI/logic.rb
102
+ - bin/CLI/set_player.rb
103
+ - bin/lekanmastermind
104
+ - bin/setup
105
+ - circle.yml
106
+ - lekanmastermind.gemspec
107
+ - lib/lekanmastermind.rb
108
+ - lib/lekanmastermind/computer.rb
109
+ - lib/lekanmastermind/filemanager.rb
110
+ - lib/lekanmastermind/game_engine.rb
111
+ - lib/lekanmastermind/messages.rb
112
+ - lib/lekanmastermind/player.rb
113
+ - lib/lekanmastermind/player_result.rb
114
+ - lib/lekanmastermind/version.rb
115
+ - scores.yaml
116
+ homepage: https://github.com/andela-oeyiowuawi/lekanmastermind
117
+ licenses: []
118
+ metadata:
119
+ allowed_push_host: https://rubygems.org
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ - bin/CLI
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubyforge_project:
137
+ rubygems_version: 2.4.6
138
+ signing_key:
139
+ specification_version: 4
140
+ summary: The is an implementation of the mastermind game.
141
+ test_files: []