liars_dice 0.0.1 → 0.0.2

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.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ /liars_dice-*.gem
@@ -0,0 +1,14 @@
1
+ Gem::Specification.new do |gem|
2
+ gem.name = 'liars_dice'
3
+ gem.version = '0.0.2'
4
+ gem.date = '2013-07-02'
5
+ gem.summary = "Liar's Dice game"
6
+ gem.description = "A liar's dice botting environment, developed by Aisle50"
7
+ gem.authors = ['Ben Schmeckpeper', 'Chris Doyle', 'Max Page', 'Molly Struve']
8
+ gem.email = 'dev@aisle50.com'
9
+
10
+ exclusions = [".rvmrc"]
11
+ gem.files = `git ls-files`.split($\) - exclusions
12
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
13
+ gem.require_paths = ["lib"]
14
+ end
@@ -8,6 +8,7 @@ module LiarsDice
8
8
  append_after_bs lambda{|seat| puts "Seat #{seat} calls BS" }
9
9
  append_after_game lambda{|winner| puts "Game over. Seat #{winner} wins." }
10
10
  append_after_round lambda{|loser| puts "Seat #{loser} loses a die" }
11
+ append_after_seats_assigned lambda{|assignments| assignments.each{|number, name| puts "Seat #{number}: #{name}" } }
11
12
  end
12
13
  end
13
14
  end
@@ -15,11 +15,13 @@ module LiarsDice
15
15
  end
16
16
 
17
17
  def run
18
+ notify_seats
18
19
  until winner?
19
20
  roll_dice
20
21
  run_round
21
22
  end
22
23
  notify_winner
24
+ nil
23
25
  end
24
26
 
25
27
  def get_bid(seat)
@@ -124,6 +126,11 @@ module LiarsDice
124
126
  notify_watcher(event)
125
127
  end
126
128
 
129
+ def notify_seats
130
+ event = SeatsAssignedEvent.new(seats)
131
+ notify_watcher(event)
132
+ end
133
+
127
134
  def notify_players(event)
128
135
  seats.each{|s| s.player.handle_event(event) }
129
136
  end
@@ -54,4 +54,13 @@ module LiarsDice
54
54
  super("Game is over. Seat #{seat_number} is the winner.")
55
55
  end
56
56
  end
57
+
58
+ class SeatsAssignedEvent < Event
59
+ attr_accessor :seat_assignments
60
+
61
+ def initialize(seats)
62
+ self.seat_assignments = {}
63
+ seats.each{|seat| self.seat_assignments[seat.number] = seat.player.class }
64
+ end
65
+ end
57
66
  end
@@ -0,0 +1,14 @@
1
+ module LiarsDice
2
+ class Game
3
+ def self.play(bot_classes)
4
+ self.new.play(bot_classes)
5
+ end
6
+
7
+ def play(bot_classes)
8
+ w = LiarsDice::CommandLineWatcher.new
9
+ w.append_after_round lambda { |*args| gets }
10
+ e = LiarsDice::Engine.new(bot_classes, 5, w)
11
+ e.run
12
+ end
13
+ end
14
+ end
@@ -1,32 +1,45 @@
1
1
  module LiarsDice
2
2
  class HumanBot
3
- attr_accessor :prev_bid, :dice
3
+ attr_accessor :prev_bid, :dice, :seat_number
4
4
 
5
5
  def initialize(seat_number, number_of_players, number_of_dice)
6
+ self.seat_number = seat_number
6
7
  puts "You're playing as HumanBot in seat #{seat_number}"
7
8
  puts "When asked for a bid, either enter <TOTAL> <FACE_VALUE> or BS"
8
9
  end
9
10
 
10
-
11
11
  def handle_event(event)
12
12
  if event.is_a? LiarsDice::BidMadeEvent
13
13
  self.prev_bid = event.bid
14
+ return if event.seat_number.to_i == self.seat_number.to_i
15
+ puts event.message
16
+ elsif event.is_a? LiarsDice::BSCalledEvent
17
+ return if event.seat_number.to_i == self.seat_number.to_i
18
+ puts event.message
14
19
  elsif event.is_a? LiarsDice::LoserEvent
20
+ puts "There were #{event.dice.flatten.select{|i| i == prev_bid.face_value or i == 1}.length} #{prev_bid.face_value}s"
21
+ if event.seat_number == self.seat_number
22
+ puts "You lose a die"
23
+ else
24
+ puts event.message
25
+ end
26
+ puts
15
27
  self.prev_bid = nil
16
28
  end
17
29
  end
18
30
 
31
+ def format_event(event)
32
+ return if event.seat_number.to_i == seat_number.to_i
33
+ event.message
34
+ end
35
+
19
36
  def dice=(dice)
20
37
  @dice = dice
21
38
  puts "Your dice are #{dice.inspect.to_s}"
22
39
  end
23
40
 
24
41
  def bid
25
- if prev_bid
26
- puts "Previous bid was #{prev_bid}"
27
- else
28
- puts "You're bidding first"
29
- end
42
+ puts "You're bidding first" unless prev_bid
30
43
 
31
44
  print "What do you bid? "
32
45
  bid_string = gets.chomp
@@ -1,6 +1,6 @@
1
1
  module LiarsDice
2
2
  module Watcher
3
- attr_reader :after_roll, :after_bid, :after_round, :after_bs, :after_game, :after_dice_rolled
3
+ attr_reader :after_roll, :after_bid, :after_round, :after_bs, :after_game, :after_dice_rolled, :after_seats_assigned
4
4
 
5
5
  def append_after_bid(callback)
6
6
  append_callback(:after_bid, callback)
@@ -22,6 +22,10 @@ module LiarsDice
22
22
  append_callback(:after_dice_rolled, callback)
23
23
  end
24
24
 
25
+ def append_after_seats_assigned(callback)
26
+ append_callback(:after_seats_assigned, callback)
27
+ end
28
+
25
29
  def handle_event(event)
26
30
  if event.is_a? BidMadeEvent
27
31
  fire(:after_bid, event.seat_number, event.bid)
@@ -33,12 +37,14 @@ module LiarsDice
33
37
  fire(:after_game, event.seat_number)
34
38
  elsif event.is_a? DiceRolledEvent
35
39
  fire(:after_dice_rolled, event.dice)
40
+ elsif event.is_a? SeatsAssignedEvent
41
+ fire(:after_seats_assigned, event.seat_assignments)
36
42
  end
37
43
  end
38
44
 
39
45
  private
40
46
  def allowed_callbacks
41
- [:after_bid, :after_bs, :after_dice_rolled, :after_game, :after_round]
47
+ [:after_bid, :after_bs, :after_dice_rolled, :after_game, :after_round, :after_seats_assigned]
42
48
  end
43
49
 
44
50
  def append_callback(callback_name, callback)
data/lib/liars_dice.rb CHANGED
@@ -2,6 +2,7 @@ require 'liars_dice/watcher'
2
2
  require 'liars_dice/bid'
3
3
  require 'liars_dice/engine'
4
4
  require 'liars_dice/event'
5
+ require 'liars_dice/game'
5
6
  require 'liars_dice/seat'
6
7
  require 'liars_dice/command_line_watcher'
7
8
  require 'liars_dice/random_bot'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liars_dice
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2013-06-28 00:00:00.000000000Z
15
+ date: 2013-07-02 00:00:00.000000000Z
16
16
  dependencies: []
17
17
  description: A liar's dice botting environment, developed by Aisle50
18
18
  email: dev@aisle50.com
@@ -20,12 +20,15 @@ executables: []
20
20
  extensions: []
21
21
  extra_rdoc_files: []
22
22
  files:
23
+ - .gitignore
23
24
  - README.md
25
+ - liars_dice.gemspec
24
26
  - lib/liars_dice.rb
25
27
  - lib/liars_dice/bid.rb
26
28
  - lib/liars_dice/command_line_watcher.rb
27
29
  - lib/liars_dice/engine.rb
28
30
  - lib/liars_dice/event.rb
31
+ - lib/liars_dice/game.rb
29
32
  - lib/liars_dice/human_bot.rb
30
33
  - lib/liars_dice/random_bot.rb
31
34
  - lib/liars_dice/seat.rb