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.
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. Bij het aanmaken van een object van de klasse Platform
moeten vier gehele getallen als argument doorgegeven worden: i) startniveau, ii) startrichting, iii) laagste niveau en iv) hoogste niveau. De laatste twee argumenten zijn optioneel, en worden gelijkgesteld aan het startniveau indien ze niet worden doorgegeven. De waarden van de vier argumenten moeten respectievelijk toegekend worden aan de eigenschappen stand
, richting
, laagste
en hoogste
van het nieuw aangemaakt object van de klasse Platform
. Voor de configuratie van een platform moet gelden dat het laagste niveau niet hoger ligt dan het hoogste niveau, en dat het startniveau tussen het laagste en het hoogste niveau gelegen is (grenzen inbegrepen). Bekijk onderstaand voorbeeld om te zien hoe de constructor moet reageren als niet aan deze voorwaarden voldaan is. De richting waarin het platform initieel beweegt, wordt voorgesteld door de waarden -1 (naar beneden), 0 (stilstand) of 1 (naar boven). Zorg er voor dat deze waarden symbolisch kunnen voorgesteld worden door de variabelen Platform.NEER
, Platform.STIL
en Platform.OP
.
De klasse Platform
moet een methode volgende
hebben waarmee gesimuleerd wordt dat de lift binnen de periode van één tijdsstap, één niveau naar boven of naar beneden beweegt, of blijft stilstaan. Deze methode moet de waarde van de eigenschap stand
aanpassen volgens de beschrijving uit de inleiding.
> const platform = new Platform(0, Platform.OP, -1, 1);
> platform.stand;
0
> platform.volgende();
> platform.stand;
1
> platform.volgende();
> platform.stand;
0
> platform.volgende();
> platform.stand;
-1
> platform.volgende();
> platform.stand;
0
> platform.volgende();
> platform.stand;
1
> const platform = new Platform(1, Platform.NEER, 1, 1);
> platform.stand;
1
> platform.volgende();
> platform.stand;
1
> platform.volgende();
> platform.stand;
1
> const platform = new Platform(3, Platform.STIL);
> platform.stand;
3
> platform.volgende();
> platform.stand;
3
> platform.volgende();
> platform.stand;
3
> const platform = new Platform(-3, Platform.OP, -1, 1);
PlatformError: 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. Bij 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. De klasse TurboLift
moeten de volgende methoden hebben:
voegtoe
waarmee achteraan de turbolift een nieuw platform (een object van de klasse Platform
) kan toegevoegd worden.tijdsstappen
die teruggeeft na hoeveel tijdsstappen men het laatste platform van de turbolift bereikt. Bij het aanroepen van deze methode wordt de tijd op nul gezet, en vertrekt men vanaf het eerste platform. Bij elke tijdsstap bewegen eerste alle platformen van de turbolift één niveau naar boven of naar beneden, of blijven ze stilstaan, conform de methode volgende
van de klassePlatform
. Als daarna het platform waarop men zich bevindt op hetzelfde niveau staat als het volgende platform, dan stapt men over naar het volgende platform. De methode tijdsstappen
moet volgens bovenstaande procedure ook gaandeweg de toestand van de platformen van de turbolift aanpassen. Merk op dat het hierdoor mogelijk is dat bij elke volgende aanroep van de methode tijdsstappen
een verschillende waarde wordt teruggegeven, ook al wordt aan de configuratie van de turbolift niets gewijzigd. Het kan ook zijn dat het met een gegeven configuratie van een turbolift onmogelijk is om de overkant te bereiken. Daarom moet de methode tijdsstappen de waarde null
teruggeven, indien het laatste platform nog niet bereikt is na 1000 tijdsstappen.> const turbolift = new Turbolift();
> turbolift.voegtoe(new Platform(0, Platform.STIL));
> turbolift.voegtoe(new Platform(2, Platform.NEER, -2, 2));
> turbolift.voegtoe(new Platform(0, Platform.OP, 0, 4));
> turbolift.voegtoe(new Platform(0, Platform.NEER, -4, 0));
> turbolift.voegtoe(new Platform(0, Platform.NEER, -2, 4));
> turbolift.voegtoe(new Platform(0, Platform.STIL));
> turbolift.tijdsstappen();
16
> turbolift.voegtoe(new Platform(4, Platform.OP, 2, 8));
> turbolift.tijdsstappen();
null