Search
Opakování (cykly), větvení (podmínky) programu a vytváření vlastních príkazů (metody).
pro vyučující: 02
turnRight
turnRightOnBeeper
Použité funkce Karla:
move
turnLeft
pickBeeper
putBeeper
isOnBeeper
isInFrontOfWall
if (podmínka) { příkaz // tento příkaz se provede v případě, že je splněna podmínka }
příklad:
if (isOnBeeper()) { příkaz // tento příkaz se provede, pokud robot stojí na značce (beeper) }
while (podmínka) { příkaz // tento příkaz se opakovaně provádí, pokud je splněna podmínka (nesplnění podmínky ukončuje provádění cyklu) }
while (isOnBeeper()) { move(); // robot jde v jednom směru po značkách (dokud jsou pod ním značky, provádí kroky) }
obdoba příkazu s podmínkou na konci:
do { příkaz // stejné jako předchozí, ale protože se podmínka testuje až na konci, příkaz se vždy provede minimálně jednou } while (podmínka);
for (int i = 0; i < 100; i++) { příkaz // tento příkaz se provede 100x }
Vytvoření nového příkazu doFiveSteps, který provede pět kroků robota.
doFiveSteps
void doFiveSteps() { for (int i = 0; i < 5; i++) { move(); } }
Jak vypadá celý program resp. definice našeho vlastního robota, rozšířená o nový příkaz:
package cz.cvut.fel; import kareltherobot.FelKarel; public class Lab02Karel extends FelKarel { // Definice našeho nového příkazu (metody) void doFiveSteps() { for (int i = 0; i < 5; i++) { move(); } } @Override public void execute() { // Zavolání našeho nového příkazu doFiveSteps(); } }
Jak na kompilování a spuštění programu v Javě tutorial_kompilace
Jak nastavit java prostředí v příkazové řádce pod Windows ant
Karel obejde místnost po obvodu. Pokud narazí na beeper, přesune ho o jedno políčko dále od stěny. Po skončení práce se robot vypne.
Předpokládejte, že beepery se nacházejí pouze u stěn a nejsou v rozích. Místnost je dostatečně veliká, obdélníková a bez překážek (kromě obvodových zdí tam žádné dalši nejsou).
Program pište do připravené šablony v které jste pracovali na cvičení do souboru Lab02Karel.java. Je pouze třeba jenom změnit “svět” ve kterém se Karel pohybuje. Toho docílíte zakomentováním řádku 12 v Lab02Task a odkomentováním řádku 13 v tomtéž souboru. Změníte tedy obsah z:
Lab02Karel.java
World.readWorld("beepers.kwld"); //World.readWorld("walls.kwld");
//World.readWorld("beepers.kwld"); World.readWorld("walls.kwld");
Implementujte příkaz (metodu) goToCorner, který přesune robota do rohu. Orientace robota po přesunu do rohu je taková, že zeď má po pravé straně a za zády.
goToCorner
Implementujte příkaz (metodu) cleanOneWall, který projde s robotem kolem jedné zdi a posune všechny beepery o jedno políčko od zdi. Metoda předpokládá, že robot stojí v rohu místnosti, otočený ve směru pohybu (zeď vzadu a vpravo, tedy tak jak má robota umístit metoda goToCorner). Po provedení cleanOneWall robot stojí v následujícím rohu orientován pro další pohyb (opět zeď vzadu a vpravo).
cleanOneWall
private
void goToCorner() { // telo prikazu }