Bij dit spelletje is het de bedoeling om aan de overkant van een kloof te geraken met behulp van een turbolift. Deze bestaat uit een aantal horizontale platformen die aansluitend achter elkaar opgesteld worden. De platformen bewegen verticaal op en neer, en werken onafhankelijk van elkaar. Je kunt enkel naar het volgende platform springen, wanneer dat zich op dezelfde hoogte bevindt als het platform waarop je momenteel staat.

turbolift

Opgave

Voor elk platform wordt bij aanvang een startniveau ingesteld en een richting waarin het platform zich initieel beweegt: naar boven, naar beneden of stilstaan. Daarnaast wordt voor het platform ook een laagste en een hoogste niveau ingesteld, en deze kunnen achteraf niet meer gewijzigd worden. Bij elke volgende tijdsstap beweegt het platform één niveau naar boven of naar beneden, of blijft het stilstaan. Als het platform het laagste (resp. hoogste) niveau bereikt heeft, dan beweegt het vanaf de volgende tijdsstap terug naar boven (resp. naar beneden). Een platform waarvoor het laagste niveau gelijk is aan het hoogste niveau, of waarvoor bij aanvang werd opgegeven dat het stilstaat, blijft bij elke tijdsstap stilstaan. Definieer een klasse Platform die kan gebruikt worden om dergelijke platformen te modelleren. Hiervoor moet een object van de klasse Platform over de volgende methoden beschikken:

>>> platform = Platform(0, Platform.OP, -1, 1)
>>> platform.stand
0
>>> for stappen in range(5):
...     platform.volgende()
...     print(platform.stand)
1
0
-1
0
1
>>> platform = Platform(1, Platform.NEER, 1, 1)
>>> for stappen in range(3):
...     print(platform.stand)
...     platform.volgende()
1
1
1
>>> platform = Platform(3, Platform.STIL)
>>> for stappen in range(3):
...     print(platform.stand)
...     platform.volgende()
3
3
3
>>> platform = Platform(-3, Platform.OP, -1, 1)
Traceback (most recent call last):
AssertionError: ongeldige configuratie

Definieer ook nog een klasse TurboLift, waarvan elk object een turbolift voorstelt die is opgebouwd uit een aantal platformen. Het eerste en laatste platform stellen hierbij het vertrekpunt en de overkant van de kloof voor, maar hoeven niet op hetzelfde niveau te staan, en moeten ook niet noodzakelijk stilstaan. Voor het aanmaken van een object van de klasse TurboLift moeten geen argumenten opgegeven worden. Bij aanvang heeft een turbolift nog geen platformen, maar er kan te allen tijde achteraan een extra platform toegevoegd worden. Beslis zelf of het nodig is om voor de klasse TurboLift een __init__ methode te voorzien, en hoe die dan moet geïmplementeerd worden. Objecten van de klasse TurboLift moeten wel verplicht de volgende methoden hebben:

>>> turbolift = TurboLift()
>>> turbolift.voegtoe(Platform(0, Platform.STIL)) 
>>> turbolift.voegtoe(Platform(2, Platform.NEER, -2, 2)) 
>>> turbolift.voegtoe(Platform(0, Platform.OP, 0, 4)) 
>>> turbolift.voegtoe(Platform(0, Platform.NEER, -4, 0)) 
>>> turbolift.voegtoe(Platform(0, Platform.NEER, -2, 4)) 
>>> turbolift.voegtoe(Platform(0, Platform.STIL)) 
>>> turbolift.tijdsstappen()
16
>>> turbolift.voegtoe(Platform(4, Platform.OP, 2, 8)) 
>>> print(turbolift.tijdsstappen())
None