manasimu 0.0.10 → 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- 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
|