PADDLE BALL
Introductions PADDLE BALL
Paddle Ball Game is een klassiek arcadespel, gemaakt met Flutter.
1. Spelarchitectuur en -technologie: Het Paddle Ball-spel is ontwikkeld met Flutter, waarbij gebruik wordt gemaakt van de krachtige renderingmogelijkheden voor vloeiende animaties. Animatie-engine: De gameloop wordt aangestuurd door een StatefulWidget met behulp van SingleTickerProviderStateMixin en een AnimationController met een vaste duur (16 ms voor ~60 FPS). De _updateGame-methode, die bij elke tick wordt aangeroepen, behandelt alle natuurkunde en botsingscontroles. Rendering: Spelelementen (bal, paddle, stenen) worden weergegeven met een combinatie van Flutter-widgets: Transform.translate binnen een Stack voor nauwkeurige positionering op basis van berekende $(\text{x}, \text{y})$-coördinaten, en gestileerde Container-widgets voor een aantrekkelijke vormgeving (gradiënten, schaduwen). Coördinatensysteem: De physics-engine werkt met een centraal coördinatensysteem waarbij $(0, 0)$ het midden van het scherm is, wat de botsingslogica met de randen en de paddle vereenvoudigt. 2. Kernspelmechanismen: A. De balbeweging: De positie van de bal (balX, balY) wordt in elk frame bijgewerkt op basis van de huidige vector (snelheidX, snelheidY). Snelheid en niveau: De balsnelheid neemt toe met elk niveau, waardoor de gameplay steeds uitdagender wordt (snelheidX/Y = 4 + (niveau * 0,5)). Muurbotsing: Wanneer de bal de verticale (links/rechts) of horizontale (boven) schermrand raakt, wordt de corresponderende snelheidscomponent eenvoudigweg omgekeerd (snelheidX = -snelheidX of snelheidY = -snelheidY). B. De paddlebesturing: De horizontale positie van de paddle (peddelX) wordt direct bestuurd door de sleepbeweging van de gebruiker via de onPanUpdate-callback van een GestureDetector. Slimme stuiter: Paddlebotsingen maken gebruik van een intelligente stuiterberekening. De hoek van de uitgaande bal wordt bepaald door de positie van de bal op het racket (dichter bij de rand resulteert in een grotere horizontale snelheidscomponent), waardoor schuine schoten worden aangemoedigd om moeilijk bereikbare stenen te raken. C. Stenen en scoren Initialisatie: Stenen worden geïnitialiseerd in een raster (standaard 5 x 6) met kleuren op basis van hun positie in de rij. Botsing: Botsingen tussen stenen worden gecontroleerd bij elke game-update. Wanneer een bal botst, wordt de steen gemarkeerd als vernietigd (isDestroyed = true), de score wordt met 10 punten verhoogd en de verticale of horizontale richting van de bal wordt omgekeerd, afhankelijk van de kant van de impact. Speldoelen: Level omhoog: Het level gaat verder wanneer alle stenen zijn vernietigd. Een nieuwe set stenen wordt geïnitialiseerd en de balsnelheid neemt toe. Levensverlies: Als de bal onder de verticale positie van het racket (racket Y) komt, verliest de speler een leven. De bal wordt teruggezet naar het midden bovenaan. Game over: Het spel eindigt wanneer de speler geen levens meer heeft (levens <= 0). 3. Gebruikersinterface en status Heads-Up Display (HUD): Toont de huidige score, levens en level bovenaan het scherm. Spelstatussen: De applicatie beheert drie verschillende statussen: Startscherm: Toont instructies en een START GAME-knop om level 1 te starten. Actief spel: De kern van de gameplay-loop waarin het peddel, de bal en de stenen zichtbaar en geanimeerd zijn. Game Over: Toont de eindscore en het bereikte level, samen met een PLAY AGAIN-knop om de spelstatus te resetten.