Expert Review 09-03-2024¶
Inhoud¶
- K1 Je hebt object georiënteerde software gemaakt die samenwerkt met een database.
- K3 Je hebt een infrastructuur ontworpen en gebouwd volgens de gegeven specificaties.
- G1 Je ontwikkelt je op persoonlijk vlak en blijft leren.
- G2 Je werkt constructief samen in een team.
K1¶
Je hebt object georiënteerde software gemaakt die samenwerkt met een database.¶
Object Oriented Programming(OOP)¶
Tijdens het coderen van ons Match 3 spel hebben wij gebruik gemaakt van Object Oriented Programming(OOP). Hieronder hebben wij een paar voorbeelden gegeven.
Wat is Object Oriented Programming(OOP)¶
OOP bestaat uit Encapsulation, Abstraction, Inheritance en Polymorphism. Het is een manier van coderen die gebruik maakt van Objecten
en Classes
. Op die manier is een code minder complex en herbruikbaar.(OOP Denken), (OOP Uitleg), (OOP Wikipedia)
Encapsulation¶
Wat is Encapsulation¶
Encapsulation
is een van de 4 basis principe’s van OOP. Encapsulation
betekent het bundelen van gegevens aan de Class. Daarmee kan het object veranderd worden zonder dat het gevolgen heeft op de code. Daardoor wordt alleen de nodige code laten zien en de rest verborgen.(Encapsulation)
Gebruik van Encapsulation¶
Chessboard Method in Gamestate.cs¶
Waarom deze manier?
Encapsulation gaat over het bundelen van gegevens aan een Class, daarmee word alleen de nodige code gelezen en vrij gegeven en de rest verborgen. Deze Private Method over het Laden en Tekenen van het Chessboard is alleen nodig in de Gamestate.cs, dus is de Method Private en dus alleen accessable in Gamestate.cs.
Wat doet de code
Deze Code Laad de Sprite Chessboard, zet de Locatie, Grootte en tekent hem op het scherm. Daarbuiten maakt hij ook Floats van de Randen en de Border van de Chessboard.
Bronnen
Code
private void Chessboard()
{
ChessBackground = new SpriteGameObject("Images/UI/Chess", 0, "Chess");
ChessBackground.Position = new Vector2((GameEnvironment.Screen.X - ChessBackground.Width) / 2, (GameEnvironment.Screen.Y - ChessBackground.Height) / 2 - 25);
ChessBackground.Scale = 0.9f;
Add(ChessBackground);
float leftEdge = ChessBackground.Position.X - 72.5f;
float topEdge = ChessBackground.Position.Y - 72.5f;
float rightEdge = leftEdge + 72.5f + (ChessBackground.Width * ChessBackground.Scale);
float bottomEdge = topEdge + 217.5f + (ChessBackground.Height * ChessBackground.Scale);
ChessboardBounds = new Rectangle((int)leftEdge, (int)topEdge, (int)rightEdge, (int)bottomEdge);
}
Abstraction¶
Wat is Abstraction¶
Abstraction
is een van de 4 basis principe’s van OOP. Abstraction
gaat om het makkelijker maken van de code door minder belangrijke details weg te laten, hierdoor kan je focusen op de belangrijke dingen en wordt de code makkelijker leesbaar.(Abstraction)
Gebruik van Abstraction¶
Piece.cs¶
Waarom deze manier?
Abstraction gaat over het hergebruiken van code om de code te optimaliseren en makkelijker leesbaar te maken. Met deze code wil ik aantonen dat ik alle Sprites van de Images Draw in 1 line en alle pawns teken in een loop. Daarmee is de code makkelijk leesbaar en kleiner dan als ik alles handmatig had gedaan.
Wat doet de code
- Piece.cs Laad de Piece Sprites en scaled ze correct.
- Het fragment van Gamestate is een For Loop die alle Pawns op de correcte locatie tekent
Bronnen
Code
public class Piece : GameObjectList
{
protected SpriteGameObject piece;
public SpriteGameObject Sprite => piece;
public float Width => this.Sprite.Width;
public float Height => this.Sprite.Height;
public PieceType Type { get; }
public Piece(PieceType type, PieceColor color) : base()
{
Type = type;
string PieceTypeName = type.ToString();
string PieceColor = color.ToString();
piece = new SpriteGameObject($"Images/Pieces/{PieceTypeName}{PieceColor}", 0, $"{PieceTypeName}{PieceColor}");
piece.Scale = 0.30f;
Add(piece);
}
public override Rectangle BoundingBox
{
get
{
int adjustedX = (int)Position.X + 25;
int adjustedY = (int)Position.Y + 75;
return new Rectangle(adjustedX, adjustedY, (int)Width, (int)Height);
}
}
}
private void DrawPieces()
{
for (int i = 0; i < 7; i++)
{
Piece pawnWhite = new Piece(PieceType.Pawn, PieceColor.White);
pawnWhite.Position = new Vector2(358 + (i * 72.5f), 470.5f);
Add(pawnWhite);
whitePawns.Add(pawnWhite);
Piece pawnBlack = new Piece(PieceType.Pawn, PieceColor.Black);
pawnBlack.Position = new Vector2(358 + (i * 72.5f), 40);
Add(pawnBlack);
blackPawns.Add(pawnBlack);
}
}
Inheritance¶
Wat is Inheritance¶
Inheritance
is een van de 4 basis principe’s van OOP. Inheritance
gaat om het herbruiken van code door een nieuwe class
te maken die alle waardes van de andere class
krijgt. daardoor hoeven die waardes niet opnieuw aangegeven worden en word er dus heel veel onnodige code verwijderd. Vaak worden die nieuwe classes
sub-classes
genoemt.(Inheritance)
Gebruik van Inheritance¶
Piece.cs¶
Waarom deze manier?
Inheritance betekent dat een Mechanisme of Class is gebouwt op/vanaf een andere Class. Met deze code wil ik dus aantonen dat onze Piece.cs class geinherit is vanaf GameObjectList.cs
Wat doet de code
Deze Code laad de Spriteobject van alle pieces en scaled ze naar de juiste grootte voor de game.
Bronnen
Code
public class Piece : GameObjectList
{
protected SpriteGameObject piece;
public SpriteGameObject Sprite => piece;
public float Width => this.Sprite.Width;
public float Height => this.Sprite.Height;
public PieceType Type { get; }
public Piece(PieceType type, PieceColor color) : base()
{
Type = type;
string PieceTypeName = type.ToString();
string PieceColor = color.ToString();
piece = new SpriteGameObject($"Images/Pieces/{PieceTypeName}{PieceColor}", 0, $"{PieceTypeName}{PieceColor}");
piece.Scale = 0.30f;
Add(piece);
}
public override Rectangle BoundingBox
{
get
{
int adjustedX = (int)Position.X + 25;
int adjustedY = (int)Position.Y + 75;
return new Rectangle(adjustedX, adjustedY, (int)Width, (int)Height);
}
}
}
Bronnen:
K3¶
Je hebt een infrastructuur ontworpen en gebouwd volgens de gegeven specificaties.¶
public void onPieceMove()
{
PieceMoveData pieceMoveData = new PieceMoveData
{
Player = new PlayerData()
};
pieceMoveData.Player.UserId = SocketClient.Instance.UserId;
pieceMoveData.RoomId = SocketClient.Instance.RoomId;
pieceMoveData.PieceType = selectedPiece.Type.ToString();;
SocketClient.Instance.SendDataPacket(pieceMoveData);
Console.WriteLine(pieceMoveData.PieceType);
}
G1¶
Je ontwikkelt je op persoonlijk vlak en blijft leren.¶
Aan het begin van Blok 3 had ik nog nooit C# aan geraakt. Tijdens de Voorjaars vakantie heb ik me dus vooral gefocust op het leren van C# en Monogame en het resultaat is het huidige product van het spel. Ik heb Tijdens Sprint 1 en 2 de Grid en Pieces getekent en de Logica van de Pawn en Toren gemaakt!
Bronnen
G2¶
Je werkt constructief samen in een team.¶
Tijdens Sprint 1 hebben het groepje en ik een Samenwerkingscontract gemaakt en hebben wij elke sprint een Sprintplanning gemaakt. Daarmee tonen wij aan dat wij een duidelijke communicatie hebben en het coderen van het spel duidelijk gaat.
Bronnen