package minigame import "gitea.brasse-pc.eu/brasse/metro-puzzle-jp/internal/rng" // Ticket är biljettautomaten: en taxetavla med resmål (på japanska) i seedad // ordning. Spelaren väljer ett resmål och betalar – om det var rätt avgör // spärren/tåget senare. type Ticket struct { base Options []TicketOption Cursor int Chosen *TicketOption Cash int } // TicketOption är ett resmål på tavlan. type TicketOption struct { Dest string // resmålets namn på japanska Fare int } // NewTicket bygger tavlan: rätt resmål + lockande alternativ, blandade. // Taxan är seedad per resmål (140–620 yen i steg om 10). func NewTicket(seed rng.Seed, correct string, others []string, cash int) *Ticket { r := newRand(seed, "ticket") g := &Ticket{Cash: cash} names := append([]string{correct}, others...) for _, n := range names { g.Options = append(g.Options, TicketOption{Dest: n, Fare: 140 + 10*r.intn(49)}) } r.shuffle(len(g.Options), func(i, j int) { g.Options[i], g.Options[j] = g.Options[j], g.Options[i] }) return g } // Update flyttar markören och köper. func (g *Ticket) Update(in Input, dt float64) { if g.done { return } if in.Cancel { g.done = true return } g.Cursor = wrap(g.Cursor+in.Move, len(g.Options)) if in.Confirm { opt := g.Options[g.Cursor] if opt.Fare > g.Cash { return // har inte råd: välj annat eller avbryt } g.Chosen = &opt g.done, g.success = true, true } }