IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Machr na OOP - Robot Karel

Aktivity
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:19.8.2013 18:13

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
19.8.2013 18:13
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:19.8.2013 18:27

tituly do profilu se dají zpětně?

 
Nahoru Odpovědět
19.8.2013 18:27
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Žůrek - misaz
David Hartinger:19.8.2013 18:32

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
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Libor Šimo (libcosenior):20.8.2013 8:23

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 Hartinger
Vlastník
Avatar
Odpovídá na Libor Šimo (libcosenior)
David Hartinger:20.8.2013 8:39

Jo, můžeme to dát na 10x10.

Nahoru Odpovědět
20.8.2013 8:39
New kid back on the block with a R.I.P
Avatar
Filip Pýrek
Tvůrce
Avatar
Filip Pýrek:20.8.2013 9:59

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 Hartinger
Vlastník
Avatar
Odpovídá na Filip Pýrek
David Hartinger:20.8.2013 10:12

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

Nahoru Odpovědět
20.8.2013 10:12
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:20.8.2013 10:18

když to pojede najednou tak jak pak implementovat debuger?

 
Nahoru Odpovědět
20.8.2013 10:18
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Žůrek - misaz
David Hartinger:20.8.2013 10:34

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
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
Avatar
matesax:20.8.2013 11:21

Mé řešení:

http://ulozto.cz/…987K/wvw-zip

 
Nahoru Odpovědět
20.8.2013 11:21
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:20.8.2013 12:10

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

 
Nahoru Odpovědět
20.8.2013 12:10
Avatar
vitamin
Člen
Avatar
vitamin:20.8.2013 12:17

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 Hartinger
Vlastník
Avatar
Odpovídá na vitamin
David Hartinger:20.8.2013 12:30

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
New kid back on the block with a R.I.P
Avatar
Filip Pýrek
Tvůrce
Avatar
Odpovídá na David Hartinger
Filip Pýrek:20.8.2013 19:50

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
Tvůrce
Avatar
Odpovídá na Filip Pýrek
Kit:20.8.2013 19:53

...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
Tvůrce
Avatar
Odpovídá na Kit
Filip Pýrek:20.8.2013 20:11

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
Tvůrce
Avatar
Odpovídá na Filip Pýrek
Kit:20.8.2013 20:14

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
Tvůrce
Avatar
Filip Pýrek:20.8.2013 20:20

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ý
Tvůrce
Avatar
Odpovídá na Filip Pýrek
Jan Vargovský:20.8.2013 20:40

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
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Filip Pýrek:20.8.2013 20:57

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
Tvůrce
Avatar
Odpovídá na David Hartinger
Ondrca:21.8.2013 9:25

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:21.8.2013 9:47

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
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Ondrca:21.8.2013 9:49

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
Tvůrce
Avatar
Ondrca:21.8.2013 10:31

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

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

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

 
Nahoru Odpovědět
21.8.2013 10:33
Avatar
matesax
Tvůrce
Avatar
matesax:21.8.2013 10:39

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
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Filip Pýrek:21.8.2013 11:27

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

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

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
Tvůrce
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
Tvůrce
Avatar
Odpovídá na Ondrca
Filip Pýrek:21.8.2013 13:28

Momentálně to vypadá takto - http://karel.filippyrek.cz/

Nahoru Odpovědět
21.8.2013 13:28
„The best way to predict the future is to invent it.“ — Alan Kay
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na Filip Pýrek
Ondrca:21.8.2013 13:36

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
Tvůrce
Avatar
Odpovídá na Ondrca
Filip Pýrek:21.8.2013 13:42

"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 Hartinger
Vlastník
Avatar
Odpovídá na Filip Pýrek
David Hartinger:21.8.2013 13:43

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

Nahoru Odpovědět
21.8.2013 13:43
New kid back on the block with a R.I.P
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na Filip Pýrek
Ondrca:21.8.2013 13:45

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 Hartinger
Vlastník
Avatar
Odpovídá na Ondrca
David Hartinger:21.8.2013 13:46

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
New kid back on the block with a R.I.P
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na David Hartinger
Ondrca:21.8.2013 13:47

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
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:21.8.2013 16:11

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
Tvůrce
Avatar
Odpovídá na matesax
Filip Pýrek:21.8.2013 16:26

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
Tvůrce
Avatar
Odpovídá na Filip Pýrek
matesax:21.8.2013 16:33

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
Tvůrce
Avatar
TomBen:21.8.2013 22:03

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
Tvůrce
Avatar
matesax:22.8.2013 9:02

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:25.8.2013 15:06

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
Avatar
Odpovídá na Michal Žůrek - misaz
Michal Žůrek - misaz:25.8.2013 15:27

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
Avatar
Neaktivní uživatel:25.8.2013 18:04

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

Nahoru Odpovědět
25.8.2013 18:04
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:25.8.2013 18:09

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

Nahoru Odpovědět
25.8.2013 18:09
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:25.8.2013 18:11

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
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:25.8.2013 19:12

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
25.8.2013 19:12
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Michal Žůrek - misaz:25.8.2013 19:21

Tak toto mě teda nenapadlo...

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

 
Nahoru Odpovědět
25.8.2013 19:21
Avatar
Michal Žůrek - misaz:25.8.2013 19:28

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
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:26.8.2013 23:49

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.