lekanmastermind 0.1.0

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