ventiuna 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +8 -0
- data/img/bender.jpg +0 -0
- data/lib/ventiuna.rb +18 -0
- data/lib/ventiuna/card.rb +35 -0
- data/lib/ventiuna/database/connection.rb +9 -0
- data/lib/ventiuna/database/schema.rb +23 -0
- data/lib/ventiuna/database/ventiuna_strategy.db +0 -0
- data/lib/ventiuna/dealer.rb +14 -0
- data/lib/ventiuna/deck.rb +40 -0
- data/lib/ventiuna/game.rb +273 -0
- data/lib/ventiuna/hand.rb +69 -0
- data/lib/ventiuna/player.rb +127 -0
- data/lib/ventiuna/shoe.rb +19 -0
- data/lib/ventiuna/strategies/move.rb +32 -0
- data/lib/ventiuna/strategies/strategy.rb +28 -0
- data/lib/ventiuna/version.rb +3 -0
- data/test/test_card.rb +22 -0
- data/test/test_dealer.rb +153 -0
- data/test/test_deck.rb +39 -0
- data/test/test_game.rb +9 -0
- data/test/test_hand.rb +199 -0
- data/test/test_helper.rb +2 -0
- data/test/test_move.rb +13 -0
- data/test/test_player.rb +38 -0
- data/test/test_shoe.rb +54 -0
- data/test/test_strategy.rb +20 -0
- data/ventiuna.gemspec +26 -0
- metadata +141 -0
data/test/test_deck.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestDeck < Test::Unit::TestCase
|
4
|
+
def test_init
|
5
|
+
assert deck = Ventiuna::Deck.new
|
6
|
+
assert_equal(52, deck.cards.size)
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_shuffle
|
10
|
+
deck = Ventiuna::Deck.new
|
11
|
+
assert deck.shuffle
|
12
|
+
|
13
|
+
assert Ventiuna::Deck.new.cards == Ventiuna::Deck.new.cards, "two unsuffled decks should matchn"
|
14
|
+
|
15
|
+
# it's possible these two decks will be shuffled into the same order, but very unlikely
|
16
|
+
deck1 = Ventiuna::Deck.new.shuffle
|
17
|
+
deck2 = Ventiuna::Deck.new.shuffle
|
18
|
+
assert deck1 != deck2, "two shuffled decks should not match"
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_pop
|
22
|
+
deck = Ventiuna::Deck.new.shuffle
|
23
|
+
assert card = deck.pop
|
24
|
+
assert card.class == Ventiuna::Card
|
25
|
+
assert_equal(51, deck.size)
|
26
|
+
|
27
|
+
card2 = deck.pop
|
28
|
+
assert card != card2
|
29
|
+
assert_equal(50, deck.size)
|
30
|
+
|
31
|
+
deck = Ventiuna::Deck.new.shuffle
|
32
|
+
52.times do
|
33
|
+
card = deck.pop
|
34
|
+
assert card.class == Ventiuna::Card
|
35
|
+
end
|
36
|
+
assert_nil deck.pop
|
37
|
+
assert_equal(0, deck.size)
|
38
|
+
end
|
39
|
+
end
|
data/test/test_game.rb
ADDED
data/test/test_hand.rb
ADDED
@@ -0,0 +1,199 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestHand < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@duce = Ventiuna::Card.new(rank: "2", suit: "club")
|
6
|
+
@tres = Ventiuna::Card.new(rank: "3", suit: "diamond")
|
7
|
+
@quatro = Ventiuna::Card.new(rank: "4", suit: "heart")
|
8
|
+
|
9
|
+
@seven_of_diamonds = Ventiuna::Card.new(rank: "7", suit: "diamond")
|
10
|
+
@eight_of_spades = Ventiuna::Card.new(rank: "8", suit: "spade")
|
11
|
+
@eight_of_clubs = Ventiuna::Card.new(rank: "8", suit: "club")
|
12
|
+
|
13
|
+
@jack_of_clubs = Ventiuna::Card.new(rank: "J", suit: "club")
|
14
|
+
@king_of_hearts = Ventiuna::Card.new(rank: "K", suit: "heart")
|
15
|
+
@ace_of_diamonds = Ventiuna::Card.new(rank: "A", suit: "diamond")
|
16
|
+
@ace_of_spades = Ventiuna::Card.new(rank: "A", suit: "spade")
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_init
|
20
|
+
assert Ventiuna::Hand.new
|
21
|
+
assert Ventiuna::Hand.new(@duce)
|
22
|
+
assert Ventiuna::Hand.new(@duce, @tres)
|
23
|
+
assert hand = Ventiuna::Hand.new(@duce, @tres, @quatro)
|
24
|
+
|
25
|
+
assert hand.cards.include?(@duce)
|
26
|
+
assert hand.cards.include?(@tres)
|
27
|
+
assert hand.cards.include?(@quatro)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_empty_hand
|
31
|
+
assert_equal(0, Ventiuna::Hand.new.value)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_add_cards
|
35
|
+
hand = Ventiuna::Hand.new
|
36
|
+
hand << @duce
|
37
|
+
hand << @tres
|
38
|
+
hand << @quatro
|
39
|
+
|
40
|
+
assert hand.cards.include?(@duce)
|
41
|
+
assert hand.cards.include?(@tres)
|
42
|
+
assert hand.cards.include?(@quatro)
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_value
|
46
|
+
hand = Ventiuna::Hand.new
|
47
|
+
hand << @duce
|
48
|
+
assert_equal(2, hand.value)
|
49
|
+
|
50
|
+
hand << @king_of_hearts
|
51
|
+
assert_equal(12, hand.value)
|
52
|
+
|
53
|
+
hand << @ace_of_diamonds
|
54
|
+
assert_equal(13, hand.value)
|
55
|
+
|
56
|
+
hand << @quatro
|
57
|
+
assert_equal(17, hand.value)
|
58
|
+
|
59
|
+
hand << @tres
|
60
|
+
assert_equal(20, hand.value)
|
61
|
+
|
62
|
+
hand << @jack_of_clubs
|
63
|
+
assert_equal(30, hand.value)
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_value_with_soft_hand
|
67
|
+
hand = Ventiuna::Hand.new
|
68
|
+
hand << @ace_of_diamonds
|
69
|
+
assert_equal(11, hand.value)
|
70
|
+
|
71
|
+
hand << @duce
|
72
|
+
assert_equal(13, hand.value)
|
73
|
+
|
74
|
+
hand << @king_of_hearts
|
75
|
+
assert_equal(13, hand.value)
|
76
|
+
|
77
|
+
hand << @ace_of_spades
|
78
|
+
assert_equal(14, hand.value)
|
79
|
+
end
|
80
|
+
|
81
|
+
def test_value_with_two_aces
|
82
|
+
hand = Ventiuna::Hand.new
|
83
|
+
hand << @tres
|
84
|
+
assert_equal(3, hand.value)
|
85
|
+
|
86
|
+
hand << @ace_of_spades
|
87
|
+
assert_equal(14, hand.value)
|
88
|
+
|
89
|
+
hand << @ace_of_diamonds
|
90
|
+
assert_equal(15, hand.value)
|
91
|
+
|
92
|
+
hand << @seven_of_diamonds
|
93
|
+
assert_equal(12, hand.value)
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_value_hit_on_11
|
97
|
+
hand = Ventiuna::Hand.new
|
98
|
+
hand.hit @tres
|
99
|
+
assert_equal(3, hand.value)
|
100
|
+
|
101
|
+
hand.hit @eight_of_spades
|
102
|
+
assert_equal(11, hand.value)
|
103
|
+
|
104
|
+
hand.hit @ace_of_diamonds
|
105
|
+
assert_equal(12, hand.value)
|
106
|
+
end
|
107
|
+
|
108
|
+
def test_value_hit_on_10
|
109
|
+
hand = Ventiuna::Hand.new
|
110
|
+
hand.hit @eight_of_spades
|
111
|
+
assert_equal(8, hand.value)
|
112
|
+
|
113
|
+
hand.hit @duce
|
114
|
+
assert_equal(10, hand.value)
|
115
|
+
|
116
|
+
hand.hit @ace_of_diamonds
|
117
|
+
assert_equal(21, hand.value)
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_blackjack?
|
121
|
+
hand = Ventiuna::Hand.new(@king_of_hearts, @ace_of_diamonds)
|
122
|
+
assert hand.blackjack?
|
123
|
+
|
124
|
+
hand = Ventiuna::Hand.new(@eight_of_spades, @duce, @ace_of_diamonds)
|
125
|
+
assert !hand.blackjack?
|
126
|
+
end
|
127
|
+
|
128
|
+
def test_pair?
|
129
|
+
hand = Ventiuna::Hand.new(@eight_of_spades, @eight_of_clubs)
|
130
|
+
assert hand.pair?
|
131
|
+
|
132
|
+
hand = Ventiuna::Hand.new(@king_of_hearts, @jack_of_clubs)
|
133
|
+
assert hand.pair?
|
134
|
+
|
135
|
+
hand = Ventiuna::Hand.new(@ace_of_diamonds, @ace_of_spades)
|
136
|
+
assert hand.pair?
|
137
|
+
|
138
|
+
hand = Ventiuna::Hand.new(@eight_of_spades, @ace_of_spades, @eight_of_clubs)
|
139
|
+
assert !hand.pair?
|
140
|
+
end
|
141
|
+
|
142
|
+
def test_soft?
|
143
|
+
hand = Ventiuna::Hand.new(@ace_of_spades, @duce)
|
144
|
+
assert hand.soft?
|
145
|
+
|
146
|
+
hand = Ventiuna::Hand.new(@tres, @ace_of_spades, @ace_of_diamonds)
|
147
|
+
assert hand.soft?
|
148
|
+
|
149
|
+
hand = Ventiuna::Hand.new(@tres, @ace_of_spades, @ace_of_diamonds, @seven_of_diamonds)
|
150
|
+
assert !hand.soft?
|
151
|
+
|
152
|
+
hand = Ventiuna::Hand.new(@ace_of_diamonds, @quatro)
|
153
|
+
assert hand.soft?
|
154
|
+
hand << @jack_of_clubs
|
155
|
+
hand << @king_of_hearts
|
156
|
+
assert !hand.soft?
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
def test_stand
|
161
|
+
hand = Ventiuna::Hand.new(@king_of_hearts, @jack_of_clubs)
|
162
|
+
hand.stand
|
163
|
+
assert !hand.active?
|
164
|
+
end
|
165
|
+
|
166
|
+
def test_split
|
167
|
+
hand = Ventiuna::Hand.new(@ace_of_diamonds, @ace_of_spades)
|
168
|
+
|
169
|
+
assert hand.split
|
170
|
+
assert hand.split.kind_of?(Array)
|
171
|
+
assert_equal(2, hand.split.size)
|
172
|
+
assert hand.split.collect{ |h| h.kind_of?(Ventiuna::Hand) }.all?
|
173
|
+
end
|
174
|
+
|
175
|
+
def test_bust?
|
176
|
+
hand = Ventiuna::Hand.new(@ace_of_diamonds, @quatro)
|
177
|
+
assert !hand.bust?
|
178
|
+
|
179
|
+
hand << @jack_of_clubs
|
180
|
+
assert !hand.bust?
|
181
|
+
|
182
|
+
hand << @king_of_hearts
|
183
|
+
assert hand.bust?
|
184
|
+
end
|
185
|
+
|
186
|
+
def test_to_db
|
187
|
+
hand = Ventiuna::Hand.new(@ace_of_diamonds, @duce)
|
188
|
+
assert_equal("13S", hand.to_db)
|
189
|
+
|
190
|
+
hand = Ventiuna::Hand.new(@seven_of_diamonds, @tres)
|
191
|
+
assert_equal("10", hand.to_db)
|
192
|
+
|
193
|
+
hand = Ventiuna::Hand.new(@ace_of_diamonds, @ace_of_spades)
|
194
|
+
assert_equal("12SP", hand.to_db)
|
195
|
+
|
196
|
+
hand = Ventiuna::Hand.new(@jack_of_clubs, @king_of_hearts)
|
197
|
+
assert_equal("20P", hand.to_db)
|
198
|
+
end
|
199
|
+
end
|
data/test/test_helper.rb
ADDED
data/test/test_move.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestMove < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@strategy = Ventiuna::Strategy.find_or_create_by_name("Test")
|
6
|
+
#@move = Ventiuna::Move.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_save
|
10
|
+
m = Ventiuna::Move.new(strategy_id: @strategy.id, dealers_card_value: 11, hand: "12SP", decision: "s")
|
11
|
+
assert m.save
|
12
|
+
end
|
13
|
+
end
|
data/test/test_player.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestPlayer < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@player = Ventiuna::Player.new("Player1")
|
6
|
+
@ace_of_spades = Ventiuna::Card.new(rank: "A", suit: "spade")
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_init
|
10
|
+
player = Ventiuna::Player.new("TestPlayer")
|
11
|
+
assert_equal("TestPlayer", player.name)
|
12
|
+
assert player.hands
|
13
|
+
assert player.stats
|
14
|
+
assert player.balance.kind_of?(Numeric)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_place_bet
|
18
|
+
assert @player.place_bet(5, 1000).kind_of?(Numeric)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_active_hand
|
22
|
+
assert @player.active_hand.kind_of?(Ventiuna::Hand)
|
23
|
+
assert @player.hand.kind_of?(Ventiuna::Hand)
|
24
|
+
assert_equal(@player.hand, @player.active_hand)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_reset_hand
|
28
|
+
@player.active_hand << @ace_of_spades
|
29
|
+
assert @player.active_hand.value != 0
|
30
|
+
|
31
|
+
@player.reset_hand
|
32
|
+
assert_equal(0, @player.hand.value)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_decision
|
36
|
+
assert ["s", "h", "d", "sp"].include?(@player.decision(@ace_of_spades))
|
37
|
+
end
|
38
|
+
end
|
data/test/test_shoe.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestShoe < Test::Unit::TestCase
|
4
|
+
def test_init
|
5
|
+
assert one_deck_shoe = Ventiuna::Shoe.new(1)
|
6
|
+
|
7
|
+
two_deck_shoe = Ventiuna::Shoe.new(2)
|
8
|
+
assert_equal(104, two_deck_shoe.cards.size)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_shuffle
|
12
|
+
assert six_deck_shoe = Ventiuna::Shoe.new(6).shuffle
|
13
|
+
assert_equal(312, six_deck_shoe.size)
|
14
|
+
|
15
|
+
assert Ventiuna::Shoe.new(8).cards == Ventiuna::Shoe.new(8).cards, "two unsuffled shoes should match"
|
16
|
+
|
17
|
+
shoe1 = Ventiuna::Shoe.new(8).shuffle
|
18
|
+
shoe2 = Ventiuna::Shoe.new(8).shuffle
|
19
|
+
assert shoe1 != shoe2, "two shuffled shoes should not match"
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_pop
|
23
|
+
eight_deck_shoe = Ventiuna::Shoe.new(8).shuffle
|
24
|
+
assert_equal(416, eight_deck_shoe.size)
|
25
|
+
assert eight_deck_shoe.pop.kind_of?(Ventiuna::Card)
|
26
|
+
assert_equal(415, eight_deck_shoe.size)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_needs_shuffling?
|
30
|
+
eight_deck_shoe = Ventiuna::Shoe.new(8)
|
31
|
+
assert eight_deck_shoe.needs_shuffling?
|
32
|
+
|
33
|
+
eight_deck_shoe.shuffle
|
34
|
+
assert !eight_deck_shoe.needs_shuffling?
|
35
|
+
|
36
|
+
eight_deck_shoe = Ventiuna::Shoe.new(8).shuffle
|
37
|
+
104.times do
|
38
|
+
eight_deck_shoe.pop
|
39
|
+
end
|
40
|
+
assert !eight_deck_shoe.needs_shuffling?
|
41
|
+
|
42
|
+
eight_deck_shoe = Ventiuna::Shoe.new(8).shuffle
|
43
|
+
312.times do
|
44
|
+
eight_deck_shoe.pop
|
45
|
+
end
|
46
|
+
assert eight_deck_shoe.needs_shuffling?
|
47
|
+
|
48
|
+
eight_deck_shoe = Ventiuna::Shoe.new(8).shuffle
|
49
|
+
360.times do
|
50
|
+
eight_deck_shoe.pop
|
51
|
+
end
|
52
|
+
assert eight_deck_shoe.needs_shuffling?
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestStrategy < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
@strategy = Ventiuna::Strategy.find_or_create_by_name("Test")
|
6
|
+
#@strategy.moves.destroy_all
|
7
|
+
@move = Ventiuna::Move.new(dealers_card_value: 11, hand: "21S", decision: "s")
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_save
|
11
|
+
@strategy.name = "Test"
|
12
|
+
#assert @strategy.save
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_associations
|
16
|
+
assert @strategy.moves
|
17
|
+
assert @strategy.moves << @move
|
18
|
+
#assert_equal(1, @strategy.moves.size)
|
19
|
+
end
|
20
|
+
end
|
data/ventiuna.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'ventiuna/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ventiuna"
|
8
|
+
spec.version = Ventiuna::VERSION
|
9
|
+
spec.authors = ["Dru Ibarra"]
|
10
|
+
spec.email = ["dibarra@apple.com"]
|
11
|
+
spec.description = %q{Blackjack game and simulator}
|
12
|
+
spec.summary = %q{Blackjack game and simulator}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "activerecord"
|
22
|
+
spec.add_dependency "sqlite3"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
25
|
+
spec.add_development_dependency "rake"
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ventiuna
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dru Ibarra
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-06-01 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sqlite3
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Blackjack game and simulator
|
70
|
+
email:
|
71
|
+
- dibarra@apple.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- Gemfile
|
78
|
+
- LICENSE.txt
|
79
|
+
- README.md
|
80
|
+
- Rakefile
|
81
|
+
- img/bender.jpg
|
82
|
+
- lib/ventiuna.rb
|
83
|
+
- lib/ventiuna/card.rb
|
84
|
+
- lib/ventiuna/database/connection.rb
|
85
|
+
- lib/ventiuna/database/schema.rb
|
86
|
+
- lib/ventiuna/database/ventiuna_strategy.db
|
87
|
+
- lib/ventiuna/dealer.rb
|
88
|
+
- lib/ventiuna/deck.rb
|
89
|
+
- lib/ventiuna/game.rb
|
90
|
+
- lib/ventiuna/hand.rb
|
91
|
+
- lib/ventiuna/player.rb
|
92
|
+
- lib/ventiuna/shoe.rb
|
93
|
+
- lib/ventiuna/strategies/move.rb
|
94
|
+
- lib/ventiuna/strategies/strategy.rb
|
95
|
+
- lib/ventiuna/version.rb
|
96
|
+
- test/test_card.rb
|
97
|
+
- test/test_dealer.rb
|
98
|
+
- test/test_deck.rb
|
99
|
+
- test/test_game.rb
|
100
|
+
- test/test_hand.rb
|
101
|
+
- test/test_helper.rb
|
102
|
+
- test/test_move.rb
|
103
|
+
- test/test_player.rb
|
104
|
+
- test/test_shoe.rb
|
105
|
+
- test/test_strategy.rb
|
106
|
+
- ventiuna.gemspec
|
107
|
+
homepage: ''
|
108
|
+
licenses:
|
109
|
+
- MIT
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 2.0.3
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: Blackjack game and simulator
|
131
|
+
test_files:
|
132
|
+
- test/test_card.rb
|
133
|
+
- test/test_dealer.rb
|
134
|
+
- test/test_deck.rb
|
135
|
+
- test/test_game.rb
|
136
|
+
- test/test_hand.rb
|
137
|
+
- test/test_helper.rb
|
138
|
+
- test/test_move.rb
|
139
|
+
- test/test_player.rb
|
140
|
+
- test/test_shoe.rb
|
141
|
+
- test/test_strategy.rb
|