manasimu 0.0.11 → 0.0.14

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e48490540b44b4b6e5574e638551eef466e85dff9f7abfb1f806a4461ac8a4a7
4
- data.tar.gz: d8bd63ac73e90df88c290bf5d15a259f8c9c063f7f1e67e18ff4b1e83fb6c063
3
+ metadata.gz: 3c73ee6bfefc5a1611b3170d86b8dc27dbf75c58f2dc3f2be7d570679cedfab3
4
+ data.tar.gz: f771ef43cafe46bcc75eed2c0964c42e39f32d7c1ab92a0e09e1a5b6ad6b4845
5
5
  SHA512:
6
- metadata.gz: 4bafe617888514c1d65f22d65bba9891fd8472f51dfa9536265038db1bcfb82bd2be2bb366492e3e390b5a694350136505f8a348049cc6939424c0ff01a2dc35
7
- data.tar.gz: 4a60486a722fb000e3c087ed1b76f3614624faae2c7db122d9805c04539edea11f7d1a22bf6a7fb99e48a21b240ffd8f005b486d0c58a2cd68978772b6a06081
6
+ metadata.gz: c1e61d71e665d98b74a8cfa52d877e2131be56484fdee9d78d85b1e072d5ffa5172444b7c0683c30c94e113f9876048b31d4bbb4af528fac08296d2650bb6ce1
7
+ data.tar.gz: 5a6ea06c33e3227a1f4f74be5a6d4266069090ecda660e29ad7c9b717891367d4764943726f2a0cd32632fafd6e58e505526c6809ed0da87e67b3b133382dd7d
@@ -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 drawed(turn)
8
- super(turn)
7
+ def resolve(side, hands, plays)
8
+ super(side, hands, plays)
9
9
  @tapped = true
10
10
  end
11
11
 
12
- def step(turn)
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
@@ -3,9 +3,16 @@ 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
- def step(turn)
9
+ def step_in_hands(turn)
10
+ @card_type.step_in_hands(turn - 1, self)
11
+ @can_play = false
12
+ end
13
+
14
+ def step_in_plays(turn)
15
+ @card_type.step_in_plays(turn - 1, self)
9
16
  end
10
17
 
11
18
  def drawed(turn)
@@ -16,7 +23,12 @@ class Card
16
23
  def played(turn, side = "a")
17
24
  @played = turn
18
25
  @side = side
19
- @card_type.played(turn)
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)
20
32
  end
21
33
 
22
34
  def played?
@@ -32,7 +44,13 @@ class Card
32
44
  end
33
45
 
34
46
  def playable?(lands, capas)
35
- @card_type.playable?(lands, capas)
47
+ ret = @card_type.playable?(lands, capas)
48
+ @can_play = true if ret and ret[0]
49
+ ret
50
+ end
51
+
52
+ def can_play?
53
+ @can_play
36
54
  end
37
55
 
38
56
  def types
@@ -65,6 +83,13 @@ class Card
65
83
 
66
84
  def reset
67
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
68
93
  end
69
94
 
70
95
  def max_flow(lands, capas)
@@ -88,19 +113,25 @@ class Card
88
113
  end
89
114
 
90
115
  class CardType
91
- attr_accessor :contents, :played, :drawed, :name
116
+ attr_accessor :contents, :played, :drawed, :name, :can_plays, :mana_sources
92
117
 
93
118
  def self.create(card_type, name)
94
119
  ret = card_type.dup
95
120
  ret.contents = card_type.contents
96
- ret.played = nil
97
- ret.drawed = nil
121
+ ret.played = {}
122
+ ret.drawed = {}
123
+ ret.can_plays = {}
124
+ ret.mana_sources = {}
98
125
  ret.name = name
99
126
  ret
100
127
  end
101
128
 
102
129
  def initialize(contents)
103
130
  return if not contents
131
+ @played = {}
132
+ @drawed = {}
133
+ @can_plays = {}
134
+ @mana_sources = {}
104
135
  @contents = contents.map {|c| Content.new(c)}
105
136
  end
106
137
 
@@ -108,14 +139,30 @@ class CardType
108
139
  @name ||= @contents[0].name
109
140
  end
110
141
 
142
+ def step_in_hands(turn, card)
143
+ if turn >= 0 and card.can_play?
144
+ @can_plays[turn] ||= 0
145
+ @can_plays[turn] += 1
146
+ end
147
+ end
148
+
149
+ def step_in_plays(turn, card)
150
+ if turn >= 0 and 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
+
111
160
  def played(turn)
112
- @played ||= {}
113
161
  @played[turn] ||= 0
114
162
  @played[turn] += 1
115
163
  end
116
164
 
117
165
  def drawed(turn)
118
- @drawed ||= {}
119
166
  @drawed[turn] ||= 0
120
167
  @drawed[turn] += 1
121
168
  end
@@ -189,6 +236,21 @@ class CardType
189
236
  converted_mana_cost
190
237
  end
191
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
+
192
254
  def playable?(lands, capas)
193
255
  return [false, [], []] if lands.empty?
194
256
  return [false, [], []] if converted_mana_cost > lands.length
@@ -266,15 +328,14 @@ class CardType
266
328
 
267
329
  def count(turn = nil)
268
330
  turn ||= converted_mana_cost
269
- played = @played ? @played [turn] : 0
331
+ played = @played [turn] || 0
270
332
  drawed = 0
271
- if (@drawed)
272
- (turn+1).times do |i|
273
- next if not @drawed[i]
274
- drawed += @drawed[i]
275
- end
333
+ (turn+1).times do |i|
334
+ drawed += @drawed[i] || 0
276
335
  end
277
- [played, drawed]
336
+ can_played = @can_plays[turn] || 0
337
+ mana_sources = @mana_sources[turn] || {}
338
+ [played, drawed, can_played, mana_sources]
278
339
  end
279
340
 
280
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.types[0] == "Land" and
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
@@ -25,7 +25,8 @@ class Game
25
25
  end
26
26
 
27
27
  def upkeep(turn)
28
- @plays.each { |card| card.step(turn) }
28
+ @hands.each { |card| card.step_in_hands(turn) }
29
+ @plays.each { |card| card.step_in_plays(turn) }
29
30
  end
30
31
 
31
32
  def draw(turn)
@@ -41,7 +42,8 @@ class Game
41
42
 
42
43
  def play(card, turn)
43
44
  # puts "play #{card}"
44
- card.played(turn)
45
+ card.resolve(nil, @hands, @plays)
46
+ card.played(turn, nil)
45
47
  @plays << card
46
48
  @hands.delete card
47
49
  end
@@ -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.11
4
+ version: 0.0.14
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-12 00:00:00.000000000 Z
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