Zápočtový test, 29.1.2009, 15:00

Cílem semináře je seznámit posluchače s jazykem C#, prostředím platformy .NET a tvorbou aplikací s grafickým uživatelským rozhraním. Předpokládají se znalosti objektově orientovaného programování.
Zabiják

Zápočtový test, 29.1.2009, 15:00

Příspěvek od Zabiják »

Zadáním bylo napsat klasickou hru Miny (co je ve Windows). Měla to bejt GUI aplikace, kde se vygeneruje x*y Buttonů na form, ty nejdřív nemají žádný text na sobě. Když se klikne na čudl, kde je mina, tak to tam dá křížek a hra končí. Když tam mina není, tak to na ten Button napíše číslo znamenající počet sousedních min. Ještě to mělo umět, že když se klikne na Button s hodnotou nula (žádná sousední mina), tak aby to současně odkrylo všechny okolní pole (a rekurzivně dál).

Mělo to brát tři parametry na příkazový řádce (přesto, že to měla bejt GUI aplikace), šířku, výšku a počet min.

Co člověk musel umět je:
1) Načíst parametry command-lajny i v GUI aplikace, tj. u Main() připsat parametr string[] x, a pak to načíst přímo v týhle statický funkci. A pak to nějak poslat do formuláře, nejlíp asi tak, že se předefinuje konstruktor a pošle se to tam jako parametry, tj. public Form1(int a, int b, int c), a přepsat volání v Main() na Application.Run(new Form1(a, b, c));
2) Generovat Buttony v run-timu. Tj. B = new Button(); Controls.Add(B);
3) Dobře si evidovat Buttony, jejich pozice a vlastnosti. Já jsem to vyřešil tak, že jsem měl pole buttonů (buttons[,]), a každýmu vytvořenýmu Buttonu jsem přiřadil Tag (to je vlastnost každý komponenty, kam si člověk může uložit libovolný objekt), kde si každý button pamatoval svoji pozici a jestli je mina.
4) Umět programově vytvořit event handler. Tj. B.Click += ... Uvnitř tohoto handleru se pak musí ze "senderu" vytáhnout pozice, kam se kliklo.

Zbytek je už jenom nějaká jednoduchá herní logika a hlídání mezí pole v případě počítání sousedů a flood-fill otáčení nulových polí (když se klikne na pole s nulou, aby to odkryly všechny okolní pole).

Já jsem odcházel jako první v 16:00, tj. asi 50 minut od zadání, úloha to byla IMHO velmi jednoduchá, a kdybych se nebabral s TableLayoutPanelem, který jsem původně chtěl použít, tak se to dalo dát za 30 minut. Nakonec bylo nejjednodušší nastavit Form na no-resizeable a buttonům spočítat rozměry a pozice ručně.
Odpovědět

Zpět na „NPRG035 Jazyk C# a platforma .NET“