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 +1 -0
- data/liars_dice.gemspec +14 -0
- data/lib/liars_dice/command_line_watcher.rb +1 -0
- data/lib/liars_dice/engine.rb +7 -0
- data/lib/liars_dice/event.rb +9 -0
- data/lib/liars_dice/game.rb +14 -0
- data/lib/liars_dice/human_bot.rb +20 -7
- data/lib/liars_dice/watcher.rb +8 -2
- data/lib/liars_dice.rb +1 -0
- metadata +5 -2
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
/liars_dice-*.gem
|
data/liars_dice.gemspec
ADDED
@@ -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
|
data/lib/liars_dice/engine.rb
CHANGED
@@ -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
|
data/lib/liars_dice/event.rb
CHANGED
@@ -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
|
data/lib/liars_dice/human_bot.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/liars_dice/watcher.rb
CHANGED
@@ -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
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.
|
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-
|
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
|