manasimu 0.0.17 → 0.0.20

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: cd8f2deebb97ccdfec7d84f59caf31ca2548c5d2152d03f171acef1718619035
4
- data.tar.gz: 1422e049b960adb6f9365921c20426a61a5c384ecb87435b1ca4ed284b156025
3
+ metadata.gz: ead70cf44b9c7bd386907206ab1fab0ee1244c29ee56ec089aacc65e2d1a2ff4
4
+ data.tar.gz: b1b4d822665d6d5771281a14563bd5d3209e6bf74e53341d1af6783e80f1ef2f
5
5
  SHA512:
6
- metadata.gz: 60cb513f51880b6150fac14f1caef1e86775bcd04da5c55406e3d439d4d0e770606ab4254f599b1dccbad0a27cdc7fdd728db3deeae346b9fbf7d15fb9c5ff26
7
- data.tar.gz: c95fcc75ff9f576d42791ac69997500de7cff984360f81d146def3555f80df084549a9ca97d64564e5d6b34b69c21e9a76adee29904330943ca75dce0c917b59
6
+ metadata.gz: 61b6fe6d432f0e3c51c8c88e78bee779c087c6206eb87f9154e2505bb84c9d80dcc3cee702f59c9657ef1a43f1436cc35239b8346216e3575dae62350f4f45c3
7
+ data.tar.gz: 72bec994df49cd1b4891b10088656407324cf63fc0dd1cf3321a33ef5ef150815bdacd30bdc051bf890f4adff1032f81c18d8e5da54fdd156788aac07b70b438
@@ -0,0 +1,64 @@
1
+ class FetchLandCard < TapLandCard
2
+ attr_accessor :deck
3
+
4
+ # enter the battlefield
5
+ def resolve(side, hands, plays, deck)
6
+ super(side, hands, plays, deck)
7
+ return @fetch_source if @fetch_source
8
+ if deck
9
+ @fetches = deck
10
+ .select { |card| card.instance_of? BasicLandCard }
11
+ .select { |card| @mana_source.include? card.mana_source[0] }
12
+ .uniq { |card| card.card_type }
13
+ @deck = deck
14
+ @fetch_source = @fetches.map { |card| card.mana_source }.flatten.uniq
15
+ else
16
+ @fetches = []
17
+ @fetch_source = []
18
+ end
19
+ end
20
+
21
+ def first_produce_symbol=(color)
22
+ super(color)
23
+ basic_land = @deck
24
+ .select { |card| card.instance_of? BasicLandCard }
25
+ .select { |card| color.to_i.to_s == color || card.mana_source.include?(color) }
26
+ .first
27
+ if basic_land
28
+ @fetched = color
29
+ @deck.delete basic_land
30
+ @deck.shuffle!
31
+ @fetch_source = basic_land.mana_source
32
+ @fetches = [basic_land]
33
+ else
34
+ raise Exception.new('basic land is empty')
35
+ end
36
+ @deck
37
+ end
38
+
39
+ def mana_source
40
+ raise Exception.new('you should resolve first') if not @fetch_source
41
+ @fetch_source
42
+ end
43
+
44
+ def mana_source=(m)
45
+ @mana_source = m
46
+ end
47
+
48
+ def configure
49
+ mana_types = ManaType.all
50
+ @mana_source = mana_types.map {|mana_type| mana_type.color}.flatten.uniq
51
+ @fetched = nil
52
+ self
53
+ end
54
+
55
+ def reset
56
+ super
57
+ @fetched = nil
58
+ @fetch_source = nil
59
+ end
60
+
61
+ def mana_produced?
62
+ not @fetched.nil?
63
+ end
64
+ end
@@ -1,64 +1,8 @@
1
- class SncFetchLandCard < TapLandCard
2
-
3
- attr_accessor :deck
4
-
5
- def resolve(side, hands, plays, deck)
6
- super(side, hands, plays, deck)
7
- return @fetch_source if @fetch_source
8
- @tapped = true
9
- if deck
10
- @fetches = deck
11
- .select { |card| card.instance_of? BasicLandCard }
12
- .select { |card| @mana_source.include? card.mana_source[0] }
13
- .uniq { |card| card.card_type }
14
- @deck = deck
15
- @fetch_source = @fetches.map { |card| card.mana_source }.flatten.uniq
16
- else
17
- @fetches = []
18
- @fetch_source = []
19
- end
20
- end
21
-
22
- def first_produce_symbol=(color)
23
- super(color)
24
- if @deck
25
- basic_land = @deck
26
- .select { |card| card.instance_of? BasicLandCard }
27
- .select { |card| color.to_i.to_s == color || card.mana_source.include?(color) }
28
- .first
29
- if basic_land
30
- @deck.delete basic_land
31
- @deck.shuffle!
32
- @fetch_source = [color]
33
- @fetches = [basic_land]
34
- else
35
- raise Exception.new('basic land is empty')
36
- end
37
- else
38
- []
39
- end
40
- @fetched = true
41
- end
42
-
43
- def mana_source
44
- raise Exception.new('you should resolve first') if not @fetch_source
45
- @fetch_source
46
- end
1
+ class SncFetchLandCard < FetchLandCard
47
2
 
48
3
  def configure
49
4
  mana_types = ManaType.search_text_by_land_type(card_type.text)
50
- @mana_source = mana_types.map {|mana_type| mana_type.color}.flatten.uniq
51
- @fetched = false
5
+ super.mana_source = mana_types.map {|mana_type| mana_type.color}.flatten.uniq
52
6
  self
53
7
  end
54
-
55
- def reset
56
- super
57
- @fetched = false
58
- @fetch_source = nil
59
- end
60
-
61
- def mana_produced?
62
- @fetched
63
- end
64
8
  end
@@ -4,6 +4,7 @@ class TapLandCard < Card
4
4
  @tapped
5
5
  end
6
6
 
7
+ # when enter the battlefield
7
8
  def resolve(side, hands, plays, deck)
8
9
  super(side, hands, plays, deck)
9
10
  @tapped = true
@@ -14,6 +15,10 @@ class TapLandCard < Card
14
15
  @tapped = false
15
16
  end
16
17
 
18
+ def tappend=(tapped)
19
+ @tapped = tapped
20
+ end
21
+
17
22
  def reset
18
23
  super
19
24
  @tapped = false
data/lib/manasimu/card.rb CHANGED
@@ -404,6 +404,11 @@ class CardTypeAggregate
404
404
  end
405
405
  end
406
406
 
407
+ def map
408
+ @memo.map do |item|
409
+ yield item
410
+ end
411
+ end
407
412
  end
408
413
 
409
414
  class Content
data/lib/manasimu/data.rb CHANGED
@@ -60,16 +60,67 @@ class Deck
60
60
  result
61
61
  end
62
62
 
63
- def self.get_card_details(deck_items)
63
+ def self.card_types
64
64
  path = File.expand_path( '../../../db/card_type_aggregate', __FILE__ )
65
65
  @@card_types ||= Marshal.load(File.open(path, 'r'))
66
+ end
67
+
68
+ def self.find_card_types(lines)
69
+ types = card_types.map do |a| a end
70
+ types.sort! do |a,b| a.name <=> b.name end
71
+
72
+ distinct_types = []
73
+ types.each do |type|
74
+ next if distinct_types[-1] and distinct_types[-1].name == type.name
75
+ type.name
76
+ distinct_types << type
77
+ end
78
+
79
+ ret = []
80
+ lines.each do |line|
81
+ line.chomp!
82
+ search_type = distinct_types.bsearch do |type|
83
+ name = type.name
84
+ flag = true
85
+ name.chars.each_with_index do |nc,i|
86
+ if line.length > i
87
+ lc = line.chars[i]
88
+ if nc > lc
89
+ flag = true
90
+ break
91
+ elsif nc < lc
92
+ flag = false
93
+ break
94
+ else
95
+ # continue
96
+ end
97
+ else
98
+ flag = true
99
+ break
100
+ end
101
+ end
102
+ flag
103
+ end
104
+ if search_type
105
+ a = search_type.name
106
+ if line =~ /^#{a}.*$/ and a != 'x'
107
+ ret << search_type
108
+ end
109
+ end
110
+ end
111
+
112
+ ret.sort! do |a,b| a.mana_cost <=> b.mana_cost end
113
+ ret.uniq!
114
+ end
115
+
116
+ def self.get_card_details(deck_items)
66
117
  cards = []
67
118
  card_id = 0
68
- card_types = []
119
+ clone_card_types = []
69
120
  deck_items.each do |deck_item|
70
- card_type = @@card_types.find(deck_item[:set], deck_item[:setnum])
121
+ card_type = card_types.find(deck_item[:set], deck_item[:setnum])
71
122
  clone = CardType.create(card_type, deck_item[:name])
72
- card_types << clone
123
+ clone_card_types << clone
73
124
  if clone.is_land?
74
125
  if clone.name =~ /.*Pathway$/
75
126
  card = PathwayCard.new(clone)
@@ -77,6 +128,9 @@ class Deck
77
128
  card = TapLandCard.new(clone)
78
129
  elsif clone.contents[0].text =~ /enters the battlefield tapped unless you control two or more other lands./
79
130
  card = SlowLandCard.new(clone)
131
+ elsif clone.text =~ /earch your library for a basic land card, put it onto the battlefield tapped, then shuffle/
132
+ card = FetchLandCard.new(clone)
133
+ card.configure
80
134
  elsif clone.set_code == 'SNC' and
81
135
  clone.contents[0].text =~ /enters the battlefield, sacrifice it/
82
136
  card = SncFetchLandCard.new(clone)
@@ -96,6 +150,6 @@ class Deck
96
150
  cards << card_clone
97
151
  end
98
152
  end
99
- [cards, card_types]
153
+ [cards, clone_card_types]
100
154
  end
101
155
  end
data/lib/manasimu/game.rb CHANGED
@@ -18,7 +18,7 @@ class Game
18
18
  def step(turn)
19
19
  if @debugg
20
20
  puts "---------------------------------"
21
- puts "turn #{turn} deck #{@deck.length}"
21
+ puts "turn #{turn} basic_lands #{@deck.select {|c| c.instance_of? BasicLandCard}.length}"
22
22
  puts "played"
23
23
  @plays.each do |card| puts " #{card}" end
24
24
  puts "hands"
@@ -26,11 +26,12 @@ class Game
26
26
  end
27
27
 
28
28
  draw(turn)
29
- play_cards = plan;
29
+ play_cards, deck = plan;
30
30
  @hands.each { |card| card.step_in_hands(turn) }
31
- plan.each do |card|
31
+ play_cards.each do |card|
32
32
  play(card, turn)
33
33
  end
34
+ deck = deck if deck
34
35
  @plays.each { |card| card.step_in_plays(turn) }
35
36
  end
36
37
 
@@ -53,8 +54,6 @@ class Game
53
54
  end
54
55
 
55
56
  card.resolve(nil, @hands, @plays, @deck)
56
- @deck = card.deck if card.respond_to? :deck
57
-
58
57
  card.played(turn, nil)
59
58
  @plays << card
60
59
  @hands.delete card
@@ -43,16 +43,17 @@ class Planner
43
43
  max_land = lands_in_hand[0]
44
44
  end
45
45
 
46
+ deck = nil
46
47
  if max_lands
47
48
  max_lands.each_with_index do |land, i|
48
49
  if not land.mana_produced? and max_symbols[i]
49
- debugger if max_symbols[i].nil?
50
50
  land.first_produce_symbol = max_symbols[i]
51
+ deck = land.deck if land.respond_to? :deck
51
52
  end
52
53
  end
53
54
  end
54
55
 
55
- [max_land, max_spells].select {|a| a}.flatten
56
+ [[max_land, max_spells].select {|a| a}.flatten, deck]
56
57
  end
57
58
 
58
59
  #
data/lib/manasimu.rb CHANGED
@@ -7,6 +7,7 @@ require_relative './manasimu/card/basicland.rb'
7
7
  require_relative './manasimu/card/pathway.rb'
8
8
  require_relative './manasimu/card/tapland.rb'
9
9
  require_relative './manasimu/card/slowland.rb'
10
+ require_relative './manasimu/card/fetchland.rb'
10
11
  require_relative './manasimu/card/snc_fetchland.rb'
11
12
  require_relative './manasimu/planner.rb'
12
13
  require_relative './manasimu/game.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.17
4
+ version: 0.0.20
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-22 00:00:00.000000000 Z
11
+ date: 2022-05-28 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/basicland.rb
24
+ - lib/manasimu/card/fetchland.rb
24
25
  - lib/manasimu/card/pathway.rb
25
26
  - lib/manasimu/card/slowland.rb
26
27
  - lib/manasimu/card/snc_fetchland.rb