From 16c562ed1d0b9a1a28bb83dc5b80603a27415c61 Mon Sep 17 00:00:00 2001 From: Thomas Date: Sat, 11 Jul 2026 09:20:06 +0200 Subject: [PATCH] Tourismustal: iPad-Test-Feedback Runde 1 - Bikepark: echtes 2x2-Footprint (canPlace/place/demolish/upgrade/Report ankerbasiert, buildingRef auf Teilflaechen), Sprite ohne Schatten neu generiert, zentriert gross gezeichnet. Baukriterium gelockert: Bahn-Naehe ersetzt die Zonen-Regel (wie Hotel im Bahn-Umkreis). - Zeit halbiert: 1 Tag = 4 s bei 1x (Absturz-Rate entsprechend angepasst). - Problem-Sprechblasen alle ~3 min am Gebaeude (Personal gesucht / kein Schnee), erster Hinweis nach 15-35 s. - Heli: sichtbares Abheben/Landen am Pad (aus vorigem Commit) bleibt. - Test-Harnesse (model-test, strategien) wandern in App/sims/tourismustal/tests. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../tourismustal/assets/sprites/bikepark.png | Bin 33484 -> 50648 bytes App/sims/tourismustal/js/data.js | 4 +- App/sims/tourismustal/js/iso.js | 41 ++++++- App/sims/tourismustal/js/main.js | 2 +- App/sims/tourismustal/js/model.js | 68 ++++++++--- App/sims/tourismustal/tests/model-test.mjs | 76 +++++++++++++ App/sims/tourismustal/tests/strategien.mjs | 107 ++++++++++++++++++ 7 files changed, 276 insertions(+), 22 deletions(-) create mode 100644 App/sims/tourismustal/tests/model-test.mjs create mode 100644 App/sims/tourismustal/tests/strategien.mjs diff --git a/App/sims/tourismustal/assets/sprites/bikepark.png b/App/sims/tourismustal/assets/sprites/bikepark.png index 8f6c7b5306cf6b7f2854e5e2449abc0cc6cc4feb..02c9a0b83307478376cdd7e3561ea1e12e1b965e 100644 GIT binary patch literal 50648 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�kN^Pc!jO=w1>BXHEHAjlkw>zYL^FsK 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%0DtnsmaxnX^PeLVa>dqOxG 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 literal 33484 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%0D^YTXuJf8nLSGH}kgr0hfY(Cl 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 Yi$Po??)*;a)qlSs`%Ou*R@^Y?e{6d39RL6T diff --git a/App/sims/tourismustal/js/data.js b/App/sims/tourismustal/js/data.js index 56b6732..c4ad69b 100644 --- a/App/sims/tourismustal/js/data.js +++ b/App/sims/tourismustal/js/data.js @@ -60,8 +60,8 @@ export const BUILDINGS = { }, bikepark: { name: 'Bikepark', emoji: '🚵', cost: 10000, upkeep: 80, - zone: 'mid', staff: 2, summerCap: 160, trailLen: 5, - desc: 'Flowtrails am Hang: bis 160 Sommergäste. Braucht eine Bahn in der Nähe (max. 4 Felder), die die Bikes hinaufbringt.', + zone: 'mid', staff: 2, summerCap: 160, trailLen: 5, size: 2, + desc: 'Großes Basis-Areal (2×2 Felder) mit Flowtrails: bis 160 Sommergäste. Braucht eine Bahn in der Nähe (max. 4 Felder), die die Bikes hinaufbringt.', }, ropes: { name: 'Hochseilgarten', emoji: '🧗', cost: 6500, upkeep: 45, diff --git a/App/sims/tourismustal/js/iso.js b/App/sims/tourismustal/js/iso.js index 6187a55..d47b214 100644 --- a/App/sims/tourismustal/js/iso.js +++ b/App/sims/tourismustal/js/iso.js @@ -35,7 +35,7 @@ const SPRITE_DEFS = { access: { w: 52, bottom: 8 }, rescue: { w: 60, bottom: 9 }, snow: { w: 44, bottom: 7 }, - bikepark: { w: 58, bottom: 8 }, + bikepark: { w: 108, bottom: 14 }, // 2×2-Areal, zentriert gezeichnet ropes: { w: 58, bottom: 8 }, bikerental: { w: 50, bottom: 8 }, platform: { w: 62, bottom: 9 }, @@ -629,7 +629,8 @@ export class IsoRenderer { const incident = this.heli || this.guests.some(g => g.mode === 'crashed'); if (!incident) { for (const g of this.guests) { - if (g.mode === 'ski' && Math.random() < 0.02 * dt) { + // (0.01: Tage sind seit der Zeit-Halbierung doppelt so lang) + if (g.mode === 'ski' && Math.random() < 0.01 * dt) { g.mode = 'crashed'; g.crashAt = this.simTime; g.route = []; g.nextLift = null; g.moving = false; this._say(g, '\u{1F198}', 9e8); // 🆘 bleibt sichtbar @@ -783,6 +784,32 @@ export class IsoRenderer { ctx.lineWidth = 1; } + // Problem-Sprechblasen: Gebäude mit akutem Problem melden sich alle ~3 + // Minuten (Echtzeit) mit einer aufsteigenden Blase – z. B. „Personal + // gesucht!" – damit man Ursachen auch ohne Klick ins Gebäude sieht. + _problemBubbles() { + const s = this.state; + const now = this.time; + if (!this._probNext) this._probNext = {}; + const staffGap = s.staffNeeded > s.staffAvailable; + for (const b of s.buildings) { + const def = BUILDINGS[b.type]; + let msg = null; + if (staffGap && (def.staff || 0) > 0) msg = '👷 Personal gesucht!'; + else if ((b.type === 'lift' || b.type === 'gondola') + && s.season === 'Winter' && !liftSkiable(s, b.alt ?? 3)) msg = '❄️ Kein Schnee!'; + const k = `${b.c},${b.r}`; + if (!msg) { delete this._probNext[k]; continue; } + if (!this._probNext[k]) { + // erster Hinweis nach 15–35 s, danach im 3-Minuten-Takt + this._probNext[k] = now + 15000 + Math.random() * 20000; + } else if (now >= this._probNext[k]) { + this._probNext[k] = now + 180000; + this.addFloat(msg, '#c0392b', b.c + 0.5, b.r - 0.4, true); + } + } + } + // Sichtbarer Umbau: ~10 s Bauzeit (Spielzeit), danach wird die neue Stufe // scharf geschaltet. Läuft fĂźr ALLE Baustellen (auch außerhalb des Bildes). CONSTRUCT_MS = 10000; @@ -894,6 +921,7 @@ export class IsoRenderer { this._drawBus(); this._drawFestivals(winter); this._drawStaffAlerts(); + this._problemBubbles(); this._drawConstruction(); this._drawRiders(); this._drawStaff(); @@ -1084,7 +1112,8 @@ export class IsoRenderer { this._drawTree(x, y, snowy, tile.tint); } if (tile.deco) this._drawDeco(tile.deco, x, y); - if (tile.building) this._drawBuilding(tile.building, x, y, tile); + // Große Gebäude (2×2) zeichnet nur die Anker-Kachel – zentriert Ăźbers Areal + if (tile.building && !tile.buildingRef) this._drawBuilding(tile.building, x, y, tile); // Noch nicht erschlossene Hochlagen liegen unter Nebel if (tile.r < this.state.stageRow) { @@ -1635,6 +1664,12 @@ export class IsoRenderer { _drawBuilding(type, x, y, tile) { const ctx = this.ctx; const level = tile.level || 1; + // 2×2-Gebäude: zentriert Ăźber dem Areal zeichnen (Anker = links oben) + if ((BUILDINGS[type]?.size || 1) > 1) { + const half = (BUILDINGS[type].size - 1) / 2; + const ctr = this.tileToWorld(tile.c + half, tile.r + half, tile.elev); + x = ctr.x; y = ctr.y; + } // KI-Sprites fĂźr Gebäude (Bahnen & Rodelbahn bleiben Vektor: dynamisch) const spriteName = type === 'hotel' && level >= 2 ? 'hotel2' : type; const spriteScale = type === 'hotel' diff --git a/App/sims/tourismustal/js/main.js b/App/sims/tourismustal/js/main.js index 5cd2dad..dd23881 100644 --- a/App/sims/tourismustal/js/main.js +++ b/App/sims/tourismustal/js/main.js @@ -11,7 +11,7 @@ import { player } from './player.js'; window.__ttLoaded = true; // Signal an den file://-Fallback in index.html -const MS_PER_DAY = 2000; // 1 Tag = 2 s bei Geschwindigkeit 1× – ruhiges Tempo +const MS_PER_DAY = 4000; // 1 Tag = 4 s bei 1× – ruhiges Tempo (halbiert 2026-07-11) // Ereignis-Pacing: Schonfrist zum Ankommen + Mindestabstand zwischen // Ereignis-/Entscheidungskarten, damit am Anfang nicht mehrere Karten im diff --git a/App/sims/tourismustal/js/model.js b/App/sims/tourismustal/js/model.js index b42e8d0..f18b1bb 100644 --- a/App/sims/tourismustal/js/model.js +++ b/App/sims/tourismustal/js/model.js @@ -248,20 +248,31 @@ export function canPlace(state, type, c, r) { const def = BUILDINGS[type]; const tile = state.map[r]?.[c]; if (!def || !tile) return { ok: false, reason: 'Außerhalb der Karte.' }; - if (!inCore(c, r)) return { ok: false, reason: 'Hier ist unwegsames Hochgebirge – im Tal bauen.' }; if (!state.unlocked.has(type)) return { ok: false, reason: 'Noch nicht freigeschaltet.' }; - if (tile.building) return { ok: false, reason: 'Hier steht schon ein Gebäude.' }; - if (tile.terrain === 'rock') return { ok: false, reason: 'Auf Fels kann nicht gebaut werden.' }; - if (tile.terrain === 'water') return { ok: false, reason: 'Im Fluss kann nicht gebaut werden.' }; - if (tile.terrain === 'village') return { ok: false, reason: 'Hier steht das alte Dorf.' }; - if (tile.road) return { ok: false, reason: 'Auf der Straße kann nicht gebaut werden.' }; - if (r < state.stageRow) return { ok: false, reason: 'Die Hochlagen sind noch nicht erschlossen.' }; if (state.money < def.cost) return { ok: false, reason: 'Nicht genug Geld.' }; + // Footprint prĂźfen: 1×1 Standard, große Gebäude (size 2 = 2×2) brauchen + // jede Teilfläche frei. Anker ist die Kachel links oben (c, r). + const size = def.size || 1; + for (let dr = 0; dr < size; dr++) { + for (let dc = 0; dc < size; dc++) { + const t = state.map[r + dr]?.[c + dc]; + const platz = size > 1 ? ` (${def.name} braucht ${size}×${size} freie Felder)` : ''; + if (!t) return { ok: false, reason: 'Außerhalb der Karte.' + platz }; + if (!inCore(c + dc, r + dr)) return { ok: false, reason: 'Hier ist unwegsames Hochgebirge – im Tal bauen.' + platz }; + if (t.building) return { ok: false, reason: 'Hier steht schon ein Gebäude.' + platz }; + if (t.terrain === 'rock') return { ok: false, reason: 'Auf Fels kann nicht gebaut werden.' + platz }; + if (t.terrain === 'water') return { ok: false, reason: 'Im Fluss kann nicht gebaut werden.' + platz }; + if (t.terrain === 'village') return { ok: false, reason: 'Hier steht das alte Dorf.' + platz }; + if (t.road) return { ok: false, reason: 'Auf der Straße kann nicht gebaut werden.' + platz }; + if (r + dr < state.stageRow) return { ok: false, reason: 'Die Hochlagen sind noch nicht erschlossen.' }; + } + } if (def.zone !== 'any') { const [lo, hi] = ZONE_RANGE[def.zone]; // Lift/Gondel wirken wie eine eigene Basis: in ihrem Umkreis (4 Felder) - // darf auch am Gebirge alles gebaut werden (außer Bus & Bad). - const nearLift = ['lift', 'gondola', 'restaurant', 'hotel', 'staffhouse'].includes(type) + // darf auch am Gebirge alles gebaut werden (außer Bus & Bad). Der + // Bikepark hängt ohnehin an der Bahn – Bahn-Nähe ersetzt die Zonen-Regel. + const nearLift = ['lift', 'gondola', 'restaurant', 'hotel', 'staffhouse', 'bikepark'].includes(type) && state.buildings.some(b => (b.type === 'lift' || b.type === 'gondola') && dist(b, { c, r }) <= 4); if (!nearLift && (tile.elev < lo || tile.elev > hi)) { @@ -296,11 +307,21 @@ export function place(state, type, c, r) { const def = BUILDINGS[type]; const tile = state.map[r][c]; const wasForest = tile.terrain === 'forest'; - tile.building = type; - state.buildings.push({ type, c, r, alt: tile.elev }); + const size = def.size || 1; + state.buildings.push({ type, c, r, alt: tile.elev, size }); state.money -= def.cost; - // Bauen kostet Naturwert – Rodung von Wald deutlich mehr - state.nature = Math.max(15, state.nature - (wasForest ? 5 : 2)); + // Alle Teilflächen belegen; Nicht-Anker-Kacheln zeigen auf den Anker + // (buildingRef), damit Klick/Abriss Ăźberall auf dem Areal funktioniert. + for (let dr = 0; dr < size; dr++) { + for (let dc = 0; dc < size; dc++) { + const t = state.map[r + dr]?.[c + dc]; + if (!t) continue; + t.building = type; + if (dr || dc) t.buildingRef = { c, r }; + // Bauen kostet Naturwert – Rodung von Wald deutlich mehr + state.nature = Math.max(15, state.nature - (t.terrain === 'forest' ? 5 : 2)); + } + } if (def.pisteLen) { // Piste entsteht hangaufwärts Ăźber der Talstation (Lift & Gondel) @@ -328,9 +349,12 @@ export function place(state, type, c, r) { } export function demolish(state, c, r) { - const tile = state.map[r][c]; + let tile = state.map[r][c]; if (!tile.building) return { ok: false, reason: 'Hier steht kein Gebäude.' }; + // Klick auf eine Teilfläche eines großen Gebäudes → auf den Anker umlenken + if (tile.buildingRef) { ({ c, r } = tile.buildingRef); tile = state.map[r][c]; } const def = BUILDINGS[tile.building]; + const size = def.size || 1; const refund = Math.round(def.cost * 0.3); state.money += refund; state.nature = Math.min(100, state.nature + 1); @@ -338,8 +362,15 @@ export function demolish(state, c, r) { state.pistes = state.pistes.filter(p => !(p.owner.c === c && p.owner.r === r)); state.trails = state.trails.filter(t => !(t.owner.c === c && t.owner.r === r)); const name = def.name; - tile.building = null; - tile.level = null; + for (let dr = 0; dr < size; dr++) { + for (let dc = 0; dc < size; dc++) { + const t = state.map[r + dr]?.[c + dc]; + if (!t) continue; + t.building = null; + t.level = null; + delete t.buildingRef; + } + } return { ok: true, refund, name }; } @@ -380,6 +411,9 @@ export function seasonFactor(type, season) { // Voller Bericht zu EINEM Gebäude: Werte, Auslastung, Tageskosten, Nutzen. // Grundlage der Inspektions-/Ausbaukarte (Lernprogramm: alles sichtbar). export function buildingReport(state, c, r) { + // Teilfläche eines großen Gebäudes → Anker + const ref = state.map[r]?.[c]?.buildingRef; + if (ref) ({ c, r } = ref); const b = state.buildings.find(x => x.c === c && x.r === r); if (!b) return null; const def = BUILDINGS[b.type]; @@ -430,6 +464,8 @@ export function upgradeCost(type, level) { } export function upgrade(state, c, r) { + const ref = state.map[r]?.[c]?.buildingRef; + if (ref) ({ c, r } = ref); const tile = state.map[r]?.[c]; const b = state.buildings.find(x => x.c === c && x.r === r); if (!tile?.building || !b) return { ok: false, reason: 'Hier steht kein Gebäude.' }; diff --git a/App/sims/tourismustal/tests/model-test.mjs b/App/sims/tourismustal/tests/model-test.mjs new file mode 100644 index 0000000..a9e72ff --- /dev/null +++ b/App/sims/tourismustal/tests/model-test.mjs @@ -0,0 +1,76 @@ +// Modell-Langzeittest ohne Browser: spielt eine typische SchĂźler-Strategie +// Ăźber 600 Tage (5 Jahre) durch – inkl. Freischalt-Reihenfolge – und prĂźft, +// ob Balancing und Meilensteine plausibel bleiben. +import { createState, simulateDay, canPlace, place, MAP_COLS, MAP_ROWS } from '../js/model.js'; +import { MILESTONES } from '../js/data.js'; + +const s = createState(); +// Bau-Wunschliste in sinnvoller Reihenfolge; gebaut wird, sobald +// freigeschaltet, leistbar und ein Platz gefunden ist. +const queue = ['restaurant', 'lift', 'access', 'hotel', 'staffhouse', + 'restaurant', 'lift', 'snow']; + +function tryBuildNext() { + const type = queue[0]; + if (!type) return; + for (let r = MAP_ROWS - 1; r >= 0; r--) { + for (let c = 0; c < MAP_COLS; c++) { + if (canPlace(s, type, c, r).ok) { + place(s, type, c, r); + queue.shift(); + console.log(` Tag ${s.day + 1}: ${type} gebaut @ ${c},${r}`); + return; + } + } + } +} + +let goalsDay = null; +const milestonesFired = new Set(); +for (let d = 1; d <= 600; d++) { + // Meilensteine wie im Spiel freischalten + for (const m of MILESTONES) { + if (!milestonesFired.has(m.id) && m.when(s)) { + milestonesFired.add(m.id); + s.unlocked.add(m.unlock); + console.log(` Tag ${d}: Meilenstein ${m.id} → ${m.unlock} frei`); + } + } + tryBuildNext(); + simulateDay(s); + if (s.goalsDone && goalsDay === null) goalsDay = d; + if (!Number.isFinite(s.money) || !Number.isFinite(s.nature)) { + console.error('NaN am Tag', d); process.exit(1); + } + if (d % 120 === 0) { + console.log(`Tag ${d} (${s.season} ${s.year}): Geld ${s.money} € ¡ Gäste ${s.guestsToday} ¡ maxGäste ${s.stats.maxGuests} ¡ Zufr. ${s.satisfaction} % ¡ Natur ${Math.round(s.nature)} %`); + } +} +console.log('---'); +console.log('Nicht gebaut:', queue.length ? queue : 'alles gebaut'); +console.log('Meilensteine:', [...milestonesFired].join(', ') || 'KEINE'); +console.log('Ziele erreicht an Tag:', goalsDay ?? 'NICHT erreicht'); +console.log('Endstand:', `${s.money} €`, `¡ maxGäste ${s.stats.maxGuests}`, `¡ Natur ${Math.round(s.nature)} %`, `¡ Zufriedenheit ${s.satisfaction} %`); + +// --- Kurzcheck der weiteren Szenen: Vorbauten + 240 Tage ohne Ausreißer --- +for (const scene of ['boom', 'klimawandel']) { + const st = createState(scene); + console.log(`\n[${scene}] Vorbauten:`, st.buildings.map(b => b.type).join(', '), + `¡ Start: ${st.money} € ¡ Natur ${st.nature} % ¡ freigeschaltet: ${[...st.unlocked].join(', ')}`); + // im Klimawandel-Szenario einen Panoramaweg dazubauen + if (scene === 'klimawandel') { + outer: + for (let r = MAP_ROWS - 1; r >= 0; r--) { + for (let c = 0; c < MAP_COLS; c++) { + if (canPlace(st, 'trail', c, r).ok) { place(st, 'trail', c, r); break outer; } + } + } + } + for (let d = 1; d <= 240; d++) { + simulateDay(st); + if (!Number.isFinite(st.money) || !Number.isFinite(st.nature)) { + console.error(`[${scene}] NaN am Tag`, d); process.exit(1); + } + } + console.log(`[${scene}] Tag 240 (${st.season} ${st.year}): Geld ${st.money} € ¡ maxGäste ${st.stats.maxGuests} ¡ maxSommer ${st.stats.maxSummerGuests} ¡ Natur ${Math.round(st.nature)} % ¡ Zufr. ${st.satisfaction} %`); +} diff --git a/App/sims/tourismustal/tests/strategien.mjs b/App/sims/tourismustal/tests/strategien.mjs new file mode 100644 index 0000000..b338fe4 --- /dev/null +++ b/App/sims/tourismustal/tests/strategien.mjs @@ -0,0 +1,107 @@ +// Strategie-Durchspiel: prĂźft, was das Modell belohnt und bestraft. +// Beantwortet: Funktioniert "Panzer-Rush" (alles sofort bauen)? Braucht man +// RĂźcklagen fĂźr die einmaligen Entscheidungs-Karten (Skirennen …)? Was +// passiert bei Preis-Extremen? Winter-only vs. Ganzjahr in Szene 3? +// node tests/strategien.mjs +import { createState, simulateDay, canPlace, place, MAP_COLS, MAP_ROWS } from '../js/model.js'; +import { BUILDINGS, MILESTONES, DECISIONS } from '../js/data.js'; + +function fireMilestones(s, fired) { + for (const m of MILESTONES) { + if (fired.has(m.id)) continue; + if (!m.when(s)) continue; + fired.add(m.id); + const unlocks = Array.isArray(m.unlock) ? m.unlock : [m.unlock]; + unlocks.forEach(u => s.unlocked.add(u)); + m.apply?.(s); + } +} + +// Entscheidungs-Karten wie im Spiel: einmalig, Ja nur wenn leistbar. +function handleDecisions(s, st) { + for (const d of DECISIONS) { + if (s.firedEvents.has(d.id)) continue; + if (!d.when(s)) continue; + s.firedEvents.add(d.id); + st.offered.push(d.id); + if (!d.yes.can || d.yes.can(s)) { d.yes.apply(s); st.taken.push(d.id); } + else { st.missed.push(`${d.id} (Tag ${s.day}, nur ${s.money} €)`); d.no.apply(s); } + } +} + +function findSpot(s, type) { + for (let r = MAP_ROWS - 1; r >= 0; r--) { + for (let c = 0; c < MAP_COLS; c++) { + if (canPlace(s, type, c, r).ok) return { c, r }; + } + } + return null; +} + +function run(name, sceneId, days, buildFn, priceFn) { + const s = createState(sceneId); + const fired = new Set(); + const st = { offered: [], taken: [], missed: [], minMoney: s.money, lossDays: 0 }; + for (let d = 1; d <= days; d++) { + fireMilestones(s, fired); + buildFn(s, d); + if (priceFn) s.price = priceFn(s, d); + simulateDay(s); + handleDecisions(s, st); + st.minMoney = Math.min(st.minMoney, s.money); + if (s.lastNet < 0) st.lossDays++; + if (!Number.isFinite(s.money)) { console.error(name, 'NaN Tag', d); process.exit(1); } + } + const goals = s.scenario.goals.filter(g => g.check(s)).length; + console.log( + `${name.padEnd(22)} Geld ${String(s.money).padStart(8)} € ¡ min ${String(st.minMoney).padStart(7)} € ` + + `¡ maxG ${String(s.stats.maxGuests).padStart(3)} ¡ maxSo ${String(s.stats.maxSummerGuests).padStart(3)} ` + + `¡ Zufr ${s.satisfaction} % ¡ Natur ${Math.round(s.nature)} % ¡ Ziele ${goals}/${s.scenario.goals.length} ` + + `¡ Verlusttage ${st.lossDays} ¡ Geb. ${s.buildings.length}`); + if (st.missed.length) console.log(` ⚠️ verpasste Chancen: ${st.missed.join(' ¡ ')}`); + return { s, st }; +} + +const QUEUE = ['restaurant', 'lift', 'access', 'hotel', 'staffhouse', + 'restaurant', 'lift', 'snow']; + +function queueBuilder(queue, reserve = 0) { + const q = [...queue]; + return s => { + if (!q.length) return; + const type = q[0]; + if (!BUILDINGS[type] || s.money - BUILDINGS[type].cost < reserve) return; + const spot = findSpot(s, type); + if (spot) { place(s, type, spot.c, spot.r); q.shift(); } + }; +} + +// Panzer-Rush: baut JEDEN Tag alles, was geht (freigeschaltet + leistbar). +function rushBuilder() { + return s => { + let built = true; + while (built) { + built = false; + for (const type of Object.keys(BUILDINGS)) { + if (!s.unlocked.has(type)) continue; + const spot = findSpot(s, type); + if (spot) { place(s, type, spot.c, spot.r); built = true; break; } + } + } + }; +} + +console.log('=== SZENE 1 ¡ Pionierzeit, 600 Tage ==='); +run('Referenz (Plan)', 'pionierzeit', 600, queueBuilder(QUEUE)); +run('Panzer-Rush', 'pionierzeit', 600, rushBuilder()); +run('RĂźcklage 8000 €', 'pionierzeit', 600, queueBuilder(QUEUE, 8000)); +run('Geizhals (2 Geb.)', 'pionierzeit', 600, queueBuilder(['restaurant', 'lift'])); +run('Preis 45 € (Abzocke)', 'pionierzeit', 600, queueBuilder(QUEUE), () => 45); +run('Preis 15 € (Dumping)', 'pionierzeit', 600, queueBuilder(QUEUE), () => 15); + +console.log('\n=== SZENE 3 ¡ Schneegrenze 2035, 600 Tage ==='); +run('Nur Winter ausbauen', 'klimawandel', 600, + queueBuilder(['gondola', 'snow', 'snow', 'staffhouse', 'hotel', 'restaurant'])); +run('Ganzjahres-Strategie', 'klimawandel', 600, + queueBuilder(['badesee', 'sled', 'trail', 'staffhouse', 'hotel', 'bikepark', 'playground', 'bikerental'])); +run('Rush Klimawandel', 'klimawandel', 600, rushBuilder());