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 +4 -4
- data/lib/manasimu/card/fetchland.rb +64 -0
- data/lib/manasimu/card/snc_fetchland.rb +2 -58
- data/lib/manasimu/card/tapland.rb +5 -0
- data/lib/manasimu/card.rb +5 -0
- data/lib/manasimu/data.rb +59 -5
- data/lib/manasimu/game.rb +4 -5
- data/lib/manasimu/planner.rb +3 -2
- data/lib/manasimu.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ead70cf44b9c7bd386907206ab1fab0ee1244c29ee56ec089aacc65e2d1a2ff4
|
4
|
+
data.tar.gz: b1b4d822665d6d5771281a14563bd5d3209e6bf74e53341d1af6783e80f1ef2f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 <
|
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
|
-
|
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
data/lib/manasimu/data.rb
CHANGED
@@ -60,16 +60,67 @@ class Deck
|
|
60
60
|
result
|
61
61
|
end
|
62
62
|
|
63
|
-
def self.
|
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
|
-
|
119
|
+
clone_card_types = []
|
69
120
|
deck_items.each do |deck_item|
|
70
|
-
card_type =
|
121
|
+
card_type = card_types.find(deck_item[:set], deck_item[:setnum])
|
71
122
|
clone = CardType.create(card_type, deck_item[:name])
|
72
|
-
|
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,
|
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}
|
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
|
-
|
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
|
data/lib/manasimu/planner.rb
CHANGED
@@ -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.
|
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-
|
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
|