Created
November 22, 2013 15:39
-
-
Save JonahMoses/7601892 to your computer and use it in GitHub Desktop.
Scabble Player Class
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 | |
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' | |
class Player | |
attr_reader :name, | |
:score, | |
:letters | |
def initialize(name, scrabble = Scrabble) | |
@name = name | |
@score = 0 | |
@scrabble = scrabble | |
@letters = [] | |
end | |
def plays(word) | |
increment_score(@scrabble.score(word)) | |
removes_played_letters(word) | |
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 removes_played_letters(word) | |
letters = word.split("") | |
letters.each do |letter| | |
@letters.delete(letter) | |
end | |
end | |
private | |
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