Semestrální práce na předmět Y36PSI - Počítačové sítě. Karel po síti. :o)

Vy neznáte robota Karla? Tak to z vás nikdy nebude ucházející programátor. icon_smile.gif Je to program, na kterém se děti učí programovat. Na začátku máte město, ve kterém se Karel může pohybovat (KROK), může se otáčet (VLEVO) a může pokládat a zvedat značky (POLOZ, ZVEDNI). Ve městě se dají pak stavět zdi a Karla můžete učit (naprogramovat) složitější věci (třeba VPRAVO icon_razz.gif).

Jestli jste tímhle neprošli, asi byste se divili, jak složité úlohy po vás cvičící může chtít naprogramovat. Nebo lépe řečeno, jaké kravinky se v tom dají dělat. Každopádně docela dobře to člověka připraví na řešení problémů v programovacím jazyce.

Seznamte se

Naše úloha

Naše úloha neměla zas tak moc s Karlem společného, resp. použila jen ten základ, ostatně tento předmět (Počítačové sítě) je o něčem jiném.

Měli jsme naprogramovat dvě aplikace - server a klienta.

Server

Server čeká na připojení klienta. Když se tak stane, vygeneruje náhodně pozici a otočení robota, které pošle klientovi. Poté už jen reaguje na příkazy poslané od klienta (KROK, VLEVO, ZVEDNI, OPRAVIT) a simuluje poruchy robota. To nejdůležitější, podporuje více připojených klientů a jejich paralelní obsluhu.

Většina lidí toto řešila vícevláknově. Pro každého nového klienta vytvoří nové vlákno, které klienta obsluhuje. Mě se to zdálo jako dost těžkopádné řešení (a počet vláken v Javě je pokud vím omezen), tak jsem se rozhodl použít pouze dvě vlákna. Jedno čeká na nové klienty a druhé je obsluhuje. Byl tu problém s tím, že jakmile jeden klient neodeslal data, všichni ostatní museli čekat. Dalo se to ale snadno vyřešit vyzkoušením, zda je klient připraven (pokud ne, pokračuji k dalšímu).

řešení serveru je možné stáhnout zde. Nepoužívá balíčky, takže stačí přeložit příkazem javac server.java, nebudete mít žádné problémy s classpath.

Použití: server <PORT>

Klient

Klient se připojí na server, získá od něj jméno robota (aby ho mohl oslovovat), získá úvodní souřadnice a dále musí najít tajemství, které je na souřadnicích [0,0].

Nechce se mi rozebírat problematiku. Tenhle článek stejně zajímá jenom pár chudáků z FELu, kteří chtějí tuto úlohu okopírovat a i ti se pouze koukají po linku. Tak tedy klienta stahujte zde.

Ještě bych rád zmínil, že školní server je naplněný docela vtipnými daty. Např. jedno oslovení robota bylo: "Uzasny robote, ktery umi skvele aproximovat PI a vi, ze jeho hodnota je zhruba 3,141592653589793238462643383279502884197169399375105 82097494459230781640628620899862803482534211706798214808651 3282306647093844609550212231725359408128481117450284 102701938521105559644522948954930381964428810975665933 446128475648233786783165271201909145648566923460348610 4543266482133936072602491412737245870066063155881748815 20920962829254091715364367892590360011330530548820466521 38414695194151160943305727036575959195309218612738." icon_smile.gif Na úvod občas nějaká ta básnička a jako tajemství palindrom. icon_lol.gif

Někteří klienta psali tak, že po připojení okamžitě sám našel poklad. Já to mám tak, že po připojení můžete normálně do příkazové řádky zadávat příkazy, ale rozšířil jsem protokol o příkaz NAJDI, který zajistí automatické nalezení tajemství.

Ukázka běhu

220 Ahoj, tady je robot verze 1.7.
Korejska poezie je nadherna. Posudte sami:

V zahradce zalite mesicnim svetlem

Nebe naplnuje jasny mesic,
zahradku zaplnuji kvety.
Stiny kvetu jsou ve svetle mesice
zretelnejsi.
Ty jsi Mesic, ja jsem kvet.
Sedime tu proti sobe
a co je svetska slava a hana
nemame tuseni.


[pani Kim Samuidang,
Dest v horach rozezniva bambusy]




...nyni zatlacim roboti slzu a jsem pripraven prijmou prikaz.
Oslovuj mne superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu.

Robots name is: 'superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu'

superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu NAJDI
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu VLEVO
250 OK (-3,-5)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
250 OK (-2,-5)
rotace:1
I am turned RIGHT now.
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
250 OK (-1,-5)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
250 OK (0,-5)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu VLEVO
250 OK (0,-5)
I am turned UP now.
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
250 OK (0,-4)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
250 OK (0,-3)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
250 OK (0,-2)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
250 OK (0,-1)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
570 PORUCHA BLOK 7
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu OPRAVIT 7
250 OK (0,-1)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu KROK
250 OK (0,0)
superdepresivni robote Marvine, ktery mas tak hrozne moc spatnou naladu ZVEDNI
221 USPECH Buzkova, ma Vok zub?

Použití: Client <IP_ADDRESS_OR_DNS_NAME> <PORT>

enjoy

2 komentáře

Neváhejte napsat k článku komentář

Nevyplňujte:

  1. 1
    Antonín Daněk

    danek<zavináč>antonindanektečkacz

    Ještě dodám, že oficiálně můžeme úlohu programovat v Javě nebo C. Ve skutečnosti znám i jeden případ naprogramování v Pythonu a jeden v C#.

    U C# byl problém, protože výsledný program nejde pustit na školních Solarisech a jelikož se odevzdává na Karlově Náměstí, kde jsou studenti na Eduroamu schovaní za NATem, nešlo na notebooku otestovat server. Cvičící vzal dotyčného k serveru a přípojil ho přímo. icon_smile.gif

  2. 2
    Musilda

    musilda<zavináč>musildatečkacz

    Jen pro informaci. Robot Karel byla textová hra, která se kdysi, myslím v roce 1989 objevila v nějaké Sedmičce pionýrů (nejsem si jist zcela), jediné co si pamatuju, že byla vyhlášena soutěž, kazety s hrou byly k dostání až od určitého data abyl okolo toho docela šrumec. Do dnes si pamatuju na "Krok na západ - Robot střílí, jsem mrtev."