manasimu 0.0.12 → 0.0.15
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 +32 -0
- data/lib/manasimu/card/tapland.rb +9 -3
- data/lib/manasimu/card.rb +56 -11
- data/lib/manasimu/data.rb +4 -1
- data/lib/manasimu/game.rb +11 -9
- data/lib/manasimu/planner.rb +3 -0
- data/lib/manasimu.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edeb30bfc6e2c9a608856f5806fd5b34b8ab9cd6930462cd0dae8e219de08194
|
4
|
+
data.tar.gz: dc7eaa4a60ea42b6a842ccc13df0a4831ba4d805c0f12b2ecfa5d7969aed5304
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1647c593a3f49a13ecf430ff9aaf8df1d7286c74e73b179fc04b2badd05b72c2be9ee5ac44d8c2e1cb32d8ae8b7e6458c54e26b57f5b11f2fcf9e8b33f5486cf
|
7
|
+
data.tar.gz: a2398b09125d7b7fa8538e4068a48f3dceb3d0262b4b9e1a9ebdc174ff2f1cb4f236965f66329f55d6f2b23cc85abbb5f707529daa1b68097c1ed07094d9c8ec
|
@@ -0,0 +1,32 @@
|
|
1
|
+
class SlowLandCard < Card
|
2
|
+
|
3
|
+
def resolve(side, hands, plays)
|
4
|
+
super(side, hands, plays)
|
5
|
+
num = 0
|
6
|
+
for card in plays do
|
7
|
+
next if card == self
|
8
|
+
num += 1 if card.is_land?
|
9
|
+
break if num >= 2
|
10
|
+
end
|
11
|
+
|
12
|
+
if num == 2
|
13
|
+
@tapped = false
|
14
|
+
else
|
15
|
+
@tapped = true
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def step_in_plays(turn)
|
20
|
+
super(turn)
|
21
|
+
@tapped = false
|
22
|
+
end
|
23
|
+
|
24
|
+
def tapped?
|
25
|
+
@tapped
|
26
|
+
end
|
27
|
+
|
28
|
+
def reset
|
29
|
+
super
|
30
|
+
@tapped = false
|
31
|
+
end
|
32
|
+
end
|
@@ -4,12 +4,18 @@ class TapLandCard < Card
|
|
4
4
|
@tapped
|
5
5
|
end
|
6
6
|
|
7
|
-
def
|
8
|
-
super(
|
7
|
+
def resolve(side, hands, plays)
|
8
|
+
super(side, hands, plays)
|
9
9
|
@tapped = true
|
10
10
|
end
|
11
11
|
|
12
|
-
def
|
12
|
+
def step_in_plays(turn)
|
13
|
+
super(turn)
|
14
|
+
@tapped = false
|
15
|
+
end
|
16
|
+
|
17
|
+
def reset
|
18
|
+
super
|
13
19
|
@tapped = false
|
14
20
|
end
|
15
21
|
end
|
data/lib/manasimu/card.rb
CHANGED
@@ -6,11 +6,15 @@ class Card
|
|
6
6
|
@playable = false
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
10
|
-
@card_type.
|
9
|
+
def step_in_hands(turn)
|
10
|
+
@card_type.step_in_hands(turn, self)
|
11
11
|
@can_play = false
|
12
12
|
end
|
13
13
|
|
14
|
+
def step_in_plays(turn)
|
15
|
+
@card_type.step_in_plays(turn, self)
|
16
|
+
end
|
17
|
+
|
14
18
|
def drawed(turn)
|
15
19
|
@drawed = turn
|
16
20
|
@card_type.drawed(turn)
|
@@ -19,7 +23,12 @@ class Card
|
|
19
23
|
def played(turn, side = "a")
|
20
24
|
@played = turn
|
21
25
|
@side = side
|
22
|
-
|
26
|
+
if not is_land? or not tapped?
|
27
|
+
@card_type.played(turn)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def resolve(side = "a", hands, plays)
|
23
32
|
end
|
24
33
|
|
25
34
|
def played?
|
@@ -74,6 +83,13 @@ class Card
|
|
74
83
|
|
75
84
|
def reset
|
76
85
|
@side = nil
|
86
|
+
@played = nil
|
87
|
+
@drawed = nil
|
88
|
+
@can_play = false
|
89
|
+
end
|
90
|
+
|
91
|
+
def is_land?
|
92
|
+
@card_type.is_land? @side
|
77
93
|
end
|
78
94
|
|
79
95
|
def max_flow(lands, capas)
|
@@ -97,7 +113,7 @@ class Card
|
|
97
113
|
end
|
98
114
|
|
99
115
|
class CardType
|
100
|
-
attr_accessor :contents, :played, :drawed, :name, :can_plays
|
116
|
+
attr_accessor :contents, :played, :drawed, :name, :can_plays, :mana_sources
|
101
117
|
|
102
118
|
def self.create(card_type, name)
|
103
119
|
ret = card_type.dup
|
@@ -105,6 +121,7 @@ class CardType
|
|
105
121
|
ret.played = {}
|
106
122
|
ret.drawed = {}
|
107
123
|
ret.can_plays = {}
|
124
|
+
ret.mana_sources = {}
|
108
125
|
ret.name = name
|
109
126
|
ret
|
110
127
|
end
|
@@ -114,6 +131,7 @@ class CardType
|
|
114
131
|
@played = {}
|
115
132
|
@drawed = {}
|
116
133
|
@can_plays = {}
|
134
|
+
@mana_sources = {}
|
117
135
|
@contents = contents.map {|c| Content.new(c)}
|
118
136
|
end
|
119
137
|
|
@@ -121,13 +139,24 @@ class CardType
|
|
121
139
|
@name ||= @contents[0].name
|
122
140
|
end
|
123
141
|
|
124
|
-
def
|
125
|
-
if
|
142
|
+
def step_in_hands(turn, card)
|
143
|
+
if card.can_play?
|
126
144
|
@can_plays[turn] ||= 0
|
127
145
|
@can_plays[turn] += 1
|
128
146
|
end
|
129
147
|
end
|
130
148
|
|
149
|
+
def step_in_plays(turn, card)
|
150
|
+
if card.mana_source? and not card.tapped?
|
151
|
+
@mana_sources[turn] ||= {}
|
152
|
+
size = card.color_identity.length
|
153
|
+
card.color_identity.each do |c|
|
154
|
+
@mana_sources[turn][c] ||= 0
|
155
|
+
@mana_sources[turn][c] += 1.0 / size
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
131
160
|
def played(turn)
|
132
161
|
@played[turn] ||= 0
|
133
162
|
@played[turn] += 1
|
@@ -207,6 +236,21 @@ class CardType
|
|
207
236
|
converted_mana_cost
|
208
237
|
end
|
209
238
|
|
239
|
+
def is_land?(side = nil)
|
240
|
+
return @is_land if @is_land
|
241
|
+
arr = if side == 'a'
|
242
|
+
[0]
|
243
|
+
elsif side == 'b'
|
244
|
+
[1]
|
245
|
+
else
|
246
|
+
[0,1]
|
247
|
+
end
|
248
|
+
@is_land = arr.select do |i|
|
249
|
+
@contents[i] and @contents[i].types == "Land"
|
250
|
+
end.length > 0
|
251
|
+
return @is_land
|
252
|
+
end
|
253
|
+
|
210
254
|
def playable?(lands, capas)
|
211
255
|
return [false, [], []] if lands.empty?
|
212
256
|
return [false, [], []] if converted_mana_cost > lands.length
|
@@ -284,13 +328,14 @@ class CardType
|
|
284
328
|
|
285
329
|
def count(turn = nil)
|
286
330
|
turn ||= converted_mana_cost
|
287
|
-
|
288
|
-
|
331
|
+
played_count = @played[turn] || 0
|
332
|
+
drawed_count = 0
|
289
333
|
(turn+1).times do |i|
|
290
|
-
|
334
|
+
drawed_count += @drawed[i] || 0
|
291
335
|
end
|
292
|
-
|
293
|
-
[
|
336
|
+
can_played_count = @can_plays[turn] || 0
|
337
|
+
mana_sources_count = @mana_sources[turn] || {}
|
338
|
+
[played_count, drawed_count, can_played_count, mana_sources_count]
|
294
339
|
end
|
295
340
|
|
296
341
|
def to_s
|
data/lib/manasimu/data.rb
CHANGED
@@ -72,9 +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.
|
75
|
+
elsif clone.is_land? and
|
76
76
|
clone.contents[0].text =~ /enters the battlefield tapped\./
|
77
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)
|
78
81
|
else
|
79
82
|
card = Card.new(clone)
|
80
83
|
end
|
data/lib/manasimu/game.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
class Game
|
2
2
|
attr_accessor :hands, :plays, :deck
|
3
3
|
|
4
|
-
def initialize(deck)
|
5
|
-
|
4
|
+
def initialize(deck, shuffle = true)
|
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 = []
|
@@ -17,16 +21,13 @@ class Game
|
|
17
21
|
# puts "hands"
|
18
22
|
# @hands.each do |card| puts " #{card}" end
|
19
23
|
|
20
|
-
upkeep(turn)
|
21
24
|
draw(turn)
|
25
|
+
play_cards = plan;
|
26
|
+
@hands.each { |card| card.step_in_hands(turn) }
|
22
27
|
plan.each do |card|
|
23
28
|
play(card, turn)
|
24
29
|
end
|
25
|
-
|
26
|
-
|
27
|
-
def upkeep(turn)
|
28
|
-
@hands.each { |card| card.step(turn) }
|
29
|
-
@plays.each { |card| card.step(turn) }
|
30
|
+
@plays.each { |card| card.step_in_plays(turn) }
|
30
31
|
end
|
31
32
|
|
32
33
|
def draw(turn)
|
@@ -42,7 +43,8 @@ class Game
|
|
42
43
|
|
43
44
|
def play(card, turn)
|
44
45
|
# puts "play #{card}"
|
45
|
-
card.
|
46
|
+
card.resolve(nil, @hands, @plays)
|
47
|
+
card.played(turn, nil)
|
46
48
|
@plays << card
|
47
49
|
@hands.delete card
|
48
50
|
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
|
data/lib/manasimu.rb
CHANGED
@@ -4,6 +4,7 @@ Bundler.require
|
|
4
4
|
require_relative './manasimu/card.rb'
|
5
5
|
require_relative './manasimu/card/pathway.rb'
|
6
6
|
require_relative './manasimu/card/tapland.rb'
|
7
|
+
require_relative './manasimu/card/slowland.rb'
|
7
8
|
require_relative './manasimu/planner.rb'
|
8
9
|
require_relative './manasimu/game.rb'
|
9
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.15
|
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-15 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,7 @@ 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
|
24
25
|
- lib/manasimu/card/tapland.rb
|
25
26
|
- lib/manasimu/data.rb
|
26
27
|
- lib/manasimu/game.rb
|