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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1c9780641a85a3afd2f3a9e7387681fb2c44535bed300ac32cf3d0afcc0976b
4
- data.tar.gz: 72e18bf8bc9780cfcb765cf13dafee515354728f83c43ccc55e227b97604091f
3
+ metadata.gz: 15aafb1d5f12798204ce6bc38d36acbc1ab98937f7ff4f25ee43eb46bfde71e9
4
+ data.tar.gz: cd22e5a0e1773ae2a1d2ebdfde87665a187c57fde927cf22ef950e4888a9568b
5
5
  SHA512:
6
- metadata.gz: e27d758046b0876d82ef849ceb2422ca19e92cbd4b7fc7b30b53d681f2bd1f2f556bea8f5e296500b03e04b71e621511bb3fcf0c4bf9f05b482824824a381c6c
7
- data.tar.gz: c3b225079817f3e77c0fe1014d5077373be5265fa4f04fcec189e89b6338a4953615973657d08b928e47309bb3368e8c83e075012a3fa36d74662a01decfd9d1
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
@@ -0,0 +1,18 @@
1
+ class TapLandCard < Card
2
+
3
+ def tapped?
4
+ @tapped
5
+ end
6
+
7
+ def resolve(side, hands, plays)
8
+ @tapped = true
9
+ end
10
+
11
+ def step(turn)
12
+ @tapped = false
13
+ end
14
+
15
+ def reset
16
+ @tapped = false
17
+ end
18
+ 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 = nil
97
- ret.drawed = nil
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 ? @played [turn] : 0
308
+ played = @played [turn] || 0
270
309
  drawed = 0
271
- if (@drawed)
272
- (turn+1).times do |i|
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
- [played, drawed]
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.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
@@ -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" ? "0" : "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.10
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 00:00:00.000000000 Z
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