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 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