Opgave 4
Last updated
Last updated
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)
Deze opgave bestaat uit 3 grote delen:
CreateKaart klasse maken
LandKaart klasse maken
Casting tester applicatie maken
Een kaart met een wezen wordt gedefinieerd door volgende zaken (enkel de zwarte pijlen gaan we gebruiken):
CreatureName: naam van het wezen
We stellen deze voor in de klasse als een string
, readonly property
"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 het ManaType
type (enum), readonly property (zie verder, bij Enum landen). Deze stelt de "hoofdkleur" van de kaart voort (Blauw in bovenstaand geval)
AmoundColoredTypeNeeded
: type int
om aan te geven hoeveel mana er nodig is van het ColoredTypeNeeded
type (2 in bovenstaand geval).
AmountUncoloredTypeNeeded
: ook een int
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.
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
"Attack/Defense":
We stellen deze in de klasse voor als twee readonly int
properties met private setters genaamd Attack
en Defense
.
Beide properties kunnen nooit lager dan 0 zijn (0 is wel toegelaten)
Een CreatureKaart
object kan enkel via een overloaded constructor aangemaakt waarbij alle voorgaande eigenschappen moeten worden meegegeven.
ChangeAttack
: deze methode aanvaardt 1 bool
en geeft niets terug. Als deze true
is dan zal bij aanroep van de methode de Attack
property met 1 verhoogd worden. Wanneer de bool
false
is zal de Attack
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.
Bij attack en defense toon je de HUIDIGE waarden.
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)
Er zijn 5 mana "kleuren". Deze stel je voor in een enum type genaamd ManaType
. De kleuren zijn:
Water
Bos
Zon
Vuur
Dood
Een LandKaart
object kan enkel via een overloaded constructor aangemaakt waarbij alle voorgaande eigenschappen moeten worden meegeven.
Toonkaart: deze methode aanvaardt geen parameters en geeft niets terug. Aanroepen ervan zal een samenvatting van de kaart op het scherm tonen.
Maak 3 CreatureObjecten aan in je main:
Namelijk ten eerste de Mahamori Djinn van hierboven.
ColoredTypeNeeded
: ManaType.Water, AmountColoredTypeNeeded
: 2 en AmoundUncoloredTypeNeeded
:4
ColoredTypeNeeded
: ManaType.Bos, AmountColoredTypeNeeded
: 3 en AmoundUncoloredTypeNeeded
:3
ColoredTypeNeeded
: ManaType.Vuur, AmountColoredTypeNeeded
: 1 en AmoundUncoloredTypeNeeded
:0
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
De gebruiker wordt gevraagd hoeveel landen hij per manatype heeft.
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.
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)
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.
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.
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)
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.
Er zijn 5 soorten land. Ieder land genereert 1 mana van de kleur die op de kaart staat.
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.
Als derde deze schattige "Mountain Goat" die als SpecialAbility
"Mountainwalk heeft".