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 +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
|