update
This commit is contained in:
1 parent
1d563b9eec
commit
04fe9716e8
22 files changed
+764
-151
No files matched your search
+40
-2
@@ -30,9 +30,14 @@ static func element_deck(element: String) -> Array:
|
||||
## je Kosten so viele wie CURVE vorgibt, zufällig gewählt. Was über dem Deckel fehlt, füllen die
|
||||
## erlaubten Kosten reihum von billig nach teuer auf.
|
||||
static func curve_deck(element: String, r: RandomNumberGenerator, max_cost: int = 10) -> Array:
|
||||
return curve_pick(Cards.all().filter(func(c): return c.elements[0] == element), r, max_cost)
|
||||
|
||||
|
||||
## Wählt aus cards (Karten) nach der Manakurve bis max_cost, siehe curve_deck; liefert IDs.
|
||||
static func curve_pick(cards: Array, r: RandomNumberGenerator, max_cost: int) -> Array:
|
||||
var by_cost := {}
|
||||
for c in Cards.all():
|
||||
if c.elements[0] == element and c.cost <= max_cost:
|
||||
for c in cards:
|
||||
if c.cost <= max_cost:
|
||||
if not by_cost.has(c.cost):
|
||||
by_cost[c.cost] = []
|
||||
by_cost[c.cost].append(c.id)
|
||||
@@ -56,6 +61,39 @@ static func curve_deck(element: String, r: RandomNumberGenerator, max_cost: int
|
||||
return out
|
||||
|
||||
|
||||
## Stapel mit Effektkarten (Kapitel 6 bis 10): wie curve_deck, aber jede Karte trägt keyword_count
|
||||
## Eigenschaften. Zur Wahl stehen alle Grundkarten des Elements mit jeder Eigenschaftskombination,
|
||||
## deren Kosten (Cards.cost_with) unter max_cost bleiben; die gewählten werden registriert (IDs g_…).
|
||||
static func effect_deck(element: String, r: RandomNumberGenerator, max_cost: int, keyword_count: int) -> Array:
|
||||
var pool := {}
|
||||
for b in Cards.all():
|
||||
if b.elements[0] != element:
|
||||
continue
|
||||
for combo in combos(Array(Cards.KEYWORDS), keyword_count):
|
||||
var kws := Cards.KEYWORDS.filter(func(k): return k in combo)
|
||||
var short := "".join(kws.map(func(k): return k.substr(0, 1)))
|
||||
var c := Cards.custom("g_%s_%s" % [b.id, short], b.name, b.elements, b.attack, b.health, kws)
|
||||
c.name_en = b.name_en
|
||||
pool[c.id] = c
|
||||
var out := curve_pick(pool.values(), r, max_cost)
|
||||
for id in out:
|
||||
Cards.register(pool[id])
|
||||
return out
|
||||
|
||||
|
||||
## Alle Teilmengen von items mit k Einträgen, in der Reihenfolge von items.
|
||||
static func combos(items: Array, k: int) -> Array:
|
||||
if k == 0:
|
||||
return [[]]
|
||||
var out := []
|
||||
for i in items.size():
|
||||
for rest in combos(items.slice(i + 1), k - 1):
|
||||
var combo := [items[i]]
|
||||
combo.append_array(rest)
|
||||
out.append(combo)
|
||||
return out
|
||||
|
||||
|
||||
## Füllt deck aus pool (Karten-IDs) bis limit auf, die wertvollsten zuerst (Card.value in der Stufe
|
||||
## aus levels: ID -> Stufe); bei gleichem Wert zuerst, was der Manakurve (CURVE, auf limit
|
||||
## skaliert) noch fehlt, dann die billigeren, dann nach ID; nichts doppelt.
|
||||
|
||||
Reference in new issue
Block a user