◉ VR-kurser
▶ Spela webbversionen

19. Spelomgång, vinst och highscore

Målet

Se hela spelet som en tydlig tillståndskedja: startmeny → aktiv omgång → vinst eller förlust → ny omgång. Läs createState() och scoreFor() i rules.js, samt startRun() och endRun() i main.js.

En samlad spelstatus

createState(bestScore) ger en ny uppsättning fält: hälsa 100, åtta skott, två oupptäckta nycklar, två stängda dörrar, noll kills och noll tid. started, won och gameOver avgör vilka funktioner som får agera. Ett skott ska exempelvis inte förbruka ammunition på startmenyn eller efter att spelaren vunnit.

Vid omstart tas gamla monster, hinkar, magasin och medkit bort innan nya skapas. Dörrarnas animation nollställs och spelaren flyttas tillbaka. Bästa poängen behålls. Om du glömmer att rensa en lista kan gamla osynliga objekt fortsätta påverka nästa omgång.

Vinstvillkoret

Den andra dörren måste vara öppen och spelaren måste nå dagsljusområdet längst bort. Först då anropas endRun(true). Vid hälsa 0 anropas endRun(false). Vinstskärmen visar tid, antal besegrade monster, poäng och bästa poäng. Förlustskärmen visar överlevnadstid och kills men ger ingen ny highscore.

Poängformeln

Math.round(6000 / (1 + seconds / 120)) + Math.min(kills, 20) * 100

Kortare tid ger en högre baspoäng. Varje kill ger 100 bonuspoäng upp till 20 kills. Exempel: efter 120 sekunder och 3 kills blir basen 3000 och bonusen 300, alltså 3300. Formeln ligger i en ren funktion som kan testas utan att starta 3D-motorn.

localStorage sparar rekordet i just den webbläsaren. Det är inte ett konto och synkroniseras inte automatiskt mellan Mac och Quest. Om lagring är blockerad ska spelet ändå vara spelbart; rekordet kan då försvinna mellan omgångar.

Testa

  1. Tryck Start, vänta tio sekunder, avsluta en omgång och kontrollera att tiden är rimlig.
  2. Starta en ny omgång och kontrollera att nycklar, dörrar och kills är nollställda.
  3. Räkna poängen för 120 sekunder och 3 kills själv och jämför med scoreFor(120, 3).
  4. Ladda om sidan och kontrollera att bästa poängen finns kvar i samma webbläsare.

Klart när: du kan skilja på tillstånd som återställs varje omgång och data som sparas mellan omgångar.