lekanmastermind 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +1 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +5 -0
- data/README.md +53 -0
- data/Rakefile +6 -0
- data/bin/CLI/extra_methods.rb +6 -0
- data/bin/CLI/game_start.rb +86 -0
- data/bin/CLI/logic.rb +103 -0
- data/bin/CLI/set_player.rb +32 -0
- data/bin/lekanmastermind +14 -0
- data/bin/setup +8 -0
- data/circle.yml +6 -0
- data/lekanmastermind.gemspec +36 -0
- data/lib/lekanmastermind.rb +18 -0
- data/lib/lekanmastermind/computer.rb +24 -0
- data/lib/lekanmastermind/filemanager.rb +32 -0
- data/lib/lekanmastermind/game_engine.rb +86 -0
- data/lib/lekanmastermind/messages.rb +115 -0
- data/lib/lekanmastermind/player.rb +14 -0
- data/lib/lekanmastermind/player_result.rb +21 -0
- data/lib/lekanmastermind/version.rb +3 -0
- data/scores.yaml +336 -0
- metadata +141 -0
checksums.yaml
ADDED
@@ -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
|
data/.codeclimate.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
CODECLIMATE_REPO_TOKEN: 2221841a0794f2c05b80fb61684b8b5c615b5a6d48ef1167688c49ee5d278248
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
repo_token: dyp0tKFbP0SZIqr6SIWOF5mKvTc8PBVay
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -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
|
data/Rakefile
ADDED
@@ -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
|
data/bin/CLI/logic.rb
ADDED
@@ -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
|
data/bin/lekanmastermind
ADDED
@@ -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
|
data/bin/setup
ADDED
data/circle.yml
ADDED
@@ -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
|
data/scores.yaml
ADDED
@@ -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: []
|