manasimu 0.0.13 → 0.0.16
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 +4 -4
- data/db/card_type_aggregate +0 -0
- data/lib/manasimu/card/basicland.rb +3 -0
- data/lib/manasimu/card/pathway.rb +2 -1
- data/lib/manasimu/card/slowland.rb +5 -2
- data/lib/manasimu/card/snc_fetchland.rb +55 -0
- data/lib/manasimu/card/tapland.rb +5 -2
- data/lib/manasimu/card.rb +120 -39
- data/lib/manasimu/data.rb +16 -8
- data/lib/manasimu/game.rb +25 -17
- data/lib/manasimu/mana_type.rb +53 -5
- data/lib/manasimu/planner.rb +4 -3
- data/lib/manasimu/simulator.rb +5 -2
- data/lib/manasimu.rb +3 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3343e9db3fa8daa5303ccd50b555a5d5d25bd961d20c5392a8d526e8a78f425e
|
4
|
+
data.tar.gz: ddc59e45c459dfcd2cebb65d8104d0d25ac91a04bcb6ab387c0cd8bf285da24e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 67d7fb4abda302154d59c4de1e756c32c6b762a0d80c5fd7ce4c16fd6e3190509684796f8ee5a0c466066b1e32eba3f443366624909a2e0a2994ce4ceec9d65a
|
7
|
+
data.tar.gz: 2a8c4ec688061b5d55ae4c2d8c2832089975c55b9993b08edd1d795292e9312fba52a54232cf861291d55ccbb06c5da075217a9462d6feafeda62b998adcd959
|
data/db/card_type_aggregate
CHANGED
Binary file
|
@@ -1,6 +1,7 @@
|
|
1
1
|
class SlowLandCard < Card
|
2
2
|
|
3
|
-
def resolve(side, hands, plays)
|
3
|
+
def resolve(side, hands, plays, deck)
|
4
|
+
super(side, hands, plays, deck)
|
4
5
|
num = 0
|
5
6
|
for card in plays do
|
6
7
|
next if card == self
|
@@ -15,7 +16,8 @@ class SlowLandCard < Card
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
+
def step_in_plays(turn)
|
20
|
+
super(turn)
|
19
21
|
@tapped = false
|
20
22
|
end
|
21
23
|
|
@@ -24,6 +26,7 @@ class SlowLandCard < Card
|
|
24
26
|
end
|
25
27
|
|
26
28
|
def reset
|
29
|
+
super
|
27
30
|
@tapped = false
|
28
31
|
end
|
29
32
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
class SncFetchLandCard < TapLandCard
|
2
|
+
|
3
|
+
def resolve(side, hands, plays, deck)
|
4
|
+
super(side, hands, plays, deck)
|
5
|
+
return @fetch_source if @fetch_source
|
6
|
+
@tapped = true
|
7
|
+
if deck
|
8
|
+
@fetches = deck
|
9
|
+
.select { |card| card.instance_of? BasicLandCard }
|
10
|
+
.select { |card| @mana_source.include? card.mana_source[0] }
|
11
|
+
.uniq { |card| card.card_type }
|
12
|
+
@deck = deck
|
13
|
+
@fetch_source = @fetches.map { |card| card.mana_source }.flatten.uniq
|
14
|
+
else
|
15
|
+
@fetches = []
|
16
|
+
@fetch_source = []
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def first_produce_symbol=(color)
|
21
|
+
super(color)
|
22
|
+
basic_land = @fetches.select {|card| @mana_source.include? color}.first
|
23
|
+
if @deck and basic_land
|
24
|
+
@deck.delete basic_land
|
25
|
+
@deck.shuffle!
|
26
|
+
@fetch_source = [color]
|
27
|
+
@fetches = [basic_land]
|
28
|
+
else
|
29
|
+
[]
|
30
|
+
end
|
31
|
+
@fetched = true
|
32
|
+
end
|
33
|
+
|
34
|
+
def mana_source
|
35
|
+
raise Exception.new('you should resolve first') if not @fetch_source
|
36
|
+
@fetch_source
|
37
|
+
end
|
38
|
+
|
39
|
+
def configure
|
40
|
+
mana_types = ManaType.search_text_by_land_type(card_type.text)
|
41
|
+
@mana_source = mana_types.map {|mana_type| mana_type.color}.flatten.uniq
|
42
|
+
@fetched = false
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
def reset
|
47
|
+
super
|
48
|
+
@fetched = false
|
49
|
+
@fetch_source = nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def mana_produced?
|
53
|
+
@fetched
|
54
|
+
end
|
55
|
+
end
|
@@ -4,15 +4,18 @@ class TapLandCard < Card
|
|
4
4
|
@tapped
|
5
5
|
end
|
6
6
|
|
7
|
-
def resolve(side, hands, plays)
|
7
|
+
def resolve(side, hands, plays, deck)
|
8
|
+
super(side, hands, plays, deck)
|
8
9
|
@tapped = true
|
9
10
|
end
|
10
11
|
|
11
|
-
def
|
12
|
+
def step_in_plays(turn)
|
13
|
+
super(turn)
|
12
14
|
@tapped = false
|
13
15
|
end
|
14
16
|
|
15
17
|
def reset
|
18
|
+
super
|
16
19
|
@tapped = false
|
17
20
|
end
|
18
21
|
end
|
data/lib/manasimu/card.rb
CHANGED
@@ -6,11 +6,18 @@ class Card
|
|
6
6
|
@playable = false
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
|
9
|
+
def configure
|
10
|
+
end
|
11
|
+
|
12
|
+
def step_in_hands(turn)
|
13
|
+
@card_type.step_in_hands(turn, self)
|
11
14
|
@can_play = false
|
12
15
|
end
|
13
16
|
|
17
|
+
def step_in_plays(turn)
|
18
|
+
@card_type.step_in_plays(turn, self)
|
19
|
+
end
|
20
|
+
|
14
21
|
def drawed(turn)
|
15
22
|
@drawed = turn
|
16
23
|
@card_type.drawed(turn)
|
@@ -19,10 +26,12 @@ class Card
|
|
19
26
|
def played(turn, side = "a")
|
20
27
|
@played = turn
|
21
28
|
@side = side
|
22
|
-
|
29
|
+
if not is_land? or not tapped?
|
30
|
+
@card_type.played(turn)
|
31
|
+
end
|
23
32
|
end
|
24
33
|
|
25
|
-
def resolve(side = "a", hands, plays)
|
34
|
+
def resolve(side = "a", hands, plays, deck)
|
26
35
|
end
|
27
36
|
|
28
37
|
def played?
|
@@ -33,6 +42,14 @@ class Card
|
|
33
42
|
false
|
34
43
|
end
|
35
44
|
|
45
|
+
def mana_source
|
46
|
+
@card_type.mana_source
|
47
|
+
end
|
48
|
+
|
49
|
+
def mana_source_size
|
50
|
+
@card_type.mana_source_size
|
51
|
+
end
|
52
|
+
|
36
53
|
def mana_source?
|
37
54
|
@card_type.mana_source?
|
38
55
|
end
|
@@ -51,8 +68,8 @@ class Card
|
|
51
68
|
@card_type.types
|
52
69
|
end
|
53
70
|
|
54
|
-
def
|
55
|
-
@card_type.
|
71
|
+
def type
|
72
|
+
@card_type.type
|
56
73
|
end
|
57
74
|
|
58
75
|
def color_identity
|
@@ -77,7 +94,9 @@ class Card
|
|
77
94
|
|
78
95
|
def reset
|
79
96
|
@side = nil
|
80
|
-
@
|
97
|
+
@played = nil
|
98
|
+
@drawed = nil
|
99
|
+
@can_play = false
|
81
100
|
end
|
82
101
|
|
83
102
|
def is_land?
|
@@ -99,13 +118,17 @@ class Card
|
|
99
118
|
def first_produce_symbol=(symbol)
|
100
119
|
end
|
101
120
|
|
121
|
+
def set_code
|
122
|
+
@card_type.set_code
|
123
|
+
end
|
124
|
+
|
102
125
|
def to_s
|
103
126
|
@card_type.to_s
|
104
127
|
end
|
105
128
|
end
|
106
129
|
|
107
130
|
class CardType
|
108
|
-
attr_accessor :contents, :played, :drawed, :name, :can_plays
|
131
|
+
attr_accessor :contents, :played, :drawed, :name, :can_plays, :mana_sources
|
109
132
|
|
110
133
|
def self.create(card_type, name)
|
111
134
|
ret = card_type.dup
|
@@ -113,6 +136,7 @@ class CardType
|
|
113
136
|
ret.played = {}
|
114
137
|
ret.drawed = {}
|
115
138
|
ret.can_plays = {}
|
139
|
+
ret.mana_sources = {}
|
116
140
|
ret.name = name
|
117
141
|
ret
|
118
142
|
end
|
@@ -122,6 +146,7 @@ class CardType
|
|
122
146
|
@played = {}
|
123
147
|
@drawed = {}
|
124
148
|
@can_plays = {}
|
149
|
+
@mana_sources = {}
|
125
150
|
@contents = contents.map {|c| Content.new(c)}
|
126
151
|
end
|
127
152
|
|
@@ -129,13 +154,24 @@ class CardType
|
|
129
154
|
@name ||= @contents[0].name
|
130
155
|
end
|
131
156
|
|
132
|
-
def
|
133
|
-
if
|
157
|
+
def step_in_hands(turn, card)
|
158
|
+
if card.can_play?
|
134
159
|
@can_plays[turn] ||= 0
|
135
160
|
@can_plays[turn] += 1
|
136
161
|
end
|
137
162
|
end
|
138
163
|
|
164
|
+
def step_in_plays(turn, card)
|
165
|
+
if card.mana_source? and not card.tapped?
|
166
|
+
@mana_sources[turn] ||= {}
|
167
|
+
size = card.mana_source.length
|
168
|
+
card.mana_source.each do |c|
|
169
|
+
@mana_sources[turn][c] ||= 0
|
170
|
+
@mana_sources[turn][c] += 1.0 / size
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
139
175
|
def played(turn)
|
140
176
|
@played[turn] ||= 0
|
141
177
|
@played[turn] += 1
|
@@ -146,47 +182,63 @@ class CardType
|
|
146
182
|
@drawed[turn] += 1
|
147
183
|
end
|
148
184
|
|
185
|
+
def mana_source
|
186
|
+
@mana_source ||= @contents.map { |c|
|
187
|
+
c.color_identity ? c.color_identity.split(',') : []
|
188
|
+
}.flatten.uniq
|
189
|
+
end
|
190
|
+
|
191
|
+
def mana_source_size
|
192
|
+
(a = mana_source) ? a.size : 0
|
193
|
+
end
|
194
|
+
|
149
195
|
def mana_source?
|
150
|
-
@
|
196
|
+
@is_mana_source ||= @contents.any? {|content| content.mana_source?}
|
151
197
|
end
|
152
198
|
|
153
|
-
def
|
154
|
-
@
|
199
|
+
def mana_cost
|
200
|
+
return @mana_cost if @mana_cost
|
201
|
+
spell = @contents.select {|c| c.types != "Land"}.first
|
202
|
+
if spell
|
203
|
+
@mana_cost = spell.mana_cost
|
204
|
+
else
|
205
|
+
@mana_cost = '0'
|
206
|
+
end
|
155
207
|
end
|
156
208
|
|
157
|
-
def
|
158
|
-
@
|
209
|
+
def converted_mana_cost
|
210
|
+
@converted_mana_cost ||= @contents.map {|c| c.converted_mana_cost}.min
|
211
|
+
end
|
212
|
+
|
213
|
+
def text
|
214
|
+
@text ||= @contents.map {|c| c.text}.flatten.join('')
|
215
|
+
end
|
216
|
+
|
217
|
+
def type
|
218
|
+
@type ||= @contents.map {|c| c.type}.flatten.uniq
|
219
|
+
end
|
220
|
+
|
221
|
+
def types
|
222
|
+
@types ||= @contents.map {|c| c.types}
|
159
223
|
end
|
160
224
|
|
161
225
|
def color_identity
|
162
226
|
return @memo_colors if @memo_colors
|
163
227
|
@memo_colors ||= []
|
164
228
|
@contents.each do |c|
|
165
|
-
c.color_identity
|
166
|
-
|
229
|
+
if c.color_identity
|
230
|
+
c.color_identity.split(",").each do |color|
|
231
|
+
@memo_colors << color if not @memo_colors.include? color
|
232
|
+
end
|
167
233
|
end
|
168
234
|
end
|
169
235
|
@memo_colors
|
170
236
|
end
|
171
237
|
|
172
|
-
def converted_mana_cost
|
173
|
-
@converted_mana_cost ||= @contents.map {|c| c.converted_mana_cost}.min
|
174
|
-
end
|
175
|
-
|
176
238
|
def color_identity_size
|
177
239
|
color_identity.length
|
178
240
|
end
|
179
241
|
|
180
|
-
def mana_cost
|
181
|
-
return @mana_cost if @mana_cost
|
182
|
-
spell = @contents.select {|c| c.types != "Land"}.first
|
183
|
-
if spell
|
184
|
-
@mana_cost = spell.mana_cost
|
185
|
-
else
|
186
|
-
@mana_cost = '0'
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
242
|
def symbols
|
191
243
|
return @symbols if @symbols
|
192
244
|
@symbols = []
|
@@ -215,7 +267,12 @@ class CardType
|
|
215
267
|
converted_mana_cost
|
216
268
|
end
|
217
269
|
|
270
|
+
def set_code
|
271
|
+
@contents[0].set_code
|
272
|
+
end
|
273
|
+
|
218
274
|
def is_land?(side = nil)
|
275
|
+
return @is_land if @is_land
|
219
276
|
arr = if side == 'a'
|
220
277
|
[0]
|
221
278
|
elsif side == 'b'
|
@@ -223,9 +280,10 @@ class CardType
|
|
223
280
|
else
|
224
281
|
[0,1]
|
225
282
|
end
|
226
|
-
arr.select do |i|
|
283
|
+
@is_land = arr.select do |i|
|
227
284
|
@contents[i] and @contents[i].types == "Land"
|
228
285
|
end.length > 0
|
286
|
+
return @is_land
|
229
287
|
end
|
230
288
|
|
231
289
|
def playable?(lands, capas)
|
@@ -284,7 +342,7 @@ class CardType
|
|
284
342
|
# lands and mana_cost connect to each symbols
|
285
343
|
lands.each_with_index do |land, i|
|
286
344
|
next if capas[i].to_i == 0
|
287
|
-
land_colors = land.
|
345
|
+
land_colors = land.mana_source
|
288
346
|
symbols.each_with_index do |symbol, j|
|
289
347
|
if symbol == "1" or land_colors.include? symbol
|
290
348
|
result << [i + 1, x + 1 + j]
|
@@ -305,18 +363,23 @@ class CardType
|
|
305
363
|
|
306
364
|
def count(turn = nil)
|
307
365
|
turn ||= converted_mana_cost
|
308
|
-
|
309
|
-
|
366
|
+
played_count = @played[turn] || 0
|
367
|
+
drawed_count = 0
|
310
368
|
(turn+1).times do |i|
|
311
|
-
|
369
|
+
drawed_count += @drawed[i] || 0
|
312
370
|
end
|
313
|
-
|
314
|
-
[
|
371
|
+
can_played_count = @can_plays[turn] || 0
|
372
|
+
mana_sources_count = @mana_sources[turn] || {}
|
373
|
+
[played_count, drawed_count, can_played_count, mana_sources_count]
|
315
374
|
end
|
316
375
|
|
317
376
|
def to_s
|
318
377
|
@contents.map {|c| c.to_s}.join(",")
|
319
378
|
end
|
379
|
+
|
380
|
+
def to_factory
|
381
|
+
@contents.map {|c| c.to_factory}
|
382
|
+
end
|
320
383
|
end
|
321
384
|
|
322
385
|
class CardTypeAggregate
|
@@ -344,7 +407,7 @@ class CardTypeAggregate
|
|
344
407
|
end
|
345
408
|
|
346
409
|
class Content
|
347
|
-
attr_accessor :name, :number, :side, :set_code, :mana_cost, :types, :color_identity, :converted_mana_cost, :text
|
410
|
+
attr_accessor :name, :number, :side, :set_code, :mana_cost, :type, :types, :color_identity, :converted_mana_cost, :text
|
348
411
|
|
349
412
|
def initialize(hash)
|
350
413
|
@name = hash[:name]
|
@@ -353,6 +416,7 @@ class Content
|
|
353
416
|
@set_code = hash[:set_code]
|
354
417
|
@mana_cost = hash[:mana_cost]
|
355
418
|
@types = hash[:types]
|
419
|
+
@type = hash[:type]
|
356
420
|
@text = hash[:text]
|
357
421
|
@color_identity = hash[:color_identity]
|
358
422
|
@converted_mana_cost = hash[:converted_mana_cost].to_i
|
@@ -366,6 +430,23 @@ class Content
|
|
366
430
|
"[#{@name}] [#{@types}] [#{@color_identity}] [#{@mana_cost}]"
|
367
431
|
end
|
368
432
|
|
433
|
+
def to_factory
|
434
|
+
<<EOF
|
435
|
+
factory '#{@name.underscore}_content', class: Content do
|
436
|
+
name {'#{@name}'}
|
437
|
+
number {'#{@number}'}
|
438
|
+
side {'#{@side}'}
|
439
|
+
set_code { '#{@set_code}'}
|
440
|
+
mana_cost { '#{@mana_cost}'}
|
441
|
+
type { '#{@type}'}
|
442
|
+
types { '#{@types}'}
|
443
|
+
text { '#{@text}'}
|
444
|
+
color_identity { '#{@color_identity}'}
|
445
|
+
converted_mana_cost {#{@converted_mana_cost}}
|
446
|
+
end
|
447
|
+
EOF
|
448
|
+
end
|
449
|
+
|
369
450
|
end
|
370
451
|
|
371
452
|
class FordFulkersonSingleton
|
data/lib/manasimu/data.rb
CHANGED
@@ -70,14 +70,22 @@ class Deck
|
|
70
70
|
card_type = @@card_types.find(deck_item[:set], deck_item[:setnum])
|
71
71
|
clone = CardType.create(card_type, deck_item[:name])
|
72
72
|
card_types << clone
|
73
|
-
if clone.
|
74
|
-
|
75
|
-
|
76
|
-
clone.contents[0].text =~ /enters the battlefield tapped\./
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
73
|
+
if clone.is_land?
|
74
|
+
if clone.name =~ /.*Pathway$/
|
75
|
+
card = PathwayCard.new(clone)
|
76
|
+
elsif clone.contents[0].text =~ /enters the battlefield tapped\./
|
77
|
+
card = TapLandCard.new(clone)
|
78
|
+
elsif clone.contents[0].text =~ /enters the battlefield tapped unless you control two or more other lands./
|
79
|
+
card = SlowLandCard.new(clone)
|
80
|
+
elsif clone.set_code == 'SNC' and
|
81
|
+
clone.contents[0].text =~ /enters the battlefield, sacrifice it/
|
82
|
+
card = SncFetchLandCard.new(clone)
|
83
|
+
card.configure
|
84
|
+
elsif clone.type[0] =~ /^Basic Land — .*$/
|
85
|
+
card = BasicLandCard.new(clone)
|
86
|
+
else
|
87
|
+
card = Card.new(clone)
|
88
|
+
end
|
81
89
|
else
|
82
90
|
card = Card.new(clone)
|
83
91
|
end
|
data/lib/manasimu/game.rb
CHANGED
@@ -1,48 +1,56 @@
|
|
1
1
|
class Game
|
2
2
|
attr_accessor :hands, :plays, :deck
|
3
3
|
|
4
|
-
def initialize(deck)
|
5
|
-
|
4
|
+
def initialize(deck, shuffle = true, debugg = false)
|
5
|
+
if shuffle
|
6
|
+
@deck = deck.shuffle(random: Random.new)
|
7
|
+
else
|
8
|
+
@deck = deck
|
9
|
+
end
|
6
10
|
@deck.each { |card| card.reset }
|
7
11
|
@hands = []
|
8
12
|
@plays = []
|
9
13
|
@planner = Planner.new
|
14
|
+
@debugg = debugg
|
10
15
|
7.times { draw(0) }
|
11
16
|
end
|
12
17
|
|
13
18
|
def step(turn)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
+
if @debugg
|
20
|
+
puts "turn #{turn}"
|
21
|
+
puts "played"
|
22
|
+
@plays.each do |card| puts " #{card}" end
|
23
|
+
puts "hands"
|
24
|
+
@hands.each do |card| puts " #{card}" end
|
25
|
+
end
|
19
26
|
|
20
|
-
upkeep(turn)
|
21
27
|
draw(turn)
|
28
|
+
play_cards = plan;
|
29
|
+
@hands.each { |card| card.step_in_hands(turn) }
|
22
30
|
plan.each do |card|
|
23
31
|
play(card, turn)
|
24
32
|
end
|
25
|
-
|
26
|
-
|
27
|
-
def upkeep(turn)
|
28
|
-
@hands.each { |card| card.step(turn) }
|
29
|
-
@plays.each { |card| card.step(turn) }
|
33
|
+
@plays.each { |card| card.step_in_plays(turn) }
|
30
34
|
end
|
31
35
|
|
32
36
|
def draw(turn)
|
33
37
|
card = @deck.pop
|
34
|
-
|
38
|
+
if @debugg
|
39
|
+
puts "draw #{card}"
|
40
|
+
end
|
35
41
|
card.drawed(turn)
|
36
42
|
@hands << card
|
37
43
|
end
|
38
44
|
|
39
45
|
def plan
|
40
|
-
@planner.plan(@hands, @plays)
|
46
|
+
@planner.plan(@hands, @plays, @deck)
|
41
47
|
end
|
42
48
|
|
43
49
|
def play(card, turn)
|
44
|
-
|
45
|
-
|
50
|
+
if @debugg
|
51
|
+
puts "play #{card}"
|
52
|
+
end
|
53
|
+
card.resolve(nil, @hands, @plays, @deck)
|
46
54
|
card.played(turn, nil)
|
47
55
|
@plays << card
|
48
56
|
@hands.delete card
|
data/lib/manasimu/mana_type.rb
CHANGED
@@ -1,7 +1,55 @@
|
|
1
1
|
class ManaType
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
attr_accessor :color, :land_type
|
3
|
+
|
4
|
+
def initialize(color, land_type)
|
5
|
+
@land_type = land_type
|
6
|
+
@color = color
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.all
|
10
|
+
r ||= Red.new
|
11
|
+
u ||= Blue.new
|
12
|
+
g ||= Green.new
|
13
|
+
w ||= White.new
|
14
|
+
b ||= Black.new
|
15
|
+
@@all ||= [r, u, g, w, b]
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.search_text_by_land_type(text)
|
19
|
+
self.all.select do |mana_type|
|
20
|
+
text.include? mana_type.land_type
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.search_text_by_color(text)
|
25
|
+
self.all.select do |mana_type|
|
26
|
+
text.include? mana_type.color
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class Red < ManaType
|
31
|
+
def initialize
|
32
|
+
super("R", "Mountain")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
class Blue < ManaType
|
36
|
+
def initialize
|
37
|
+
super("U", "Island")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
class Green < ManaType
|
41
|
+
def initialize
|
42
|
+
super("G", "Forest")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
class White < ManaType
|
46
|
+
def initialize
|
47
|
+
super("W", "Plains")
|
48
|
+
end
|
49
|
+
end
|
50
|
+
class Black < ManaType
|
51
|
+
def initialize
|
52
|
+
super("B", "Swamp")
|
53
|
+
end
|
54
|
+
end
|
7
55
|
end
|
data/lib/manasimu/planner.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Planner
|
2
2
|
|
3
|
-
def plan(hands, fields)
|
3
|
+
def plan(hands, fields, deck)
|
4
4
|
lands_in_hand = lands(hands)
|
5
5
|
|
6
6
|
max_price = 0
|
@@ -14,11 +14,12 @@ class Planner
|
|
14
14
|
# dup
|
15
15
|
current_hands = hands.dup
|
16
16
|
current_fields = fields.dup
|
17
|
+
current_deck = deck.dup
|
17
18
|
|
18
19
|
# play the land
|
19
20
|
current_hands.delete play_land
|
20
21
|
current_fields << play_land
|
21
|
-
play_land.resolve(nil, current_hands, current_fields)
|
22
|
+
play_land.resolve(nil, current_hands, current_fields, current_deck)
|
22
23
|
|
23
24
|
# search_opt_spells
|
24
25
|
price, spells, symbols, lands =
|
@@ -68,7 +69,7 @@ class Planner
|
|
68
69
|
end
|
69
70
|
|
70
71
|
lands.sort! do |a, b|
|
71
|
-
b.
|
72
|
+
b.mana_source_size <=> a.mana_source_size
|
72
73
|
end
|
73
74
|
|
74
75
|
price = 0
|
data/lib/manasimu/simulator.rb
CHANGED
@@ -6,7 +6,7 @@ class Simulator
|
|
6
6
|
|
7
7
|
def run
|
8
8
|
@config.simulations.times do
|
9
|
-
game = Game.new(@config.deck)
|
9
|
+
game = Game.new(@config.deck, true, @config.debugg)
|
10
10
|
@config.turns.times do |i|
|
11
11
|
turn = i + 1
|
12
12
|
game.step turn
|
@@ -16,5 +16,8 @@ class Simulator
|
|
16
16
|
end
|
17
17
|
|
18
18
|
class SimulatorConfig
|
19
|
-
attr_accessor :simulations, :turns, :deck
|
19
|
+
attr_accessor :simulations, :turns, :deck, :debugg
|
20
|
+
def initialize
|
21
|
+
@debugg = false
|
22
|
+
end
|
20
23
|
end
|
data/lib/manasimu.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler.require
|
3
3
|
|
4
|
+
require_relative './manasimu/mana_type.rb'
|
4
5
|
require_relative './manasimu/card.rb'
|
6
|
+
require_relative './manasimu/card/basicland.rb'
|
5
7
|
require_relative './manasimu/card/pathway.rb'
|
6
8
|
require_relative './manasimu/card/tapland.rb'
|
7
9
|
require_relative './manasimu/card/slowland.rb'
|
10
|
+
require_relative './manasimu/card/snc_fetchland.rb'
|
8
11
|
require_relative './manasimu/planner.rb'
|
9
12
|
require_relative './manasimu/game.rb'
|
10
13
|
require_relative './manasimu/simulator.rb'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: manasimu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- so1itaryrove
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: mtg arrena mana curve simulator
|
14
14
|
email: so1itaryrove@gmail.com
|
@@ -20,8 +20,10 @@ files:
|
|
20
20
|
- ext/ford_fulkerson.so
|
21
21
|
- lib/manasimu.rb
|
22
22
|
- lib/manasimu/card.rb
|
23
|
+
- lib/manasimu/card/basicland.rb
|
23
24
|
- lib/manasimu/card/pathway.rb
|
24
25
|
- lib/manasimu/card/slowland.rb
|
26
|
+
- lib/manasimu/card/snc_fetchland.rb
|
25
27
|
- lib/manasimu/card/tapland.rb
|
26
28
|
- lib/manasimu/data.rb
|
27
29
|
- lib/manasimu/game.rb
|