In deze opgave bouwen we een aantal klassen, waarbij het de bedoeling is de basislogica van een bordspel te realiseren.
Speler
bij (type string),
alsook zijn $$x$$- en $$y$$-coördinaat op het speelbord. Hierbij is de $$x$$-richting
de horizontale richting (links-rechts), en de $$y$$-richting de verticale richting (onder-boven).
Zorg voor:
Speler
(type string) en twee argumenten van het type int
,
namelijk de begincoördinaat van de Speler
. De eerste int
is de $$x$$-coöordinaat, de tweede int
is de $$y$$-coördinaat. Indien een negatieve coördinaatwaarde gegeven wordt, resulteert dit in een 0-waarde voor die coöordinaat
(indien dus twee negatieve beginwaarden gegeven worden, is de beginpositie (0,0)).}
get_xy()
levert de $$(x, y)$$-coördinaat van de Speler
als
tuple op
get_naam()
levert de naam van de Speler
__str__()
levert de gedaante [naam:<x,y>]
(zonde spaties).
De Speler
met naam 'Jan'
op positie (3,12) resulteert dus in de string [Jan:<3,12>]
.
__repr__()
-methode
==
levert True
/False
naargelang de namen van de spelers al dan niet gelijk zijn
ga_rechts()
(zonder argumenten) : verhoog x
met 1
ga_links()
(zonder argumenten) : verlaag x
met 1, tenzij x == 0
(dan blijft x
ongewijzigd)
ga_boven()
(zonder argumenten) : verhoog y
met 1
ga_onder()
(zonder argumenten) : verlaag y
met 1, , tenzij y == 0
(dan blijft y
ongewijzigd)
BordSpel
beschikt over een reeks Speler
s, deze reeks is bij aanmaak van een object van deze klasse leeg.
Voorzie het volgende in deze klasse:
+=
met als enig argument een object van de klasse Speler
.
Hiermee wordt de argumentspeler toegevoegd aan het BordSpel
, op voorwaarde dat geen Speler
met dezelfde naam vroeger toegevoegd werd aan ditzelfde BordSpel
.
get_aantal_spelers_x()
met als enig argument een geheel getal x
(type int
).
De methode geeft een int
terug, die aangeeft hoeveel Speler
s van het BordSpel
zich op deze x
-coördinaat bevinden.
is_bezet()
met twee argumenten van het type int
, namelijk x
en y
.
De methode levert True
/False
als resultaat, naargelang de locatie $$(x, y)$$ al dan niet bezet is (m.a.w. of minstens 1 Speler
van het BordSpel
zich op de locatie $$(x, y)$$ bevindt).
filter_spelers()
met 1 object als argument. Er is gegeven dat dit object de methode filter()
bezit. Deze methode heeft 1
argument van het type Speler
en levert True
/False
terug. De methode filter_spelers()
genereert een lijst
met de gebruiksvriendelijke stringvoorstelling van de Speler
s voor wie de filter()
-methode True
oplevert. Hierbij gebruik
je de volgorde waarin de Speler
s ook toegevoegd werden.
filter()
zodanig dat elke Speler
aan
de voorwaarde voldoet.
filter()
met 1 argument van het type Speler
,
zodat de methode True
als resultaat oplevert indien de naam van de Speler
start met het bij constructie opgegeven string.
De methode levert False
in het andere geval.
int
filter()
met 1 argument van het type Speler
,
zodat de methode True
als resultaat oplevert indien de Speler
zich op de opgegeven $$x$$-coördinaat bevindt.
a = Speler('An', 5, 10) b = Speler('Boris', -5, 10) print(a) # [An:<5,10>] print(b) # [Boris:<0,10>] a.ga_rechts() a.ga_rechts() a.ga_onder() print(a) # [An:<7,9>] c = Speler('Cody', 6, 8) d = Speler('Corine', 7, 4) spel = BordSpel() spel += a spel += b spel += c spel += d print(spel.get_aantal_spelers_x(5)) # 0 print(spel.get_aantal_spelers_x(6)) # 1 print(spel.get_aantal_spelers_x(7)) # 2 print(spel.is_bezet(0, 10)) # True print(spel.is_bezet(7, 8)) # False print(spel.filter_spelers(GeefAlles())) #['[An:<7,9>]', '[Boris:<0,10>]', '[Cody:<6,8>]', '[Corine:<7,4>]'] print(spel.filter_spelers(FilterNaam('Co'))) #['[Cody:<6,8>]', '[Corine:<7,4>]'] print(spel.filter_spelers(FilterX(7))) #['[An:<7,9>]', '[Corine:<7,4>]']