Files
metro-puzzle-jp/internal/minigame/minigame.go
claude b2995d4ca9
All checks were successful
release / build-release (push) Successful in 1m37s
M7: svårighet, tid, poäng, debuffar, egna kort och sittplatsval
- sim/stats.go: Stats (fart, törst, fokus, toalett, tur), debuffar som
  multiplikatorer, Profile som följer med mellan banor och räknar ned
- sim.Run: tidsgräns och maxantal missade tåg förlorar banan; poängformel
  (tid mot par, pengar, sällskapets mätare, utforskat, avdrag); debuffar
  tjänas av många steg, lång tid, tom matmätare och seedad otur vid
  kiosken; stats påverkar fart, mätartakter, läsning och hjälptid
- egna kort (individualCards): Member.Card, spärren kräver allas saldo och
  drar från alla, automaten frågar vems kort, biljetter köps åt alla
- sittplatsval (seatSelection): Ticket får ett sittplatssteg med seedade
  önskemål (fönster/gång/sida/bredvid); missnöjda ger mätar- och poängavdrag
- level: maxMissedTrains, individualCards, seatSelection; bana 003 Shibuya
  (svårighet 3, fyra i sällskapet) och 002 med tidsgräns och sittplatser;
  ordboken utökad; generatorn är spec-driven
- game: tid kvar/missade i HUD, debuffar i meny/HUD/resultat, poäng och
  förlustorsaker på resultatet, vyer för personval och vagn, skript-pick,
  flaggan -debuffs; HUD och resultat komprimerade för fyra i sällskapet
- plan (Björn 2026-10-24): flera våningar med trappor som M9a, egna kort
  och sittplatsval som svårighetsinställningar i M7 – i spelbeskrivning,
  roadmap, testplan
- docs/README/wiki med sittplatsbilden

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-24 10:18:17 +02:00

40 lines
1.2 KiB
Go

// Package minigame innehåller de små spelen i spelet: fylla på kortet vid
// automaten, köpa rätt biljett, få plats på ett fullt tåg och gå av på rätt
// station. Ren logik utan Ebitengine; all slump kommer från en seed så att
// ett minispel är exakt likadant varje gång för samma seed.
//
// Gemensamt mönster: skapa med en seed, mata Update med input varje
// bildruta, läs Done/Success när det är klart. Renderingen görs av
// internal/game per typ.
package minigame
import "gitea.brasse-pc.eu/brasse/metro-puzzle-jp/internal/rng"
// Input är vad spelaren gjorde den här bildrutan.
type Input struct {
Move int // -1 / +1 (upp resp. ner), 0 = inget
MoveX int // -1 / +1 (vänster resp. höger), 0 = inget
Confirm bool // Enter tryckt (just nu)
Hold bool // Enter hålls nere
Cancel bool // Esc tryckt
}
// Game är ett pågående minispel.
type Game interface {
Update(in Input, dt float64)
Done() bool
Success() bool
}
// base är det gemensamma tillståndet.
type base struct {
done, success bool
}
func (b *base) Done() bool { return b.done }
func (b *base) Success() bool { return b.success }
func newRand(seed rng.Seed, context string) *randSrc {
return &randSrc{seed.Derive(context).New()}
}