manasimu 0.0.11 → 0.0.14

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