Skip to content

Expert Review 09-03-2024

Inhoud

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);

    }
private void Chessboard()

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);
        }
    }
    piece = new SpriteGameObject($"Images/Pieces/{PieceTypeName}{PieceColor}", 0, $"{PieceTypeName}{PieceColor}");

    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);
    }

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);
            }
        }
    }
public class Piece : GameObjectList

Bronnen:

K3

Je hebt een infrastructuur ontworpen en gebouwd volgens de gegeven specificaties.

namespace Blok3Game.Engine.JSON
{
    public class PieceMoveData : DataPacket
    {
        public PlayerData Player { get; set; }
        public string RoomId { get; set; }
        public string PieceType { get; set; }

        public PieceMoveData() : base()
        {
            EventName = "Piece moved";
        }
    }
}
    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

Algemene Bronnen


Last update: March 5, 2024