Expert review sprint 2¶
Criteria die in dit bestand aangetoont worden¶
K1: OOP en database
G1: Zelfontwikkeling en blijven leren
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.
//checks whether the mouse is inside the collision box (image) of a card
public bool CardMouseCollision(Vector2 Mouse)
{
return card.BoundingBox.Contains(Mouse);
}
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.
using System.Security.Cryptography.X509Certificates;
using Blok3Game.Engine.GameObjects;
using Microsoft.Xna.Framework;
namespace Blok3Game.GameObjects
{
public enum CardType
{
Obstacle,
Buff,
Nerf
}
public class Card : GameObjectList
{
protected SpriteGameObject card;
public bool isSelected;
public int startOffsetX;
public int startOffsetY;
public Card(CardType type, int x, int y) : base()
{
//creates a card with an x & y offset, position and image
string CardTypeName = type.ToString();
startOffsetX = x;
startOffsetY = y + 50;
card = new SpriteGameObject($"Images/Cards/{CardTypeName}", 0, $"{CardTypeName}");
card.Position = new Vector2(x, y);
Add(card);
}
}
}
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.
public override void HandleInput(InputHelper inputHelper)
{
base.HandleInput(inputHelper);
for (int i = children.Count - 1; i >= 0; i--)
{
children[i].HandleInput(inputHelper);
}
}
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.
Polymorphism¶
Polymorphism is het creeeren van een object van een overgeerfde class binnen een class. Het heeft veel weg van inheritance, met het overerven van functies en constructors van de class.
Deze code bevindt zich in de Card class. In de card class wordt een spriteGameObject geinitialiseerd, zodat de functies met betrekking tot sprites, gebruikt kunnen worden om de sprite van de kaart. Omdat dit object wordt gemaakt in de Card class, krijgt het object ook de functies van de Card class.
G1¶
Je ontwikkelt je op persoonlijk vlak en blijft leren.¶
Het is voor mij lastig geweest om de structuur van alle bestanden te begrijpen, en een begin te maken aan het project. Dit heeft te maken met mijn enorm beperkte kennis met C#, geen kennis met het werken van een server, en heel weinig gedaan met een database vorig blok. Desondanks heb ik geprobeerd om een begin te maken aan mijn taak (het kaartensysteem van het spel). Ik heb hier redelijke progressie geboekt. Daarnaast snap ik de structuur van het gehele bestand wat beter, en ga nog een klassendiagram maken om de gehele inheritance-structuur te begrijpen. Ik ga ook een begin maken aan een EER om de database-structuur van onze game vorm te geven. Als laatste wil ik nog meer snappen van de collision die de game al bevat om collision tussen images te krijgen.
Bronnen:
OOP uitleg
OOP video