//v 1.00 //by dvestezar.cz (c)2015 //spustit rychle F9 tj.lahodící pro oko a nestrávení u manevrů karla celý den //spustit pomalu F6 tj tak aby jsme viděli co musí chudák karel všechno udělat aniž by jsme si všimli příkaz start // touto procedurou se vše spouští // ovládání jako ve hrách tj. w,w,a,d // mezerník vystřelí // SHIFT+Q ukončí provádění //inicializace číslo kl domů // načti klávesu, pokud by se klávesa načítala vícekrát za smyčku tak by mohlo // docházet k problémům se čtením kláves a zpomalování kódu // takže klávesu načteme do proměnné, jednou přd smyčkou jako inicializaci proměnné kvůli naběhnutí smyčky // potom je to již o načtení ve smyčce jednou za její průchod kl=klávesa dokud kl<>'Q' kl=klávesa //rozhodni co udělat zvolit kl případ 'w' směr('n') případ 's' směr('d') případ 'a' směr('l') případ 'd' směr('p') případ 32 strela konec // pro oko člověka je potřeba průchody trošku zpomalit, může zkusit měnit tuto hodnotu čekej 200 konec konec příkaz směr(kam) //provede natočení karla a následně udělá krok, takže ve výsledku udělá krok daným směrem //n=nahoru //d=dolu //l=vlevo //p=vpravo zvolit kam případ 'n' dokud není sever vlevo konec případ 'd' dokud není jih vlevo konec případ 'p' dokud není východ vlevo konec případ 'l' dokud není západ vlevo konec konec když není zeď krok konec konec procedure strela // taková jednoduchá animace střely jaká je v možnostech tohoto programu //při prvním výstřelu zanechá stopu před zdí, při druhém výstřelu tuto stopu smaže číslo aa,bb,cc,kr_st aa=0 //počítadlo kroků z pozice až po zeď, aby věděl kam se má vrátit bb=0 //pomocná proměnná pro střídání znaků a animaci točení karla cc=0 //proměnná pro zapamatování prvního kroku dokud není zeď a je_predemnou('*')=0 zvolit bb případ 0 maluj '*' bb=1 případ 1 maluj 'x' bb=0 konec //pokud se nejedná o první krok tak smaž znak za karlem když cc>0 otoc //nezbytný pohyb pro možnost vrátit se o pole zpet a smazat znak //tím se vytvoří dojem, že za karlem mizí znaky krok //jakoby couvne o jedno pole maluj ' ' //smaže znak otoc // otočí karla do původního směru, tedy dopředu krok // a krokem se vrátí, takže oko nic nepozná konec //skutečný viditelný pohyb střely krok aa=aa+1 //navyš počitadlo kroků cc=cc+1 // navyš aby cc již nikdy nebylo nula a tím karel poznal že provedl první krok čekej 50 // zpomalení pro lidské oko, můžeš měnit konec //konec malování střely //zkontroluj znovu jestli se už střílelo //pokud ano tak zaanimuj kr_st=1 // nastav na 1 že chceš vykreslit hvězdčku na konci dráhy střely když je_predemnou('*')=1 // je předemnou hvězdička tak se mnou zatoč krok // upravení pozice karla na místo hvězdičky bb=8 //musí být dělitelné 4 pro to aby byl na konci průchodů ve výchozím směru, tj. dopředu dokud bb<>0 vlevo bb=bb-1 čekej 100 // spomal pro oko člověka, můžeš měnit konec kr_st=0 //smaž původní střelu tím že zakážeš její vykreslení aa=aa+1 //navyš počitadlo aa o 1 jakoby karel udělal jeden krok navíc, protože ho udělal konec otoc //karla pro nastavení směru pro návrat na původní pozici když kr_st=1 maluj '*' //pokud je povoleno vykreslení střely, tak ji vymaluj jinak maluj ' ' //jinak ji zmaž konec // no a teď udělej spočtený počet kroků zpět dokud aa<>0 krok maluj ' ' //smaž cokoliv je na pozici karla aa=aa-1 konec otoc // tímto se karel otočí tak jak byl před započetím tohoto příkazu, tj. dopředu konec procedure otoc //nebo-li čelem vzad vlevo vlevo konec funkce je_predemnou(jznak) //otestuje jestli je před karlem znak který zadáme v proměnné jznak //vrací pokud není a pokud je před karlem zeď //jinak vrací je_predemnou=0 // nastav na nula jako základní návratovou hodnotu když je zeď návrat // pokud je zeď tak se vrať, protože před karlem tím pádem nemůže být nic jiného //a protože jsme nastavili návratovou hodnotu na nula tak funkce nulu vrátí konec krok // udelej krok, protože před karlem zeď nebyl a karel může testova jen znak který je pod ním //tak se jakoby otestuje znak před karlem když znak=jznak je_predemnou=1 //poku je teď pod karlem požadovaný znak nastav návratovou hodnotu na 1 a ... konec // vrať karla zpět otoc // tzn. čelem vzad krok // krok zpět otoc // a opětovným čelem vzad je karel nastaven tak jak byl před voláním procedury //takže oko člověka nic nezjistí konec