Naloge 3
Potniki
Podan je razred Potnik.
Potniki začenjajo svojo pot na koordinatah (0, 0) in imajo določeno količino
energije. Nato hodijo naokrog tako, da kličemo metodo pojdi, ki ji
kot argument podamo smer in razdaljo; na kakšen način ju podajamo, boste videli
spodaj. Vsaka prehojena enota razdalje potniku vzame eno enoto energije; vsakič
ko prečka os x ali os y, dobi 5 enot energije. (Koti in koordinate so obrnjene tako kot v matematiki - pi/2 kaže navzgor, to je, v smeri osi y).
Metoda pojdi deluje tako, da pokliče metodo
premik(smer, razdalja). Ta še ni napisana - napisati jo boste
morali sami. Poleg tega pojdi preveri, ali je potnik ob tem
premiku prečkal os x ali y in poveča energijo.
Metoda porabi preveri, ali ima potnik še dovolj energije, da
prehodi določeno razdaljo. Če je nima, vrne False; če jo ima,
vrne True in zmanjša potnikovo energijo. Potnik mora imeti pred
odhodom na pot dovolj energije za celo pot; če bi na poti slučajno dobil energijo,
ker bo prestopil os, to ne šteje.
Razreda Potnik ne smete spreminjati.
Iz razreda Potnik boste izpeljali tri razrede. Vsi trije bodo
imeli (poleg podedovanih) le eno metodo, namreč premik. Metoda
premik mora primerno klicati Potnikovo
metodo porabi.
Vaša metoda premik mora sprejeti argumente v primerni obliki,
izračunati razdaljo, ki naj bi jo potnik prehodil, s klicem metod
porabi odšteti energijo in, če porabi ne vrne
False (kar bi pomenilo, da potnik nima dovolj energije), potnika
dejansko prestaviti na nove koordinate, tako da spremeni self.x
in self.y.
Vaša metoda premik naj ne uporablja (direktno) atributa
__energija (dva podčrtaja na začetku sta dogovorjeni znak za
"pusti pri miru!"), temveč naj z energijo dela le prek metode
porabi.
Orto se premika le orgotonalno, se pravi, na jug, sever, vzhod
in zahod. Njegova metoda premik(smer, razdalja) naj pričakuje, da
bo smer eden izmed nizov "S", "J",
"V" ali "Z", razdalja pa pač razdalja,
ki naj jo prehodi v tej smeri.
OrtoPlus pozna poleg tega še smeri "SV",
"SZ", "JV" in "JZ". Pomen argumenta
razdalja je takšen: če pokličemo pojdi("SV", 1),
bo šel potnik za eno enoto na sever in za eno na vzhod - potuje naravnost, torej
po diagonali. Skupaj bo torej prepotoval (približno) 1.41 enote, torej ga bo to
stalo tudi toliko energije.
Liberalec dobi smer podano kot kot (v radianih), razdalja pa
je razdalja, ki jo bo naredil v tej smeri.
Dodatna naloga
Razrede v obvezni nalogi smo zastavili nekoliko nerodno. Kot ste najbrž
opazili, ste v vseh metodah premik pisali podobne stvari. Tule
je boljši osnovni razred; poimenovali smo ga Potnik2. Napiši
razrede Orto2, OrtoPlus2, Liberalec2,
ki so izpeljani iz razreda Potnik2, vedejo pa se enako kot
njihovi soimenjaki brez dvojk.
Kako deluje lepše zasnovani Potnik2 in kaj mora početi njihova
metoda premik, pa razberi sam(a) - tudi to je del naloge.