-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathblackjack.rb
123 lines (98 loc) · 1.98 KB
/
blackjack.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
require 'yaml'
class Settings
def self.open(filename)
file = YAML.load_file(filename)
file.each do |key, value|
define_singleton_method key do
value
end
end
end
end
module Card
def value; raise NotImplementedError; end
def self.included(base)
base.class_eval do
def self.+(card0, card1)
if card0.value.class == Array and card1.value.class == Array
[card0.value[0]+card1.value[0], card0.value[1]+card1.value[1]]
elsif card0.value.class == Array
[card0.value[0]+card1.value, card.value[1]+card1.value]
elsif value.class == Array
[card0.value+card1.value[0], card0.value+card1.value[1]]
else
card0.value + card1.value
end
end
def +(card)
self.+(card, self)
end
end
end
end
class Ace
include Card
def value; [1, 11]; end
def to_s; "A"; end
end
module Face
include Card
def value; 10; end
end
class King
include Face
def to_s; "K"; end
end
class Queen
include Face
def to_s; "Q"; end
end
class Jack
include Face
def to_s; "J"; end
end
module NumberCard
include Card
CARDS_IN_LETTERS = {
two: 2,
three: 3,
four: 4,
five: 5,
six: 6,
seven: 7,
eight: 8,
nine: 9,
ten: 10
}
def self.included(base)
define_method :value do
CARDS_IN_LETTERS[self.class.to_s.downcase.to_sym]
end
define_method :to_s do
value.to_s
end
end
end
NumberCard::CARDS_IN_LETTERS.each do |cardname, cardvalue|
new_class = Class.new(Object) do
include NumberCard
end
Object.const_set(cardname.to_s.capitalize, new_class)
end
module SingleDeck
def self.deck
%i{two three four five six seven eight nine ten jack queen king ace} * 4
end
end
class Deck
def initialize
@deck = []
end
end
Settings.open("settings.yaml")
puts Settings.number_of_decks
puts Jack.new.value
puts Ten.new.value
puts Nine.new.value
a, b, c = Ten.new, Nine.new, Two.new
puts a, b, c