manasimu 0.0.10 → 0.0.13
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/lib/manasimu/card/slowland.rb +29 -0
- data/lib/manasimu/card/tapland.rb +18 -0
- data/lib/manasimu/card.rb +50 -13
- data/lib/manasimu/data.rb +6 -0
- data/lib/manasimu/game.rb +3 -1
- data/lib/manasimu/planner.rb +8 -1
- data/lib/manasimu.rb +2 -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: 15aafb1d5f12798204ce6bc38d36acbc1ab98937f7ff4f25ee43eb46bfde71e9
|
4
|
+
data.tar.gz: cd22e5a0e1773ae2a1d2ebdfde87665a187c57fde927cf22ef950e4888a9568b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c74b8a9b11f5fb2194b2338923e5b2a765f1f9e60110397ecbdd82d2f34aba61f5b8b1024ba94bdd4b3ffef66a961d179dcc458e1736bec8865aafd3cb320c86
|
7
|
+
data.tar.gz: 8015c756b8f118a6df781c50239f5364efd63f026611a84621bf50f83d1fe248a0c6c2f4bce56a0f1fea58909c8f97afec3164ee75e3c99c4d1379cee1171f8f
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class SlowLandCard < Card
|
2
|
+
|
3
|
+
def resolve(side, hands, plays)
|
4
|
+
num = 0
|
5
|
+
for card in plays do
|
6
|
+
next if card == self
|
7
|
+
num += 1 if card.is_land?
|
8
|
+
break if num >= 2
|
9
|
+
end
|
10
|
+
|
11
|
+
if num == 2
|
12
|
+
@tapped = false
|
13
|
+
else
|
14
|
+
@tapped = true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def step(turn)
|
19
|
+
@tapped = false
|
20
|
+
end
|
21
|
+
|
22
|
+
def tapped?
|
23
|
+
@tapped
|
24
|
+
end
|
25
|
+
|
26
|
+
def reset
|
27
|
+
@tapped = false
|
28
|
+
end
|
29
|
+
end
|
data/lib/manasimu/card.rb
CHANGED
@@ -3,9 +3,12 @@ class Card
|
|
3
3
|
|
4
4
|
def initialize(card_type)
|
5
5
|
@card_type = card_type
|
6
|
+
@playable = false
|
6
7
|
end
|
7
8
|
|
8
9
|
def step(turn)
|
10
|
+
@card_type.step(turn - 1, self)
|
11
|
+
@can_play = false
|
9
12
|
end
|
10
13
|
|
11
14
|
def drawed(turn)
|
@@ -19,6 +22,9 @@ class Card
|
|
19
22
|
@card_type.played(turn)
|
20
23
|
end
|
21
24
|
|
25
|
+
def resolve(side = "a", hands, plays)
|
26
|
+
end
|
27
|
+
|
22
28
|
def played?
|
23
29
|
@played.nil?
|
24
30
|
end
|
@@ -32,7 +38,13 @@ class Card
|
|
32
38
|
end
|
33
39
|
|
34
40
|
def playable?(lands, capas)
|
35
|
-
@card_type.playable?(lands, capas)
|
41
|
+
ret = @card_type.playable?(lands, capas)
|
42
|
+
@can_play = true if ret and ret[0]
|
43
|
+
ret
|
44
|
+
end
|
45
|
+
|
46
|
+
def can_play?
|
47
|
+
@can_play
|
36
48
|
end
|
37
49
|
|
38
50
|
def types
|
@@ -65,6 +77,11 @@ class Card
|
|
65
77
|
|
66
78
|
def reset
|
67
79
|
@side = nil
|
80
|
+
@tapped = nil
|
81
|
+
end
|
82
|
+
|
83
|
+
def is_land?
|
84
|
+
@card_type.is_land? @side
|
68
85
|
end
|
69
86
|
|
70
87
|
def max_flow(lands, capas)
|
@@ -88,19 +105,23 @@ class Card
|
|
88
105
|
end
|
89
106
|
|
90
107
|
class CardType
|
91
|
-
attr_accessor :contents, :played, :drawed, :name
|
108
|
+
attr_accessor :contents, :played, :drawed, :name, :can_plays
|
92
109
|
|
93
110
|
def self.create(card_type, name)
|
94
111
|
ret = card_type.dup
|
95
112
|
ret.contents = card_type.contents
|
96
|
-
ret.played =
|
97
|
-
ret.drawed =
|
113
|
+
ret.played = {}
|
114
|
+
ret.drawed = {}
|
115
|
+
ret.can_plays = {}
|
98
116
|
ret.name = name
|
99
117
|
ret
|
100
118
|
end
|
101
119
|
|
102
120
|
def initialize(contents)
|
103
121
|
return if not contents
|
122
|
+
@played = {}
|
123
|
+
@drawed = {}
|
124
|
+
@can_plays = {}
|
104
125
|
@contents = contents.map {|c| Content.new(c)}
|
105
126
|
end
|
106
127
|
|
@@ -108,14 +129,19 @@ class CardType
|
|
108
129
|
@name ||= @contents[0].name
|
109
130
|
end
|
110
131
|
|
132
|
+
def step(turn, card)
|
133
|
+
if turn >= 0 and card.can_play?
|
134
|
+
@can_plays[turn] ||= 0
|
135
|
+
@can_plays[turn] += 1
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
111
139
|
def played(turn)
|
112
|
-
@played ||= {}
|
113
140
|
@played[turn] ||= 0
|
114
141
|
@played[turn] += 1
|
115
142
|
end
|
116
143
|
|
117
144
|
def drawed(turn)
|
118
|
-
@drawed ||= {}
|
119
145
|
@drawed[turn] ||= 0
|
120
146
|
@drawed[turn] += 1
|
121
147
|
end
|
@@ -189,6 +215,19 @@ class CardType
|
|
189
215
|
converted_mana_cost
|
190
216
|
end
|
191
217
|
|
218
|
+
def is_land?(side = nil)
|
219
|
+
arr = if side == 'a'
|
220
|
+
[0]
|
221
|
+
elsif side == 'b'
|
222
|
+
[1]
|
223
|
+
else
|
224
|
+
[0,1]
|
225
|
+
end
|
226
|
+
arr.select do |i|
|
227
|
+
@contents[i] and @contents[i].types == "Land"
|
228
|
+
end.length > 0
|
229
|
+
end
|
230
|
+
|
192
231
|
def playable?(lands, capas)
|
193
232
|
return [false, [], []] if lands.empty?
|
194
233
|
return [false, [], []] if converted_mana_cost > lands.length
|
@@ -266,15 +305,13 @@ class CardType
|
|
266
305
|
|
267
306
|
def count(turn = nil)
|
268
307
|
turn ||= converted_mana_cost
|
269
|
-
played = @played
|
308
|
+
played = @played [turn] || 0
|
270
309
|
drawed = 0
|
271
|
-
|
272
|
-
|
273
|
-
next if not @drawed[i]
|
274
|
-
drawed += @drawed[i]
|
275
|
-
end
|
310
|
+
(turn+1).times do |i|
|
311
|
+
drawed += @drawed[i] || 0
|
276
312
|
end
|
277
|
-
[
|
313
|
+
can_played = @can_plays[turn] || 0
|
314
|
+
[played, drawed, can_played]
|
278
315
|
end
|
279
316
|
|
280
317
|
def to_s
|
data/lib/manasimu/data.rb
CHANGED
@@ -72,6 +72,12 @@ class Deck
|
|
72
72
|
card_types << clone
|
73
73
|
if clone.name =~ /.*Pathway$/ and clone.mana_source?
|
74
74
|
card = PathwayCard.new(clone)
|
75
|
+
elsif clone.is_land? and
|
76
|
+
clone.contents[0].text =~ /enters the battlefield tapped\./
|
77
|
+
card = TapLandCard.new(clone)
|
78
|
+
elsif clone.is_land? and
|
79
|
+
clone.contents[0].text =~ /enters the battlefield tapped unless you control two or more other lands./
|
80
|
+
card = SlowLandCard.new(clone)
|
75
81
|
else
|
76
82
|
card = Card.new(clone)
|
77
83
|
end
|
data/lib/manasimu/game.rb
CHANGED
@@ -25,6 +25,7 @@ class Game
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def upkeep(turn)
|
28
|
+
@hands.each { |card| card.step(turn) }
|
28
29
|
@plays.each { |card| card.step(turn) }
|
29
30
|
end
|
30
31
|
|
@@ -41,7 +42,8 @@ class Game
|
|
41
42
|
|
42
43
|
def play(card, turn)
|
43
44
|
# puts "play #{card}"
|
44
|
-
card.
|
45
|
+
card.resolve(nil, @hands, @plays)
|
46
|
+
card.played(turn, nil)
|
45
47
|
@plays << card
|
46
48
|
@hands.delete card
|
47
49
|
end
|
data/lib/manasimu/planner.rb
CHANGED
@@ -18,6 +18,7 @@ class Planner
|
|
18
18
|
# play the land
|
19
19
|
current_hands.delete play_land
|
20
20
|
current_fields << play_land
|
21
|
+
play_land.resolve(nil, current_hands, current_fields)
|
21
22
|
|
22
23
|
# search_opt_spells
|
23
24
|
price, spells, symbols, lands =
|
@@ -29,6 +30,8 @@ class Planner
|
|
29
30
|
max_symbols = symbols
|
30
31
|
max_lands = lands
|
31
32
|
end
|
33
|
+
|
34
|
+
play_land.reset
|
32
35
|
end
|
33
36
|
else
|
34
37
|
# search_opt_spells
|
@@ -86,7 +89,11 @@ class Planner
|
|
86
89
|
spell = spells[index]
|
87
90
|
used_lands = bit_lands.to_s(2).chars
|
88
91
|
capas = lands.length.times.to_a.map do |i|
|
89
|
-
used_lands[i] == "1"
|
92
|
+
if used_lands[i] == "1"
|
93
|
+
"0"
|
94
|
+
else
|
95
|
+
lands[i].tapped? ? "0" : "1"
|
96
|
+
end
|
90
97
|
end
|
91
98
|
|
92
99
|
# shrink
|
data/lib/manasimu.rb
CHANGED
@@ -3,6 +3,8 @@ Bundler.require
|
|
3
3
|
|
4
4
|
require_relative './manasimu/card.rb'
|
5
5
|
require_relative './manasimu/card/pathway.rb'
|
6
|
+
require_relative './manasimu/card/tapland.rb'
|
7
|
+
require_relative './manasimu/card/slowland.rb'
|
6
8
|
require_relative './manasimu/planner.rb'
|
7
9
|
require_relative './manasimu/game.rb'
|
8
10
|
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.13
|
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-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: mtg arrena mana curve simulator
|
14
14
|
email: so1itaryrove@gmail.com
|
@@ -21,6 +21,8 @@ files:
|
|
21
21
|
- lib/manasimu.rb
|
22
22
|
- lib/manasimu/card.rb
|
23
23
|
- lib/manasimu/card/pathway.rb
|
24
|
+
- lib/manasimu/card/slowland.rb
|
25
|
+
- lib/manasimu/card/tapland.rb
|
24
26
|
- lib/manasimu/data.rb
|
25
27
|
- lib/manasimu/game.rb
|
26
28
|
- lib/manasimu/hello.rb
|