manasimu 0.0.16 → 0.0.19

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: 3343e9db3fa8daa5303ccd50b555a5d5d25bd961d20c5392a8d526e8a78f425e
4
- data.tar.gz: ddc59e45c459dfcd2cebb65d8104d0d25ac91a04bcb6ab387c0cd8bf285da24e
3
+ metadata.gz: e68620e31c2457a6e73a328d618a708432713016a79118e175f0c77c47c456b9
4
+ data.tar.gz: 9851897aa3c43335cb97327814a51a6bf2621b27efc2d276b48550c10e8136bf
5
5
  SHA512:
6
- metadata.gz: 67d7fb4abda302154d59c4de1e756c32c6b762a0d80c5fd7ce4c16fd6e3190509684796f8ee5a0c466066b1e32eba3f443366624909a2e0a2994ce4ceec9d65a
7
- data.tar.gz: 2a8c4ec688061b5d55ae4c2d8c2832089975c55b9993b08edd1d795292e9312fba52a54232cf861291d55ccbb06c5da075217a9462d6feafeda62b998adcd959
6
+ metadata.gz: 0ec616b06ad9394bf1554bc9788c0de48d7fc18aa903426b9aff8bf2383facf61f5f5e2c6c0e52ef3c99c10cf38a73925d46554650c23d2efec3ac2173fed2f8
7
+ data.tar.gz: 0e6fe28bef43f07c087eb10819a72e73bc2723f5d9d5d805b7f111ae31e3d56474cae958b347f51224152884a0040ecd2ad67c43b2e84764f94cc3a445ae25b4
@@ -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,55 +1,8 @@
1
- class SncFetchLandCard < TapLandCard
2
-
3
- def resolve(side, hands, plays, deck)
4
- super(side, hands, plays, deck)
5
- return @fetch_source if @fetch_source
6
- @tapped = true
7
- if deck
8
- @fetches = deck
9
- .select { |card| card.instance_of? BasicLandCard }
10
- .select { |card| @mana_source.include? card.mana_source[0] }
11
- .uniq { |card| card.card_type }
12
- @deck = deck
13
- @fetch_source = @fetches.map { |card| card.mana_source }.flatten.uniq
14
- else
15
- @fetches = []
16
- @fetch_source = []
17
- end
18
- end
19
-
20
- def first_produce_symbol=(color)
21
- super(color)
22
- basic_land = @fetches.select {|card| @mana_source.include? color}.first
23
- if @deck and basic_land
24
- @deck.delete basic_land
25
- @deck.shuffle!
26
- @fetch_source = [color]
27
- @fetches = [basic_land]
28
- else
29
- []
30
- end
31
- @fetched = true
32
- end
33
-
34
- def mana_source
35
- raise Exception.new('you should resolve first') if not @fetch_source
36
- @fetch_source
37
- end
1
+ class SncFetchLandCard < FetchLandCard
38
2
 
39
3
  def configure
40
4
  mana_types = ManaType.search_text_by_land_type(card_type.text)
41
- @mana_source = mana_types.map {|mana_type| mana_type.color}.flatten.uniq
42
- @fetched = false
5
+ super.mana_source = mana_types.map {|mana_type| mana_type.color}.flatten.uniq
43
6
  self
44
7
  end
45
-
46
- def reset
47
- super
48
- @fetched = false
49
- @fetch_source = nil
50
- end
51
-
52
- def mana_produced?
53
- @fetched
54
- end
55
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.downcase!
76
+ distinct_types << type
77
+ end
78
+
79
+ ret = []
80
+ lines.each do |line|
81
+ line.chomp!.downcase!
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
@@ -17,7 +17,8 @@ class Game
17
17
 
18
18
  def step(turn)
19
19
  if @debugg
20
- puts "turn #{turn}"
20
+ puts "---------------------------------"
21
+ puts "turn #{turn} basic_lands #{@deck.select {|c| c.instance_of? BasicLandCard}.length}"
21
22
  puts "played"
22
23
  @plays.each do |card| puts " #{card}" end
23
24
  puts "hands"
@@ -25,11 +26,12 @@ class Game
25
26
  end
26
27
 
27
28
  draw(turn)
28
- play_cards = plan;
29
+ play_cards, deck = plan;
29
30
  @hands.each { |card| card.step_in_hands(turn) }
30
- plan.each do |card|
31
+ play_cards.each do |card|
31
32
  play(card, turn)
32
33
  end
34
+ deck = deck if deck
33
35
  @plays.each { |card| card.step_in_plays(turn) }
34
36
  end
35
37
 
@@ -50,6 +52,7 @@ class Game
50
52
  if @debugg
51
53
  puts "play #{card}"
52
54
  end
55
+
53
56
  card.resolve(nil, @hands, @plays, @deck)
54
57
  card.played(turn, nil)
55
58
  @plays << card
@@ -43,15 +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
- if not land.mana_produced?
49
+ if not land.mana_produced? and max_symbols[i]
49
50
  land.first_produce_symbol = max_symbols[i]
51
+ deck = land.deck if land.respond_to? :deck
50
52
  end
51
53
  end
52
54
  end
53
55
 
54
- [max_land, max_spells].select {|a| a}.flatten
56
+ [[max_land, max_spells].select {|a| a}.flatten, deck]
55
57
  end
56
58
 
57
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.16
4
+ version: 0.0.19
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