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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8f369c20d49bd696fd184cd0874385b5072f3b66b4371a8a1698e6a6dd9cc2ff
4
- data.tar.gz: 34b0f4b9bacb5cfa05b6e549a06576c0f07d1f904b79a8d36c8cd55e4a763c8c
3
+ metadata.gz: edeb30bfc6e2c9a608856f5806fd5b34b8ab9cd6930462cd0dae8e219de08194
4
+ data.tar.gz: dc7eaa4a60ea42b6a842ccc13df0a4831ba4d805c0f12b2ecfa5d7969aed5304
5
5
  SHA512:
6
- metadata.gz: f84f7ede021935431da0b01f3554e77473f56146ca67bdd6036c1e7401c704ade04414cc404ebdf5fb214e2238613ae6112cb38cc2eeeb27c1846b147f21598f
7
- data.tar.gz: f9db31ef0e7aebbc74e7bcd389bf64a04c076d2b9e5fab389785e5abbf5665e91c546b9c34fce28f97f936e2b15785422d8c13c2513dee27d2c6773eae726452
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 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
@@ -6,11 +6,15 @@ class Card
6
6
  @playable = false
7
7
  end
8
8
 
9
- def step(turn)
10
- @card_type.step(turn - 1, self)
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
- @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)
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 step(turn, card)
125
- if turn >= 0 and card.can_play?
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
- played = @played [turn] || 0
288
- drawed = 0
331
+ played_count = @played[turn] || 0
332
+ drawed_count = 0
289
333
  (turn+1).times do |i|
290
- drawed += @drawed[i] || 0
334
+ drawed_count += @drawed[i] || 0
291
335
  end
292
- can_played = @can_plays[turn] || 0
293
- [played, drawed, can_played]
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.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
@@ -1,8 +1,12 @@
1
1
  class Game
2
2
  attr_accessor :hands, :plays, :deck
3
3
 
4
- def initialize(deck)
5
- @deck = deck.shuffle(random: Random.new)
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
- end
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.played(turn)
46
+ card.resolve(nil, @hands, @plays)
47
+ card.played(turn, nil)
46
48
  @plays << card
47
49
  @hands.delete card
48
50
  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.12
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-14 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