Expert review sprint 3¶
Criteria die in dit bestand aangetoont worden¶
K1: OOP en database
K3: Serverconnectie
K5: Documentatie (dit hele bestand)
K1¶
Je hebt object georiënteerde software gemaakt die samenwerkt met een database.¶
Basics van Object-Oriented Programming¶
De basis van object georienteerd programmeren ligt in het plaatsen van code in objecten, zodat deze zo compact mogelijk geschreven wordt. De code wordt, door gebruik van OOP, overzichterlijker, omdat code georganiseerd staat in verschillende objecten. OOP wordt gekenmerkt door 4 basisprincipes: abstraction, encapsulation, inheritance en polymorphism.
Abstraction¶
Abstraction houdt in dat herhaalde code geinitialiseerd wordt in een functie. Hierdoor blijft de code beter leesbaar, compacter en efficient, terwijl het ook makkelijker is om specifieke regels code op te roepen als gebruiker.
Hier wordt abstraction gebruikt om de cardMouseCollision heel makkelijk opnieuw aan te roepen op een ander deel van de code. Deze staat in de card class, waardoor deze ook voor elke card apart kan worden aangeroepen.
Encapsulation¶
Encapsulation houdt in dat variablen en functies, die specifiek aan een object zijn, gebundeld worden in een class. Hierdoor wordt initialisatie van een object, die meerdere keren wordt gecreeerd, een stuk simpeler.
Deze functie bevindt zich in de Card class. Als deze functie in de losstaande card classes wordt aangeroepen (zoals een buffkaart), dan hoeft er in de constructor alleen maar een parameter van het kaarttype meegegeven te worden.
Inheritance¶
Inheritance houdt in dat een class functies overerft van een andere class. Ook kan de nieuwe class de functies veranderen, en nieuwe functies krijgen die de oude class niet heeft.
De Card class inherit van de gameObjectList zodat de card class belangrijke functies overerft, zoals de HandleInput.
Hierdoor is het gemakkelijk om input te ontvangen op de kaarten. Door inheritance is het mij gelukt om de kaarten te kunnen bewegen, door de HandleInput functie.
In de constructor van de (abstracte) class Card wordt er een standaard StartOffset x & y meegegeven op basis van de startpositie van de kaart. Als er een instance van bijvoorbeeld de NerfCard wordt gemaakt, hoeft deze offset niet nog een keer meegegeven te worden aan de kaart, wat de code makkelijk houdt, en vaker herbruikbaar voor extra kaarttypes die eventueel nog worden toegevoegd.
Polymorphism¶
Polymorphism de laatste van de 4 pillaren van OOP. Het is de techniek, waarbij een overgeerfde class, een functie kan aanpassen en op zijn eigen manier kan gebruiken.
Class diagrams¶
Ik heb 2 class diagrams gemaakt op basis van mijn toevoeging aan het project. Hierin is alle overerving weergegeven, en de attributes/methods die ik heb toegevoegd aan de classes. De ‘’ duidt aan dat alle attributes/methods die hierin stonden niet zijn aangepast, en de x duidt aan dat een class geen attributes/methods bevat.
Database¶
Voor een databaseconnectie met de game hebben wij allereerst een EER gemaakt. Dit EER focust op het belangrijkste van wat wij met een database wilde doen; een ELO-systeem.
Dit deel van het EER is vervolgens in een groter EER gezet. Deze bevat extra tabellen voor bijvoorbeeld de kaarten, voor eventuele uitbereidingen. (Hierin is gamesession bijvoorbeeld vervangen voor Game)
Beide van deze EER’s bevatten de kardinaliteit tussen tabellen, voor extra overzicht en informatie over de relaties tussen tabellen. Verder hebben wij een connectie met de HBO-ICT Cloud opgezet.
Als laatste hebben wij nog dummydata in de database gezet aan de hand van SQL-queries, en heb ik nog een query geschreven die in de code wordt aangeroepen. De database wordt alleen niet geinitializeerd, dus er kan geen data vanuit de game naar de database verstuurd.
K3¶
Je hebt een infrastructuur ontworpen en gebouwd volgens de gegeven specificaties.¶
Onze game maakt gebruik van een server om local/online multiplayer te kunnen spelen. Een serverconnectie gaat van speler -> server -> speler. We hebben dit idee uitgewerkt in een network diagram.
De server zit meer aan de kant van player 1, omdat dit de speler is die het spel op de server start, om te spelen met speler 2. Om de flow van data visueel te maken, hebben we een sequence diagram gemaakt om aan te geven wat voor data er wordt verstuurt, en waarheen.
Als laatste heb ik nog een paar berichtjes die ik verstuur naar de server in de code.
Deze functie wordt alleen aangeroepen op het moment dat er een kaart gebruikt wordt. Dan stuurt deze functie een berichtje naar de server waar de UsedCardType instaat. De andere speler in de gamesession ziet dan dat de tegenstander een obstacle kaart heeft gebruikt (in dit voorbeeld ten minste).
Deze functie wordt aangeroepen op het moment dat er een obstacle kaart wordt gebruikt. Er wordt dan een berichtje gestuurd naar de server met de positie van deze obstacle tile, zodat die vervolgens op het andere scherm kan worden neergezet.
Bronnen:
OOP uitleg
OOP video
Sequence diagram tutorial