Komentáře poroty k řešení z 4. kola
Soutěž .NET Challenge je za námi. Skončilo její poslední kolo, v němž měli soutěžící za úkol napsat buď vlastní desktopovou aplikaci malování po vzoru Microsoft Paint nebo (těžší úloha) hledání min pro webové prohlížeče. Celkem se nám sešlo 14 řešení od 10 lidí (7 řešení lehké úlohy, 7 řešení těžké a z toho 4 poctivci vypracovali obě).
Výsledky 4. kola soutěže .NET Challenge
Lehká úloha – Malování
Výsledková listina úlohy Malování
Každý zná malování. Každý ho alespoň jednou použil. Ale ne každý si pokusil malování naprogramovat sám… V .NET Challenge se vás o to pokusilo 7. Z toho dva si vzali na pomoc WPF, ostatní se spokojili se starým dobrým GDI+.
Praktický každý něčím překvapil. U jednoho to bylo MDI (víc otevřených dokumentů najednou), u druhého nástroj výběr (přesunování vybrané plochy) a další zase pluginovým systémem nástrojů nebo lupou.
K samotnému vykreslování jste využili většinou GDI+, tam moc algoritmizace není. Podle mě ale asi nejpalčivějším problémem bylo již zminěné “pluginování”. Pokud se má jádro udržet čisté, je potřeba nabídnout dostatečně komfortní rozhraní pro psaní vlastních nástrojů (se kterými pochopitelně můžete psát i ty základní). Jak ale něco takového udělat? Uživatel by měl mít tyto možnosti:
- zvolit si nástroj v panelu nástrojů
- nastavit nástroji parametry, pokud nějaké má
- nabídnout interakci s kreslícím plátnem a reagovat na akce myši
Osobně se mi zdá jako nejlepší řešení napsat knihovnu jádra, jenž si zareferencuje každý plugin. Mimo jiné poskytne jádro základovou třídu pluginu a interface kreslící plochy (ten implementuje hlavní aplikace a bude ho předávat pluginům, ty díky tomu získají funkce pro vykreslování a odchytávání událostí myši). Nakonec je tu zařazení do panelu nástrojů a nastavení. To jde celkem snadno (plugin má vlastnost “JménoPluginu” a “IkonkaPluginu” a hlavní program všechny projde a přidá do nabídky, popřípadě se tam přidá sám při inicializaci nástroje. Trochu složitější to je s nastavováním. Tam bych volil buď využití podědění z ovládacího prvku formulářové aplikace (UserControl) a jeho upravení podle potřeby. Jeho istanci pro vložení do okénka s nastavením obstará opět třída dědící abstraktní základ pluginu. Do takové míry to však dopracovat jen jediný soutěžící (nastavování nástroje udělal trochu jinak, než jsem popsal, ale jinak je systém stejný).
Trochu jsme se divili, že prakticky nikdo neimplementovat takové ty běžné jednoduché filtry (rozostření, prohození barev atp.). Jejich psaní je docela zajímavé zpestření a není ani moc složité.
Bohužel jste zapomínali často na komentáře a tím jste si bodobě ublížili. Je to prostě jedno z hodnotících kritérií.
Těžká úloha – Hledání min
Výsledková listina úlohy Hledání min
Webové hledání min úplně nabízelo zpracování v Silverlightu. Také ho 5 řešilů ze 7 použilo. Zbylá dvě řešení využila postbacku a vygenerovaného pole do stránky (jako obrázek nebo tabulka tlačítek).
Co se týče algoritmů, tak skoro všichni postupovali podobně. Vygenerovalo se pole podle nastavených parametrů (počet min, rozlišení hracího pole) a v druhém kroku se zapsaly do prázdných polí čísla podle počtu okolních min. Při odkrývání se program do pole podíval, vyhlásil prohru / výhru, či jen zobrazil prázdné pole (+ odkryl všechny okolní prázdné). Nesmíme zapomínat, že v hledání min by nemělo být možné natrefit na minu v prvním kroku.
Rozhodujícím parametrem propracovanosti byla architektura návrhu a možnosti nastavení. Ideální bylo mít objekt, který reprezentoval celou hrací plochu a ten podle využité technologie zobrazovat na stránce. V nastavení potěší předvolby her (těžká, lehká atp.) nebo přímo konfigurovatelnost hrací plochy. Bodovou výhodu také přinesla implementace nejlepších časů (skore).
Co bude dál?
V současné době připravujeme závěrečné vyhodnocení výsledků, které vypublikujeme na stránkách soutěže VbNet.cz. O změnách budeme informovat elektronickou poštou. Prosíme, aby si všichni řešitelé ještě jednou zkontrolovali informace v profilu, ať nedojde k případným problémum při rozesílání cen.