Upozornění na nový obsah pomocí RSS.
Upozornění na nový obsah pomocí e-mailu.
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.
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
).
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.
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 č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).
Mé ř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 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."
Na úvod občas nějaká ta básnička a jako tajemství palindrom. ![]()
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í.
Použití: Client <IP_ADDRESS_OR_DNS_NAME> <PORT>
enjoy
11.12 /2009 - 22:40
programování
2 komentáře (přečteno: 2278x)
Nejčtenější články za poslední půlrok.
Nejkomentovanější články za poslední půlrok.
Nejčastěji komentující čtenáři za poslední půlrok.
Výběr zajímavých stránek.
delicious (profil)
blogy
v angličtině
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. ![]()
Dlouhé články nemám rád(a). Cokoliv má více jak 140 znaků, je moc.
Neutrální. Pokud se jedná o trochu zajímavé téma, přečtu si jej se stejnou šancí jako krátký.
Nerad(a) je vidím. Téma mě musí hodně zajímat, abych si článěk přečetl(a) celý.
Už si ani nepamatuji, kdy jsem naposled přečetl(a) celý dlouhý člának.
Zaujal vás tento článek? Nezapomeňte, že je ve vaší moci ukázat stovkám dalších lidí, že tento článek se vám libí. Stačí kliknout na následující tlačítko.
Chcete být upozorňován(a) na nové texty? Pak si přidejte do své RSS čtečky zdroj pro články, bleskovy nebo komentáře a buďte tak informování o všem novém.
Neváhejte napsat k článku komentář (Co je to komentář ?), pokud máte k danému tématu co říci.
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. ![]()
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."
Navrženo pro přenos v binární soustavě | Kdo stojí za tímto blogem? | © Antonín Daněk | Autorské dílo