Giter Club home page Giter Club logo

prg08_typescript_game's Introduction

Link naar pull request: 0909758/PRG08_Bobs_Nightmare#2

Link naar issue: 0909758/PRG08_Bobs_Nightmare#4

Link naar online versie: https://jeremy461.github.io/PRG08_Typescript_game/

Eisen:

Klassendiagram: UML

Singleton: De singleton is toegepast in de main.ts. Deze Game class heeft een "private static instance Game" die opgevraagd/aangemaakt wordt door middel van de getInstance() method. Hierdoor kan ik vanuit andere classes de juiste instantie van de Game opvragen om methods/properties aan te spreken.

Polymorfisme: Polymorfisme wordt onder andere gebruikt door middel van de GameObject class. In deze class wordt een HTMLElement, x, y, width en height gezet. Door andere objecten (catapult, powerups, character) te laten overerven van GameObject kan ik snel en zonder veel herhaling al de bovengenoemde waardes zetten. Ook gebruik ik polymorfisme in de Game class, deze class maakt namelijk background + character aan, vervolgens maakt de background de Ground + Catapult aan.

Strategy: Het strategy pattern heb ik gebruikt door middel van CharacterStates. Het karakter kan verschillende behaviours hebben, namelijk Stationary, Flying en ChopperState. Stationary wordt gebruikt wanneer het spel start en het karakter nog niet vliegt en wanneer het karakter de grond heeft geraakt en dus verloren heeft. Flying wordt gebruikt tijdens het vliegen/springen en ChopperState wordt gebruikt wanneer het karakter een helikopter powerup heeft gepakt. Al deze states hebben een eigen move functie en zorgen er dus voor dat het karakter ander gedrag vertoond wanneer deze states aangepast worden.

Observer: Het Observer pattern wilde ik gebruiken op de "super" powerup. Wanneer deze powerup (subject) gepakt wordt, worden alle volgende powerups (observers) 2x zo groot zodat deze makkelijker te pakken zijn. Door de spawn snelheid van de powerups is er helaas maar 1 volgende powerup in het spel nadat je een super-powerup pakt. Deze ene powerup wordt wel groter zoals de bedoeling was maar het idee van de observer-pattern (1 op veel relatie) is hierdoor niet volledig tot zijn recht gekomen. Als ik de snelheid van de game aanpas zodat er meerdere powerups beschikbaar zijn om te vergroten met de "super" powerup, zit er geen uitdaging meer in de game. Ik heb er dus voor gekozen mo het op deze manier te houden.

prg08_typescript_game's People

Contributors

jeremy461 avatar

Watchers

James Cloos avatar  avatar

Forkers

0910078

prg08_typescript_game's Issues

Peer review (door Kenrick Fontijne)

Singleton:
Het Singleton pattern is op de juiste manier toegepast op de Game class in main.ts. De Game class heeft de property private static instance Game en deze instance kan worden aangeroepen met de getInstance method. Ook bevat de Game class de gameLoop method waarin de game wordt gestart met requestAnimationFrame.

Een verbeterpunt zou kunnen zijn om de Game class in zijn eigen file te zetten en de main.ts alleen te gebruiken om de instance van de Game class op te vragen. Nu staat de Game class namelijk in de main.ts.

Strategy:
Het stategy pattern is toegepast in in characterStates.ts. Hierin staat de interface CharacterStates met een move method. De classes die gebruik maken van deze interface zijn:

Crashed in crashed.ts
Flying in flying.ts
Stationary in stationary.ts

Al deze classes hebben hun eigen versie van de move method en worden getriggered door events in de game.

Deze toepassing van het strategy pattern is handig omdat er nu heel makkelijk nieuwe character states kunnen worden toegevoegd als deze nodig zijn.

Observer:
Er is een begin gemaakt met het observer pattern, maar dat deze is nog niet af. Zo te zien zal het observer pattern gebruikt gaan worden om bij te houden welke power-ups de character heeft opgepakt.

Polymorphism:
Polmorfisme is toegepast door middel van de class GameObject. GameObject bevat een HTMLElement, x en y coordinaat en een width en height. Alle objecten in de game (character, powerups, catapult) overerven van GameObject en hebben hun eigen waardes voor deze properties. Dit is een vorm van polymorfisme. Al deze classes extenden van GameObject, maar hebben wel hun eigen verschillende waarden.

Dit is een goede toepassing omdat je nu niet steeds opnieuw de properties hoeft aan te maken bij iedere nieuwe class, maar gewoon makkelijk kan overerven van GameObject.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.