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 Spelers, 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 Spelers 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 Spelers voor wie de filter()-methode True oplevert. Hierbij gebruik
je de volgorde waarin de Spelers 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>]']