Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 0 additions & 15 deletions die.rb

This file was deleted.

9 changes: 9 additions & 0 deletions lib/die.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
class Die
def initialize; roll; end

def roll; @num = rand(6) + 1; end

alias to_s num

attr_reader :num
end
2 changes: 1 addition & 1 deletion move.rb → lib/move.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ def initialize(move_type)
end

def make(dice)
raise "Already made this move" if (!@score.nil?)
raise "Already made this move" if !@score.nil?
@score = send(@move_type, dice)
end

Expand Down
22 changes: 22 additions & 0 deletions lib/player.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
class Player
def initialize(game); @game, @round = game, Round.new; end

def start_turn; @game.roll;, end

def refine(reroll_dice); @game.roll reroll_dice; end

def total_score; @round.grand_total; end

def score(move)
if (move.nil? || !@round.score(move).nil?)
-1
else
@game.end_turn
@round.make_move(move, @game.dice)
end
end

def print_board; @round.print; end

def finished?; @round.complete?; end
end
26 changes: 7 additions & 19 deletions round.rb → lib/round.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,18 @@ class Round

def initialize()
@moves = Hash.new
Array.new(@@upper_moves).concat(@@lower_moves).each {|m| @moves[m] = Move.new(m)}
Array.new(@@upper_moves).concat(@@lower_moves).each {|m| @moves[m] = Move.new m}
end

def upper_total_raw
subtotal(@@upper_moves)
end
def upper_total_raw; subtotal @@upper_moves; end

def upper_bonus
upper_total_raw >= 63 ? 35 : 0
end
def upper_bonus; upper_total_raw >= 63 ? 35 : 0; end

def upper_total
upper_total_raw + upper_bonus
end
def upper_total; upper_total_raw + upper_bonus; end

def lower_total
subtotal(@@lower_moves)
end
def lower_total; subtotal @@lower_moves; end

def grand_total
lower_total + upper_total
end
def grand_total; lower_total + upper_total; end

def score(move)
raise "No such move \"${move}\"" if @moves[move].nil?
Expand All @@ -39,9 +29,7 @@ def make_move(move, dice)
@moves[move].make(dice)
end

def complete?
!@moves.any? {|name, move| move.score.nil?}
end
def complete?; !@moves.any? {|name, move| move.score.nil?}; end

def print
puts "1s\t\t#{score(:ones)}"
Expand Down
37 changes: 10 additions & 27 deletions yahtzee.rb → lib/yahtzee.rb
Original file line number Diff line number Diff line change
@@ -1,47 +1,30 @@
#!/usr/bin/ruby

require_relative 'die.rb'
require_relative 'player.rb'
require_relative 'round.rb'
require 'die'
require 'player'
require 'round'

class YahtzeeGame
def initialize(players = 1)
@dice = Array.new(5) {Die.new}
@no_of_players = players
@curr_player_no = 0
@players = Array.new(@no_of_players) { Player.new(self) }
@rolls = 0
end
def initialize(players = 1); @dice, @no_of_players, @curr_player_no, @players, @rolls = Array.new(5) {Die.new}, players, 0, Array.new(@no_of_players) {Player.new self}, 0; end

def roll(reroll_dice = [0,1,2,3,4])
if (@rolls < 3)
reroll_dice.map {|n| @dice[n] }.each do | die | die.roll end
@rolls = @rolls + 1
@rolls += 1
else
raise "You've had 3 rolls - choose a category to score this turn"
end
end

def end_turn
@rolls = 0
@curr_player_no = (@curr_player_no + 1) % @no_of_players
end
def end_turn; @rolls, @curr_player_no = 0, (@curr_player_no + 1) % @no_of_players; end

def curr_player
@players[@curr_player_no]
end
def curr_player; @players[@curr_player_no]; end

def curr_player_no
@curr_player_no + 1
end
def curr_player_no; @curr_player_no + 1; end

def dice
@dice.map {|d| d.num}
end
def dice; @dice.map {|d| d.num}; end

def over?
!@players.any? {|p| !p.finished?}
end
def over?; !@players.any? {|p| !p.finished?}; end
end

key_move_mappings = {"1" => :ones, "2" => :twos, "3" => :threes,
Expand Down
35 changes: 0 additions & 35 deletions player.rb

This file was deleted.