Skip to content

Dit is een voorbeeldproject voor de software engineering vakken die worden gegeven op de Academie ICT in de bachelor en AD, leerjaar 1 tot half leerjaar 2.

Notifications You must be signed in to change notification settings

ZuydUniversity/CardgameWar

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

82 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

CardGameWar

๐Ÿ“– Projectbeschrijving

Dit project is een voorbeelduitwerking voor studenten en docenten van de Academie ICT. Het demonstreert hoe een softwareontwerp en -realisatie eruit kunnen zien. Voor zowel ontwerp als realisatie bestaan er meerdere oplossingen. Dit project toont hoe de docenten van de academie verwachten dat je het moet aanpakken en hoe studentenwerk wordt beoordeeld.

Zie het als een afspraak zoals bij een bedrijf: dit is de manier waarop we het nu doen. Er zijn ook andere benaderingen mogelijk, maar die laten we buiten beschouwing om de focus te behouden.

๐Ÿ’ก Leesaanwijzing: Alle gewone tekst beschrijft het softwareontwerp. Tekst in deze blokken geeft extra toelichting over de beoordelingscriteria.

๐Ÿ“‘ Inhoudsopgave

๐ŸŽฎ Speluitleg

War (Oorlog) is een klassiek kaartspel voor twee spelers waarbij het doel is om alle kaarten te verzamelen.

Spelregels

  1. Setup: Het spel wordt gespeeld met een standaarddeck van 52 kaarten (zonder jokers). De kaarten worden geschud en gelijk verdeeld over beide spelers.

  2. Speelronde:

    • Beide spelers draaien gelijktijdig de bovenste kaart van hun stapel om
    • De speler met de hoogste kaart wint beide kaarten
    • Kaartwaarden (hoogste naar laagste): Aas, Koning, Vrouw, Boer, 10, 9, 8, 7, 6, 5, 4, 3, 2
  3. Oorlog:

    • Bij gelijke kaartwaarden ontstaat "oorlog"
    • Elke speler legt drie kaarten gedekt neer en draait de vierde kaart om
    • De hoogste vierde kaart wint alle kaarten van die ronde
    • Bij opnieuw gelijke waarden wordt dit proces herhaald
  4. Winnen: Het spel eindigt wanneer รฉรฉn speler alle kaarten heeft verzameld

Kenmerken

  • Eenvoudig spel zonder strategie of tactiek
  • Geschikt voor beginners en kinderen
  • Volledig gebaseerd op geluk

๐Ÿ“‹ Requirements

Requirements zijn opgesteld op basis van de speluitleg en projectdoelstellingen. Ze vormen de basis voor het ontwerp en de implementatie.

๐ŸŽฏ Beoordelingscriteria voor requirements:

  • Opgesplitst in randvoorwaarden, functionele en niet-functionele requirements
  • Uniek identificeerbaar en grammaticaal correct
  • Beginnen met een actor en bevatten minimaal รฉรฉn werkwoord
  • Atomair (niet verder op te splitsen)
  • Geen ontwerpaspecten, wel meetbaar
  • Onderling consistent en geprioriteerd

Requirements moeten effectief zijn voor vervolgstappen in het ontwerpproces. Consistentie en bruikbaarheid voor use cases zijn belangrijker dan perfecte formulering.###

๐Ÿ”ง Randvoorwaarden

  • Database: Gegevens worden opgeslagen in Microsoft SQL Server
  • Technologie: De applicatie wordt ontwikkeld in .NET Core met WinForms
  • Compliance: Geldende wetgeving wordt nageleefd

โš™๏ธ Functionele Requirements

Identificatie en prioritering:

  • Nummering: Player, Game, Turn, Overall
  • Prioritering: MoSCoW-methode
  • Eigenaarschap: Opdrachtgever is eigenaar van alle requirements
  • Bron: Gebaseerd op speluitleg en projectdoelstellingen

๐Ÿ“Š MoSCoW Prioritering: Deze methode bepaalt wat stakeholders belangrijk vinden. Verschillende stakeholders kunnen verschillende prioriteiten hebben. Studenten kunnen alternatieve prioriteringsmethoden kiezen.

Identificatie Beschrijving Prioritering
P1 De speler voert een unieke naam in Should have
P2 De speler slaat zijn unieke naam op Should have
G1 De speler beรซindigt het spel Could have
G2 De speler kiest een tegenspeler Must have
G3 De speler start een nieuw spel Must have
G4 Het spel heeft een standaard deck van 52 kaarten zonder jokers Must have
G5 De kaarten in het deck hebben een oplopende waarde van 2, 3, 4, 5, 6, 7, 8, 9, 10, B, V, H, A. Must have
G6 De kaarten worden evenredig random verdeeld Must have
G8 Het spel bepaalt random de startspeler Should have
G9 Het spel eindigt zodra รฉรฉn speler geen kaarten meer heeft Must have
G10 Het spel roept de winnaar uit Must have
G11 Het spel werkt de persoonlijke score van de speler bij Should have
T1 De speler speelt de eerste kaart van zijn stapel op tafel Must have
T2 De speler met de hoogste kaart wint alle kaarten op tafel Must have
T3 De gespeelde kaart is van gelijke waarde waardoor oorlog wordt gevoerd Must have
T3.1 De speler speelt vier kaarten van zijn stapel bij het voeren van oorlog Must have
T3.2 De waarde van de vierde kaart bepaalt wie de winnaar is Must have
T4 De speler legt alle gewonnen kaarten onderaan zijn stapel speelkaarten Must have
T5 Een speler kan vals spelen Could have
T5.1 De valsspeler speelt in zijn beurt indien beschikbaar een kaart uit zijn stapel die hoger is dan de door de tegenstander gespeelde kaart Could have
O1 De speler bekijkt de score van alle spelers van hoge score naar lage score Could have
O2 Het spel kan automatisch gespeeld worden zonder gebruikers interactie (kaarten worden automatisch gelegd) Could have
O3 De speler slaat het spel tussentijds op Could have
O4 De speler laadt een eerder opgeslagen spel Could have

๐Ÿ”ง Niet-functionele Requirements

  • Herbruikbaarheid: De code is herbruikbaar voor een toekomstige webapplicatie

๐Ÿ“š Kwaliteitskenmerken volgens ISO 25010: Niet-functionele requirements beschrijven kwaliteitsaspecten van het systeem. Ze moeten passen bij gestandaardiseerde kwaliteitskenmerken.

Voorbeeld van goede formulering:

  • โŒ "Een gebruiker moet inloggen" (ontwerpaspect)
  • โœ… "Het systeem moet loggen welke gebruiker acties uitvoert" (kwaliteitseis voor traceerbaarheid)

๐ŸŽจ Ontwerp

Alle diagrammen zijn gemaakt met UMLet en opgeslagen in de map Design/.

๐Ÿ—๏ธ Conceptueel Klassendiagram

Een conceptueel klassendiagram toont de abstracte structuur van het informatiesysteem op hoog niveau. Het legt de kernentiteiten en hun onderlinge relaties vast.

๐Ÿ“ UML Klassendiagram Richtlijnen:

  • Entiteiten: Rechthoeken met enkelvoudige zelfstandige naamwoorden
  • Associaties: Lijnen tussen entiteiten (optioneel met betekenis-labels)
  • Multipliciteit: Specifieke getallen, n of * voor onbepaalde aantallen
  • Interpretatie: Geen "juist" diagram bestaat - verschillende interpretaties zijn mogelijk

Voorbeeld: Een speler heeft kaarten "on hand" (0..26), een deck bevat kaarten (0..52). De keuze dat een speler maximaal 1 spel tegelijk speelt is een ontwerpbeslissing.

Conceptueel Klassendiagram

๐Ÿ”ง Implementatie Klassendiagram

Implementatie Klassendiagram

๐Ÿ‘ค Use Case Diagram

Use Case Diagram

๐Ÿ“ Use Case Beschrijvingen

Usecase UC1: Register
Beschrijving Speler registreert een unieke naam
Actor Speler
Trigger(s) De speler klikt op de button "Create new player"
Pre-Conditions - Er is geen lopend spel
Post-Conditions - Spleler is opgeslagen met een unieke naam
Stappen Actor speler Systeem
1. Speler klikt op de button "Create new player"
2. Systeem toont de nieuwe speler dialog
3. Speler vult een unieke naam in
4. Speler klikt op ok
5. Systeem controleert of unieke naam al bestaat
6. Systeem slaat de gegevens op
7. Systeem geeft resultaat succes melding
8. Speler klikt op cancel
9. Systeem geeft foutmelding
Main success scenario 1, 2, 3, 4, 5, 6, 7
Alternatieve scenario's 1, 8
1, 2, 3, 4, 5, 9
Usecase UC2: Start game
Beschrijving Speler start het spel
Actor Speler
Trigger(s) De speler wilt een spel starten
Pre-Conditions - Er is geen lopend spel
- Er zijn minimaal twee spelers aangemaakt
Post-Conditions
Stappen Actor Systeem
1. Speler kiest twee spelers
2. Speler klikt op "Create game" om het spel aan te maken
3. Het systeem maakt het spel aan
4. Speler klikt op "start game" om het spel te starten
5. Het systeem schudt het deck
6. Het systeem deelt de kaarten
Main success scenario 1, 2, 3, 4, 5, 6
Alternatieve scenario's

๐Ÿ”„ Sequentiediagrammen

Sequentiediagrammen

๐Ÿ–ผ๏ธ Wireframes

Nog te implementeren

๐Ÿ› ๏ธ Technische Details

Projectstructuur

๐Ÿ“ฆ CardGameWar/
โ”œโ”€โ”€ ๐Ÿ“ Code/
โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ CardgameWar.sln          # Visual Studio Solution
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ War/                     # Core Game Logic
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“„ Program.cs
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ Model/               # Domain Models
โ”‚   โ”‚   โ”œโ”€โ”€ ๐Ÿ“ DataAccess/          # Data Access Layer
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“ Exceptions/          # Custom Exceptions
โ”‚   โ””โ”€โ”€ ๐Ÿ“ WarUI/                   # WinForms User Interface
โ”œโ”€โ”€ ๐Ÿ“ DatabaseScripts/             # SQL Database Scripts
โ”œโ”€โ”€ ๐Ÿ“ Design/                      # UML Design Files
โ””โ”€โ”€ ๐Ÿ“„ README.md                    # Dit bestand

Technologiestack

  • Framework: .NET Core
  • UI: Windows Forms
  • Database: Microsoft SQL Server
  • Modellering: UMLet

๐Ÿš€ Ontwikkelomgeving

  • IDE: Visual Studio 2019/2022
  • Vereisten: .NET Core SDK, SQL Server

๐Ÿš€ Verdiepingsopdrachten

Voor studenten die hun kennis willen uitbreiden:

๐Ÿ“ฅ Aan de slag

  1. Fork deze repository
  2. Kies รฉรฉn van onderstaande opdrachten
  3. Implementeer de gekozen functionaliteit

๐ŸŽฏ Opdrachten

๐Ÿƒ Valsspeler (Object-Oriented Programming)

  • Requirements: T5 en T5.1
  • Leerdoelen: Afgeleide klassen en polymorfisme
  • Beschrijving: Implementeer een speler die vals kan spelen door strategisch kaarten te kiezen

๐Ÿ’พ Save Game (Database & Data Access)

  • Requirements: O3 en O4
  • Leerdoelen: Database-interactie en Data Access Layer
  • Beschrijving: Voeg functionaliteit toe om spellen op te slaan en later te hervatten

๐Ÿ† Beoordelingscriteria

  • Code kwaliteit en architectuur
  • Correcte implementatie van OOP-principes
  • Werkende functionaliteit volgens requirements
  • Documentatie van gemaakte keuzes

About

Dit is een voorbeeldproject voor de software engineering vakken die worden gegeven op de Academie ICT in de bachelor en AD, leerjaar 1 tot half leerjaar 2.

Resources

Stars

Watchers

Forks

Languages