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.
- 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** [](https://codeclimate.com/github/andela-oeyiowuawi/lekanmastermind) [](https://circleci.com/gh/andela-oeyiowuawi/lekanmastermind) [](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: []
|