liars_dice 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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