Skip to content

Instantly share code, notes, and snippets.

@JonahMoses
Created November 22, 2013 15:39
Show Gist options
  • Save JonahMoses/7601892 to your computer and use it in GitHub Desktop.
Save JonahMoses/7601892 to your computer and use it in GitHub Desktop.
Scabble Player Class
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
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