Introductie
Het spel Magic The Gathering is een populair kaart/verzamel spel. We gaan een vereenvoudigde versie maken die ons zal toelaten om te ontdekken of we een bepaald wezen kunnen maken (casten) gegeven een bepaalde hoeveelheid land-kaarten.
Er zijn 2 soorten kaarten:
- CreatureKaarten: deze wezens kan je enkel maken als je genoeg land hebt om de CastingCost te bepalen in mana (van een bepaalde kleur).
- LandKaarten: ieder land produceert 1 mana van een specifieke type (kleur).
Wil je dus een wezen produceren dat 4 water(blauwe) mana vereist dan zal je 4 Islands nodig hebben (daar een Island 1 blauwe mana genereert)
Opdracht
Deze opgave bestaat uit 3 grote delen:
- CreateKaart klasse maken
- LandKaart klasse maken
- Casting tester applicatie maken
CreatureKaart klasse
Een kaart met een wezen wordt gedefinieerd door volgende zaken (enkel de zwarte pijlen gaan we gebruiken):
Eigenschappen
-
CreatureName: naam van het wezen
- We stellen deze voor in de klasse als een
string
, readonly property
- We stellen deze voor in de klasse als een
-
"De casting cost": hoeveelheid mana die nodig is. In bovenstaande voorbeeld heb je 2 blauwe en 4 "kleurloze' mana nodig (kleurloos= gebruiker mag eender welke kleur kiezen).
- In onze klasse stellen we de casting cost voor door 3 aparte readonly properties met namen:
ColoredTypeNeeded
: is van hetManaType
type (enum), readonly property (zie verder, bij Enum landen). Deze stelt de "hoofdkleur" van de kaart voort (Blauw in bovenstaand geval)AmoundColoredTypeNeeded
: typeint
om aan te geven hoeveel mana er nodig is van hetColoredTypeNeeded
type (2 in bovenstaand geval).AmountUncoloredTypeNeeded
: ook eenint
om aan te geven hoeveel kleurloze mana er nodig is. (4 in bovenstaand geval)
- OOP al goed in de vingers? Bekijk dan zeker de extra opgave voor dit stukje achteraan dit document.
- In onze klasse stellen we de casting cost voor door 3 aparte readonly properties met namen:
-
SpecialAbilities: We stellen deze voor in de klasse als een
string
, readonly property. -
FlavourText:
- We stellen deze voor in de klasse als een
string
, readonly property
- We stellen deze voor in de klasse als een
-
"Attack/Defense":
- We stellen deze in de klasse voor als twee readonly
int
properties met private setters genaamdAttack
enDefense
.- Beide properties kunnen nooit lager dan 0 zijn (0 is wel toegelaten)
- We stellen deze in de klasse voor als twee readonly
Constructor
Een CreatureKaart
object kan enkel via een overloaded constructor aangemaakt waarbij alle voorgaande eigenschappen moeten worden meegegeven.
Methoden
-
ChangeAttack
: deze methode aanvaardt 1bool
en geeft niets terug. Als dezetrue
is dan zal bij aanroep van de methode deAttack
property met 1 verhoogd worden. Wanneer debool
false
is zal deAttack
property met 1 verlaagd worden. -
Toonkaart
: deze methode aanvaardt geen parameters en geeft niets terug. Aanroepen ervan zal een samenvatting van de kaart op het scherm tonen.
*******************************************************
Mahamoti Djinn (4 kleurloos, 2 Water mana)
*******************************************************
"Of royal blood among the spirits [etcetc]"
-------------------------------------------------------
Abilities: Flying
Attack: 5
Defense: 6
-------------------------------------------------------
Bij attack en defense toon je de HUIDIGE waarden.
LandKaart klasse
Er zijn 5 soorten land. Ieder land genereert 1 mana van de kleur die op de kaart staat.
Eigenschappen
Een landkaart wordt door 2 zaken gedefinieerd:
- Naam van het land (readonly property,
string
) (bv Island, Forest, Plains, etc.) - Type mana dat het land genereert
- Stel deze voor in de klasse als een readonly property van het type
ManaType
(zie hieronder)
- Stel deze voor in de klasse als een readonly property van het type
Enum landen (ManaType)
Er zijn 5 mana "kleuren". Deze stel je voor in een enum type genaamd ManaType
. De kleuren zijn:
- Water
- Bos
- Zon
- Vuur
- Dood
Constructor
Een LandKaart
object kan enkel via een overloaded constructor aangemaakt waarbij alle voorgaande eigenschappen moeten worden meegeven.
Methoden
- Toonkaart: deze methode aanvaardt geen parameters en geeft niets terug. Aanroepen ervan zal een samenvatting van de kaart op het scherm tonen.
*******************************************************
Island (Water mana)
*******************************************************
Maak 3 creature objecten aan
Maak 3 CreatureObjecten aan in je main:
- Namelijk ten eerste de Mahamori Djinn van hierboven.
ColoredTypeNeeded
: ManaType.Water,AmountColoredTypeNeeded
: 2 enAmoundUncoloredTypeNeeded
:4
- Alsook een "KinderCatch" (merk ok dat deze kaart geen
SpecialAbilities
heeft en je deze property dus als een lege tekst mag voorstellen (""
)). Deze kaart heeft dus 3 bos-mana en 3 kleurloze mana nodig.ColoredTypeNeeded
: ManaType.Bos,AmountColoredTypeNeeded
: 3 enAmoundUncoloredTypeNeeded
:3
- Als derde deze schattige "Mountain Goat" die als
SpecialAbility
"Mountainwalk heeft".ColoredTypeNeeded
: ManaType.Vuur,AmountColoredTypeNeeded
: 1 enAmoundUncoloredTypeNeeded
:0
Casting tester
We maken nu een applicatie die uit drie stappen bestaat:
- Een deck met landkaarten aanmaken gebaseerd op de invoer van de gebruiker
- Vragen welk creature de gebruiker wenst te maken
- Controleren of het gevraagde wezen kan gemaakt worden met de aanwezige landkaarten
Stap 1: Landen maken
De gebruiker wordt gevraagd hoeveel landen hij per manatype heeft.
Aantal Water?
4 <-ingevoerd door gebruiker
Aantal Bos?
2 <-ingevoerd door gebruiker
Aantal Zon?
3 <-ingevoerd door gebruiker
etc.
Maak een List<LandKaart>
lijst aan waarin je het juiste aantal LandKaart
-objecten plaatst. Dus in voorgaande voorbeelden zullen er 4 Water landkaarten vooraan staan, gevolgd door 2 Bos, etc.
Stap 2: Creature vraag
De gebruiker wordt gevraagd welk dier hij wilt maken. Hierbij worden de 3 eerder aangemaakt creature objecten (de djinn, de geit en de kindercatch) getoond d.m.v. ToonKaart
methode van ieder object.
De gebruiker kan dan 1, 2 of 3 als invoer geven (foute invoer niet controleren)
Stap 3: Controle
De applicatie zal nu bekijken of je het gekozen dier kan maken. Hierbij zal de
List<LandKaart>
bekeken worden of dat er genoeg landen van het juiste type voor het gegeven dier aanwezig zijn.
CastTest methode
Deze controle gebeurt via een static
methode die je in de LandKaart
klasse plaatst. Deze methode heeft CastTest
als naam.
De methode aanvaardt 2 parameters:
- Een
List<LandKaart>
object dat de deck met landkaarten voorstelt - Een
CreatureKaart
object dat het dier voorstelt dat je wilt maken
De methode geeft een bool
terug om aan te geven of het dier wel of niet gemaakt kan worden.
Methode in stap 3 gebruiken
Gebruik de CastTest
methode om te controleren ofhet gevraagde dier kan gemaakt worden. Geef daarvoor als parameters de in stap 1 gemaakt LandKaarten-lijst mee alsook het in stap 2 gekozen dier-object.
Het resultaat van deze methode zal vervolgens gebruikt worden om een zinnetje op het scherm te tonen:
Dier kan gemaakt worden
(indien bool true
was)
of
Dier kan niet gemaakt worden
(indien bool false
was)
Extra opgave voor de OOPros
Vervang de 3 casting cost gerelateerde properties door een 1 property van het type CastingCost
dat je in een aparte klasse CastingCost
aanmaakt.
Deze klasse heeft 3 eigenschappen : ColoredTypeNeeded
, AmountColoredTypeNeeded
en AmoundUncoloredTypeNeeded
.
Je kan objecten van deze klasse enkel aanmaken m.b.v. een constructor die 3 parameters vereist om de 3 voorgaande eigenschappen in te stellen.