Diskuze: Machr na OOP - Robot Karel

Java Java Machr na OOP - Robot Karel

Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Ahoj kluci, existuje nová placka "Machr na OOP" a může být vaše i se samolepkami devbooku a tímto oceněním do portfolia. V týdenní minisoutěži si zkusíme naprogramovat jednoduchý interpret Karla. Kdo nezná, tak Karel je velmi jednoduchý program, který na obrazovce nějakým způsobem (klidně v textovém režimu) zobrazuje robota Karla v 2d poli. Program si načte sérii příkazů z textového souboru a ty nechá robotem postupně vykonat. Příkazy jsou vždy na samostatném řádku a základní jsou tyto 4:

KROK - udělá krok vpřed podle směru robota
VLEVO-VBOK - Otočí robota o 90 stupňů doleva
POLOZ - Položí značku na políčko s robotem
ZVEDNI - Zvedne značku z políčka s robotem

Značek může být na jednom políčku více.

Úloha je poměrně jednoduchá, ale zajímavá co se týče objektového návrhu :) Autor nejlépe napsaného programu vyhrává. Můžete se zúčastnit s libovolným jazykem.

Pro inspiraci můžete shlédnou jednu z implementací - http://karel.oldium.net/

Čas si dejme do neděle 25.8. do 18:00.

Odpovědět  +2 19.8.2013 18:13
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Michal Žůrek (misaz):

tituly do profilu se dají zpětně?

Nahoru Odpovědět 19.8.2013 18:27
Nesnáším {}, proto se jim vyhýbám.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
David Čápka:

Ano, evidujeme kdo má jaké placky, až se dostanu k implementaci, tak to tam přidám.

Nahoru Odpovědět 19.8.2013 18:32
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Libor Šimo (libcosenior):

Veľkosť 2D poľa má byť 10x10, ako je v ukážke?

Nahoru Odpovědět 20.8.2013 8:23
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 20.8.2013 8:39
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Filip Pýrek
Redaktor
Avatar
Filip Pýrek:

Musí to posouvání být jako v té ukázce? Myslím to, že třeba jednou za sekundu udělá krok pak po sekundě zabočí atd.

Nahoru Odpovědět 20.8.2013 9:59
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Filip Pýrek
David Čápka:

Může to udělat klidně celé najednou.

Nahoru Odpovědět 20.8.2013 10:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Michal Žůrek (misaz):

když to pojede najednou tak jak pak implementovat debuger?

Nahoru Odpovědět 20.8.2013 10:18
Nesnáším {}, proto se jim vyhýbám.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
David Čápka:

Nevím co máš na mysli. Je jedno jestli bude vykonávat příkazy hned nebo s nějakým sleep/timerem, na implementaci to nic nemění.

Nahoru Odpovědět 20.8.2013 10:34
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
matesax
Redaktor
Avatar
 
Nahoru Odpovědět 20.8.2013 11:21
Avatar
Odpovídá na David Čápka
Michal Žůrek (misaz):

myslel jsem debuger že si na přání pozastavíš běh programu.

Nahoru Odpovědět 20.8.2013 12:10
Nesnáším {}, proto se jim vyhýbám.
Avatar
vitamin
Člen
Avatar
vitamin:

Ma to podporovat len tie 4 zakladne prikazy alebo aj ostatne?
http://mormegil.wz.cz/…prog_doc.htm

 
Nahoru Odpovědět 20.8.2013 12:17
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na vitamin
David Čápka:

Stačí jen ty 4. Samozřejmě pokud to uděláš rozšířenější, máš vyšší šanci na výhru.

Nahoru Odpovědět 20.8.2013 12:30
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na David Čápka
Filip Pýrek:

Musíme si hrát s grafikou výstupu? Nebo stačí nějak vybarvit políčka v tabulce?

Nahoru Odpovědět 20.8.2013 19:50
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Kit
Redaktor
Avatar
Odpovídá na Filip Pýrek
Kit:

...nějakým způsobem (klidně v textovém režimu)...

Myslím si, že je to snad jasné.

Nahoru Odpovědět 20.8.2013 19:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na Kit
Filip Pýrek:

Je ale pak máš dělat pingátor (machr na php). A najednou design...

Nahoru Odpovědět 20.8.2013 20:11
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Kit
Redaktor
Avatar
Odpovídá na Filip Pýrek
Kit:

Budeš dělat všechny tři?

Nahoru Odpovědět 20.8.2013 20:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Filip Pýrek
Redaktor
Avatar
Filip Pýrek:

Ne, to je dobrý. ;D

Nahoru Odpovědět 20.8.2013 20:20
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Filip Pýrek
Jan Vargovský:

To bylo před měsícem :) Jsem tu kvůli Tobě prohledal celé fórum a hledal novou soutěž a zároveň se divil, že by byly tento týden 3.

 
Nahoru Odpovědět 20.8.2013 20:40
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na Jan Vargovský
Filip Pýrek:

Já vím, :D Proto jsem psal "Ne, to je dobrý :D". Protože se mi to něchtělo vysvětlovat. Já myslel to že ta soutěž byla podle zadání hlavně zaměřená na kód, ale pak se řeklo, že ten kdo bude mít hezčí design má větší šanci. ;)

Nahoru Odpovědět 20.8.2013 20:57
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Ondrca
Redaktor
Avatar
Odpovídá na David Čápka
Ondrca:

Musí to být pole[ ][ ]?

Editováno 21.8.2013 9:25
Nahoru Odpovědět 21.8.2013 9:25
Zase jsem o něco chytřejší
Avatar
Odpovídá na Ondrca
Michal Žůrek (misaz):

no pokud to chceš dělat proměnnými, tak klidně asi můžeš.

string policko1_1
string policko1_2
string policko1_3
...

// Ale to nebude moc OOP.

Nahoru Odpovědět 21.8.2013 9:47
Nesnáším {}, proto se jim vyhýbám.
Avatar
Ondrca
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Ondrca:

Myslel jsem to ještě jinak, ale říkat to tady nebudu :).

Nahoru Odpovědět 21.8.2013 9:49
Zase jsem o něco chytřejší
Avatar
Ondrca
Redaktor
Avatar
Ondrca:

Značek může být na jednom políčku více.
Může nebo musí?

Editováno 21.8.2013 10:31
Nahoru Odpovědět  +1 21.8.2013 10:31
Zase jsem o něco chytřejší
Avatar
Odpovídá na Ondrca
Michal Žůrek (misaz):

prostě karel si tam může položit kolik chce.

Nahoru Odpovědět 21.8.2013 10:33
Nesnáším {}, proto se jim vyhýbám.
Avatar
matesax
Redaktor
Avatar
matesax:

Opravil jsem pár chybiček a přidal příkaz vpravo-vbok. Ovšem syntax je velice volný. Nechce se mi prozrazovat vyčůranost provedení, tak jen napíši, že v příkazu nezáleží na velikosti písmen, jaký znak použijete mezi vlevo/vpravo a vbok atd.

http://ulozto.cz/…7St7/wvw-zip

 
Nahoru Odpovědět 21.8.2013 10:39
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Filip Pýrek:

Takže u mě bude chtít max jednu :D

Nahoru Odpovědět  +1 21.8.2013 11:27
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Ondrca
Redaktor
Avatar
Odpovídá na Filip Pýrek
Ondrca:

A v jakym jazyce to budeš dělat?
//Teda pokud to budeš dělat :).

Editováno 21.8.2013 11:48
Nahoru Odpovědět 21.8.2013 11:48
Zase jsem o něco chytřejší
Avatar
Filip Pýrek
Redaktor
Avatar
Nahoru Odpovědět 21.8.2013 11:50
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Filip Pýrek
Redaktor
Avatar
Nahoru Odpovědět 21.8.2013 13:28
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Ondrca
Redaktor
Avatar
Odpovídá na Filip Pýrek
Ondrca:

To že to nejde ovládat je schválně? :D

Nahoru Odpovědět 21.8.2013 13:36
Zase jsem o něco chytřejší
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na Ondrca
Filip Pýrek:

"Program si načte sérii příkazů z textového souboru a ty nechá robotem postupně vykonat." Tak jak sdraco napsal ;D :P

Nahoru Odpovědět 21.8.2013 13:42
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Filip Pýrek
David Čápka:

Koukám, že jsi ho naučil podprogramy :)

Nahoru Odpovědět 21.8.2013 13:43
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Ondrca
Redaktor
Avatar
Odpovídá na Filip Pýrek
Ondrca:

Ale ono se to nevykonává :P

Nahoru Odpovědět 21.8.2013 13:45
Zase jsem o něco chytřejší
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Ondrca
David Čápka:

Pokud sem budeš psát takové nesmysly, tak budeš z vlákna vykázán. Program dělá to, co má.

Nahoru Odpovědět 21.8.2013 13:46
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Ondrca
Redaktor
Avatar
Odpovídá na David Čápka
Ondrca:

Omlovám se - nevšiml jsem si, že Karel není na začátku.

Nahoru Odpovědět 21.8.2013 13:47
Zase jsem o něco chytřejší
Avatar
matesax
Redaktor
Avatar
Odpovídá na David Čápka
matesax:

Já jsem to pochopil tak, že se to vykonává na serveru, a nyní se snaží o provedení v JS a proto je tam ten neexistující odkaz:

http://karel.filippyrek.cz/Karel.js

 
Nahoru Odpovědět 21.8.2013 16:11
Avatar
Filip Pýrek
Redaktor
Avatar
Odpovídá na matesax
Filip Pýrek:

To neřeš to jsem tam zapomněl :D
// Lepší? :)

Editováno 21.8.2013 16:27
Nahoru Odpovědět 21.8.2013 16:26
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
matesax
Redaktor
Avatar
Odpovídá na Filip Pýrek
matesax:

Ale mohl by jsi to udělat v JS... (pohyb Karla) A tu tabulku nechceš udělat nějak lépe? A úplná blbůstka - když už máš ten HTML5, tak zkus meta charset...

 
Nahoru Odpovědět 21.8.2013 16:33
Avatar
TomBen
Redaktor
Avatar
TomBen:

Game Maker sice neoplývá kdovíjakými vymoženostmi,
ale základy OOP obsahuje. Zkusil jsem napsat robota
a myslím, že se celkem povedl. :-)
Jo, přejmenoval jsem ho, jmenuje se Andy.

http://ulozto.cz/…7Nf/andy-exe

Návod:
shift při startu nebo restartu (R) umožňuje zvolit:

  • velikost plochy
  • rychlost pohybu robota

shift při počátečním umisťování robota
umožňuje zvolit soubor s příkazy
( jinak se použije soubor prikazy.txt v adresáři programu )

F9 screenshot

SPACE spustí vykonávání příkazů v souboru

seznam příkazů (case sensitive)


POLOZ
KROK
VLEVO-VBOK
ZVEDNI
( chybné příkazy se ignorují)

Pozn: vlevo vbok se provádí jako nastavení směru
tzn. robot se reálně točí zrcadlově podle směru pohybu

Nahoru Odpovědět 21.8.2013 22:03
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
matesax
Redaktor
Avatar
matesax:

Tak mi to nedalo, přidal jsem příkaz výstřel (vystřel, vystrel, vysTRel,...) - co to udělá je asi jasné... Dále program vezme všechny soubory s koncovkou karl v Directory.Get­CurrentDirecto­ry().

http://ulozto.cz/…vX51/wvw-zip

 
Nahoru Odpovědět 22.8.2013 9:02
Avatar
Michal Žůrek (misaz):

Tak přidávám svůj výtvor: http://misaz.wz.cz/…r-na-oop.zip . Je tam nápovšda, tak to určitě pochopíte. Nakonec semi povedlo zprovoznit i debuger. V obrázcích níže je screenshot a OOP návrh (diagram) na kterém je vidět jak jsou propojené třídy.

Nahoru Odpovědět 25.8.2013 15:06
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
Michal Žůrek (misaz):

a ještě poslední oprava http://misaz.wz.cz/…a-oop1.1.zip

příkaz vlevo-vbok otáčel Karlem naopak.

Nahoru Odpovědět 25.8.2013 15:27
Nesnáším {}, proto se jim vyhýbám.
Avatar
Lubos857
Člen
Avatar
Lubos857:

Možná hloupý dotaz, ale co všechno a jak mám odevzdat? :-)

Nahoru Odpovědět 25.8.2013 18:04
Protože bagr nežere cukr.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Lubos857
David Čápka:

Hodíš sem link na zdrojové kódy projektu a ideálně i na spustitelnou verzi.

Nahoru Odpovědět 25.8.2013 18:09
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Lubos857
Člen
Avatar
Odpovídá na David Čápka
Lubos857:

Už jsem poslal SZ, ale tak pro všechny:
https://dl.dropboxusercontent.com/…57_Karel.rar

Je to zkompilováno pro x64.

Grafický výstup už jsem zpracovat nestihl, takže to jsem tam jen nějak naflákal :-D
Jinak program se vypíná tak, že se napíše neplatný příkaz ;-)

Editováno 25.8.2013 18:12
Nahoru Odpovědět 25.8.2013 18:11
Protože bagr nežere cukr.
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Tak jsem si to vše projel. Aplikace to nejsou špatné, ale soutěž je zaměřena na návrh, kterým programy bohužel příliš nevynikají.

Očekával jsem, že mi ukážete, jak umíte polymorfismus (Vykresli implementuje každý předmět), dědičnost (např. HerniObjekt -> Karel), že uděláte příkazy jako samostatné třídy proti nějakému rozhraní (IPrikaz) a podobně. To jsem ve vašich programech bohužel nenašel a místo toho jsou plné switchů a cyklů :P

TomBen - Zajímavý pokus, jak je vidět, v GM většina věcí také nějak jde :) Moc se v tom ale nevyznám, je to takové špagetové, třeba že je načítání příkazů v obejktu políčka.

p4koo - Políčko může mít jen 1 předmět. Implementace mi přijde taková zmatená, hlavně rozhraní ICommand, od kterého bych očekával spíše že definuje jak má vypadat jeden příkaz. U těch vnořených fields jsem se také nějak ztratil.

Misaz - Tohle je taková implementace, kde návrh dává asi největší smysl, i když by to šlo hodně, hodně vylepšit. Kdyby jsi použil polymorfismus a dal Kresli() do každého objektu, vyhl by jsi se switchi v kresliči. Bohužel toto nenapadlo nikoho, i když se jedná o základní principy OOP. Pomocí reflexe bys úplně odstranil další nepříjemný switch v interpreteru. Chybí mi dědičnost (TypPolicka je v objektové aplikaci nesmyslný, k tomu je přeci zjištění typu instance) a přijde mi zvláštní, že je mapa atributem Karla, naopak on by měl být součástí mapy.

matesax - Načítání mapy je přímo v program.cs, jediné pole jsem nalezl jen ve třídě Marks a to je ještě statické. S přidáním dalšího objektu na políčko bys začal mít problémy. Střílení je zajímavé, ale nebylo součástí zadání.

Lubos857 - Dávat v objektově orientovaném programu do pole čísla není to pravé ořechové :) Zkompilovaná verze mi vyhodila chybu s nějakým dll. Kód na mě působí spíše procedurálně, ačkoli se tváří jako objektový. Je to samé větvení a cykly, např. v metodě draw jich je prostě moc.

FilipPyrek - Program se mi moc líbí, hlavně zabudovaný systém na podprogramy, který je elegantní a jednoduchý. Bohužel z objektového hlediska je to všechno v jedné třídě a nedá se moc mluvit o rozdělování odpovědnosti.

Růžovou placku Machr na OOP dnes získává Michal Žůrek (misaz).

Asi se pokusím na základě výsledků v této soutěži sepsat něco o OOP a návrhu aplikací. Snad bude soutěž příště úspěšnější :)

Editováno 25.8.2013 19:13
Nahoru Odpovědět  +1 25.8.2013 19:12
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Michal Žůrek (misaz):

Tak toto mě teda nenapadlo...

Nicméně díky, příště zkusím vylepšit.

Nahoru Odpovědět  +1 25.8.2013 19:21
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):

Alespoň se všichni (nebo alespoň zúčastnění) snad poučili z nějakých chyb.

Nahoru Odpovědět 25.8.2013 19:28
Nesnáším {}, proto se jim vyhýbám.
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Mohl bych poprosit zkušenější o zhodnocení z hlediska návrhu ? http://leteckaposta.cz/291930236 - nejlépe tady, aby to viděli všichni, ale klidně i PM :)

 
Nahoru Odpovědět 26.8.2013 23:49
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 50 zpráv z 50.