Zapocet 17.01.2013

Předmět zaměřený na praktické programování v jazyku a prostředí Java
eld

Zapocet 17.01.2013

Příspěvek od eld »

Ulohy jsou (snad i budou) zde:
http://d3s.mff.cuni.cz/~keznikl/teaching/java/test/

Strucne zadani:

Dopoledne:
Úlohou je vytvořit program, který bude (podobně jako wget) načte danou URL, v jejím těle najde všechny odkazy a rekurzivně načte všechny URL, na které ho tyto odkazy zavedou. Na rozdíl od wget však program nebude obsah navštívených URL ukládat na disk, ale bude dané URL pouze analyzovat (viz. dále) Program bude procházet strom odkazů pouze do určité hloubky. Program bere výchozí URL jako argument a asynchronně zobrazuje výsledky ve Swing okně. Program se spouští z příkazového řádku.
Analyza spocivala v tom, ze jsme si museli pamatovat cestu ke kazdemu odkazu co jsme navstivili (vsechny predchozi odkazy, kteryma jsme prisli) a tu vypisovat. Jeste se musely pamatovat prosle odkazy, ty se znovu neprochazely. Jako argument clovek dostal pocatencni stranku a max hloubku rekurze.

Odpoledne (zde jsem nebyl tak jen zkopiruju):
Úlohou je vytvořit síťovou implementaci hry piškvorky s hracím polem velikosti 9×9 (s velikostí piškvorku 4), kde program funguje jako server i klient.
Alesak
Matfyz(ák|ačka) level I
Příspěvky: 15
Registrován: 9. 2. 2011 11:27
Typ studia: Informatika Bc.

Re: Zapocet 17.01.2013

Příspěvek od Alesak »

Tyjo, jak šly ty Piškvorky? Takhle od pohledu to vypadá docela náročný (co se třech hodin týče).
mykem
Matfyz(ák|ačka) level II
Příspěvky: 81
Registrován: 13. 2. 2011 18:52
Typ studia: Informatika Ph.D.

Re: Zapocet 17.01.2013

Příspěvek od mykem »

Kdybyste někdo měli řešeńí, mohli byste ho sem dát? Díky :)
Danstahr
Matfyz(ák|ačka) level I
Příspěvky: 12
Registrován: 26. 1. 2012 18:50
Typ studia: Informatika Bc.

Re: Zapocet 17.01.2013

Příspěvek od Danstahr »

Piškvorky šly celkem v pohodě, úspěšnost odhadem přes 50%. Kód u sebe nemám, ale moje řešení bylo cca na 300 řádků následujícím postupem :

Klient i server mají jedno vlákno, které obsluhuje GUI a jedno vlákno, které řeší právě očekávanou úlohu. Měl jsem implementovaných několik jednoduchých runnablů (typu odešli socketem číslo, počkej než na socketu něco bude apod.), které jsem v příslušný moment hodil do nového threadu a pustil. Design vypadal asi takto:

- Spustí se server, spurtí se swing vlákno a vlákno, které čeká na připojení klienta
- Spustí se klient, spustí se swing vlákno, vlákno, které se připojí na server a vlákno, které čeká na soupeřův tah. Server to pozná a umožní hrát.
- Teď se periodicky střídají úkony, kdy jeden hráč provede tah, spustí odesílací vlákno a vlákno čekání na soupeřův tah. Na druhé straně tah zachytí čekací vlákno, zaznamená změny a končí. Provedením tahu se to celé opakuje.

Tenhle přístup mi přišel mnohem jednodušší, než si po celou dobu běhu programu držet jedno složité vlákno, které bude handlovat kompletní komunikaci.
waseq++++

Re: Zapocet 17.01.2013

Příspěvek od waseq++++ »

Ahoj,
já měl u piškvorek jinou architekturu: swing vlákno a druhý zajišťující komunikaci. Stačilo to.

Hlavně jste museli ošetřit volání do gui pomocí invokeLater nebo invokeAndWait

Jednoduchý zadání, ale je tam síť, vlákna i gui.
Odpovědět

Zpět na „PGR013 Java“