Created
November 25, 2013 02:53
-
-
Save JonahMoses/7635526 to your computer and use it in GitHub Desktop.
scrabble
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Bundler.require | |
require './lib/scrabble' | |
require './lib/player' | |
require 'minitest/autorun' | |
require 'minitest/pride' | |
class PlayerTest < MiniTest::Unit::TestCase | |
def test_a_player_accepts_a_name | |
player = Player.new("Katrina") | |
assert_equal "Katrina", player.name | |
end | |
def test_a_player_defaults_to_zero_score | |
player = Player.new("Katrina") | |
assert_equal 0, player.score | |
end | |
def test_a_player_can_increase_score_by_playing_a_word | |
scrabble = Minitest::Mock.new | |
scrabble.expect(:score, 8, [String]) | |
player = Player.new("Katrina", scrabble) | |
player.plays("Hello") | |
assert_equal 8, player.score | |
end | |
def test_a_player_can_accumulate_score | |
scrabble = Minitest::Mock.new | |
scrabble.expect(:score, 25, [String]) | |
scrabble.expect(:score, 25, [String]) | |
player = Player.new("Katrina", scrabble) | |
player.plays("Hello") | |
player.plays("Bob") | |
assert_equal 50, player.score | |
end | |
def test_you_can_see_which_player_is_leading | |
scrabble = Minitest::Mock.new | |
scrabble.expect(:score, 50, [String]) | |
scrabble.expect(:score, 25, [String]) | |
player1 = Player.new("Katrina", scrabble) | |
player2 = Player.new("Frank", scrabble) | |
player1.plays("Hello") | |
player2.plays("Bob") | |
assert_equal 50, player1.score | |
assert_equal 25, player2.score | |
assert_equal false, player1.leading?(player2) | |
end | |
def test_a_player_can_have_multiple_letters | |
player1 = Player.new("Katrina") | |
assert_equal [], player1.letters | |
end | |
def test_a_player_can_add_a_letter | |
player1 = Player.new("Katrina") | |
assert_equal [], player1.letters | |
player1.add_letter('a') | |
assert_equal ['a'], player1.letters | |
end | |
def test_a_player_can_add_multiple_letters | |
player1 = Player.new("Katrina") | |
player1.add_letters('a', 'b', 'c') | |
assert_equal ['a', 'b', 'c'], player1.letters | |
end | |
def test_letters_are_removed_when_played | |
player1 = Player.new("Katrina") | |
player1.add_letters('a', 'b', 'c') | |
assert_equal ['a', 'b', 'c'], player1.letters | |
player1.plays('abc') | |
assert_equal [], player1.letters | |
end | |
def test_only_one_of_the_letters_is_removed_when_played | |
player1 = Player.new("Katrina") | |
player1.add_letters('w', 'i', 'n', 'n', 'e', 'r') | |
assert_equal ['w', 'i', 'n', 'n', 'e', 'r'], player1.letters | |
player1.plays('win') | |
assert_equal ['n', 'e', 'r'], player1.letters | |
end | |
def test_it_can_check_if_it_can_play_a_word | |
player1 = Player.new("Katrina") | |
player1.add_letters('w', 'a', 'n', 'd', 'x', 'e', 'j') | |
assert player1.can_play?("wand") | |
refute player1.can_play?("wind") | |
end | |
def test_it_can_check_if_it_can_play_a_word_with_multiple_letter_issues | |
player1 = Player.new("Katrina") | |
player1.add_letters('f', 'u', 'n', 'y') | |
assert player1.can_play?("fun") | |
refute player1.can_play?("funny") | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require './lib/scrabble' | |
require 'pry' | |
class Player | |
attr_reader :name, | |
:score, | |
:letters | |
def initialize(name, scrabble = Scrabble) | |
@name = name | |
@score = 0 | |
@scrabble = scrabble | |
@letters = [] | |
end | |
def plays(word) | |
# if can_play?(word) | |
increment_score(@scrabble.score(word)) | |
removes_played_letters(word) | |
# else | |
# raise "#{@name} cannot play #{word}, has letters #{@letters}" | |
# end | |
end | |
def leading?(player) | |
player.score > self.score | |
end | |
def add_letter(letter) | |
@letters << letter | |
end | |
def add_letters(*letters) | |
letters.each do |letter| | |
@letters << letter | |
end | |
end | |
# def can_play?(word) | |
# possible_letters = @letters | |
# word.each_char do |char| | |
# if possible_letters.index(char).nil? | |
# return false | |
# else | |
# possible_letters.delete_at(possible_letters.index(char)) | |
# end | |
# end | |
def can_play?(word) | |
letters = @letters | |
word.each_char do |char| | |
unless letters.delete_at(letters.index(char) || letters.length) | |
return false | |
end | |
end | |
end | |
# doesn't work with the "funny" example | |
# def can_play?(word) | |
# word.chars.all? do |char| | |
# @letters.include?(char) | |
# end | |
# end | |
private | |
def removes_played_letters(word) | |
characters = word.split("") | |
characters.each do |char| | |
index_of_char = @letters.index(char) | |
@letters.delete_at(index_of_char) if index_of_char | |
end | |
end | |
def increment_score(score) | |
@score += score | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment