feat: initialize TRXTD browser tower defense

This commit is contained in:
Tronax 2026-08-15 16:07:09 +02:00
commit c4347f8420
Signed by: Tronax
SSH key fingerprint: SHA256:2pKKXDZucWvaF/GzXNz0FY53EAO1YDLN80bqS+TTz/o
34 changed files with 8302 additions and 0 deletions

43
scripts/test-obstacle.mts Normal file
View file

@ -0,0 +1,43 @@
import { GameEngine } from '../src/game/engine.ts'
import { store } from '../src/game/store.ts'
const eng = new GameEngine()
eng.startGame('normal')
// irgendein blockierendes Hindernis finden
const blocked = [...eng.blockedCells]
console.log('blockierte Zellen:', blocked.length)
const [tx, ty] = blocked[0].split(',').map(Number)
const item = eng.obstacleAt(tx, ty)!
console.log('Hindernis:', item.type, 'auf', tx, ty, '| canPlace davor:', eng.canPlace(tx, ty))
// per Klick auswählen (Klick auf Zellmitte); store wird in step() synchronisiert
eng.click(tx * 48 + 24, ty * 48 + 24)
eng.step(0)
console.log('Panel offen:', store.obstacle !== null, '| Typ:', store.obstacle?.type, '| Kosten:', store.obstacle?.cost)
// zu wenig Gold -> Ablehnung
eng.money = 10
eng.removeSelectedObstacle()
console.log('abgelehnt bei 10 Gold: Panel noch offen =', store.obstacle !== null, '| Gold =', eng.money)
// genug Gold -> Entfernen klappt
eng.money = 500
eng.removeSelectedObstacle()
eng.step(0)
console.log(
'entfernt: Panel zu =', store.obstacle === null,
'| Gold -' + (500 - eng.money),
'| canPlace danach:', eng.canPlace(tx, ty),
'| Dekor weg:', eng.obstacleAt(tx, ty) === undefined,
)
// Turm auf freigewordener Zelle bauen
console.log('Turmbau auf Zelle:', eng.placeTower('arrow', tx, ty))
// Neustart stellt Hindernisse wieder her
eng.startGame('normal')
console.log(
'nach Neustart wieder blockiert:', eng.blockedCells.has(tx + ',' + ty),
'| Anzahl wie vorher:', eng.blockedCells.size === blocked.length,
)