manasimu 0.0.16 → 0.0.19

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