| <<
Červenec
>> |
| Po | Út | St | Čt | Pá | So | Ne |
| | | | 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 | |
|
|
8 dam WINdows .NET aplikace
Vydáno dne 05. 12. 2004 (4134 přečtení) | Rubrika: M$.NET
8 dam WINdows .NET aplikace
Tak, minule jsme vyřešili úlohu o 8 dam. Využijeme úlohy tak, že z cs codu vytvoříme knihovnu (dll soubor). Tento modul použijeme do nejrozšířenějších aplikací, které nám .NET platforma umožňuje. Označení ".NET" je trochu zavádějící, tady asi působili v Microsoftu více marketingové než vývojové síly to proto, že slůvko naznačuje cosi se sítěmi, internetem a tak. Nenechme se ale zmýlit. Dnes tedy vytvoříme klasický formulář zobrazující řešení úlohy. Příště modul (dll knihovnu) využijeme jako WEBovou aplikaci (aspx stránku) a do třetice využijeme dll jako consolovou aplikaci (aplikace ovladaná z příkazové řádky) pozor nikoliv DOS aplikace! = takový exe soubor nejde spustit v tomto OS.

Začneme z tvorbou dll souboru tak, že vezmeme odladěný soubor 8dam.cs (z minulého článku) a provedeme tyto kosmetické doplňky:
public class _8dam { public _8dam() { // konstruktor tridy, zde zavolame vsechny vypocetni ukony Console.WriteLine("Program 8 dam..."); // vloz prvni hraci plochu AddDesk(); ActionSach(); // zjisti všechny spravne rozmisteni dam ZjistiJedinecne(); // zjisti jedinecne reseni }
// zpristupneni vlastnosti a metod aplikaci vyuzivajici tuto tridu // implementace vlastnosti s "get" (jenom "read-only") public int POCET_RESENI // vlastnost vraci pocet vsech reseni { get { return PocetReseni; } }
// vlastnost vraci pocet unikatnich reseni public int UNIKATNICH_RESENI { get { return PocetUnikatnichReseni; } }
// vlastnost vracejici cely dataset vsech reseni public DataSet SACHOVNICE { get { return Desk;} }
// implementace metody vracejici unikatni cislo dane indexem ) public int getUNI(int x) { return UNI[x]; }
private short[] UNI;
...
Tak, snad jsem nanic nezapoměl, tohle by měli být všechny nové řádky v souboru (_8dam.cz / dříve bez podtržítka) . Funkci Main() nahradil konstruktor _8dam(), což je první funkce, která se vyvolá při vytvoření objektu (většinou operátorem new). No a následuje zpřístupnění nějakých informací v našem případě PUBLIC vlastnosti vracejí POCET_RESENI, UNIKATNICH_RESENI, a vlastní zjištěné řešení SACHOVNICE. Uživatelskému procesu také zpřístupňujeme veřejnou metodu getUNI(int x), která vrací index do šachovnic řešení v rozmezí 1-92 kde vstup je jedno z 12 unikatních řešení. Kvuli této metodě jsme museli interní proměnnou private short[] UNI definovat jako globalni. Tak tento soubor zkompilujeme pomoci již známé utility (soubor si nazvěme treba 8damLIB.bat):
csc /t:library /r:System.dll /r:System.Data.dll /r:System.Xml.dll _8dam.cs
Vyplivne nám to dll soubor, což je naše knihovna, která řeší úlohu rozmístění 8 dam. Teď už zbývá taková nudná práce udělat formulář, volat příslušné vlasnosti třídy z dll knihovny, atd atd.. Tak jak? Práce je ještě nudnější když nemáme po ruce visualní nástroj, nezdá se to ale hlavně při tvorbě formulářů, navrhářů oceníme to, co za nás nástroj dělá (taky nabídka intelisence velmi pomáhá = nemusíme si pamatovat žádné názvy metod funkcí...). Já jsem ale slíbil, že budeme v těchto mých seriálech tvořit co možná "nejlevněji" tak teda jo. Vytvořme si soubor třebas "form2.cz" sorry "form2.cs" otevřeme namespacy, které budeme potřebovat. (nazvy najdeme v google/MSDN/z dřívějška a pod.), nesmíme zapomenou na náš namespace uvedený v dll knihovně, která je ve stejném adresáři nebo určené prostředím "PATH"
Vytvoříme vlastní třídu _8damWin je třeba za ":" dát System.Windows.Forms.Form, čímž říkáme, že naši třídu odvozujeme od jiné třídy (budeme tvořit form). Do konstruktoru (má vždy stejný název jako je název třídy) vytvoříme instanci naší 8dam třídy, naplníme comboboxy počty řešeními, zavoláme zobrazení prvního řešení. Přepsané metody Dispose() si nevšímejte
to tam udělal vizuální nástoj sám od sebe klidně ji smažte :-). Zato povšimněme na metodu InitializeComponent(), kterou vytvořil visuální nástroj, jsou tam všechny ovládací prvky, které jsem popřetahoval z toolboxu. Sice nevím kdy přesně se metoda vyvolá, jistě se vyvolá vždy na začátku programu (určitě ještě před konstruktorem), to ale není podstatné. Mnohem důležitější pro nás jsou události SelectedIndexChanged += new System.EventHandler, kterým se hlásíme k odběru události změny hodnoty v ovládacím prvku "selectboxu". Po změně hodnoty se totiž vyvolá naše metoda uvedená jako parametr (událostmi řízené programování). Tak a naše vlastní metody nakonec. Metoda GeneratePictures() vytváří dynamicky prvky na formu. Konkrétně jsem tam vytvořil grafiku, šachovnici, v cyklu se pak tvoří všech 64 polí (no nedovedu si představit že bych měl 64x vložit prvek z toolboxu :-), zajišťuje mi to metoda Controls.Add(novy), která se mi podařila najít... No poslední metodou je zobrazReseni(int), kdy konečně po tolika řádkování se dostaví toužený výsledek, zobrazení 8 dam, které se nijak neohrožují 3xhurá!. V metodě se cykluje všemi řádky a sloupci nalezeného řešení a procházením kolekce Controls[k]., vyhledávám dynamicky vytvořený kontrol. Určitě se dá program dále optimalizovat ale to nechávám za domácí úkol :-). Form zkompilujeme naší známou utilitou:
csc /t:winexe /r:System.dll /r:System.Xml.dll /r:System.Data.dll /r:System.Drawing.dll /r:system.windows.forms.dll /r:_8dam.dll /out:8dam.exe form2.cs
Tak a máme exe soubor hotový. Ke spuštění exe souboru je potřebný .NET FrameWork. Příště si ukážeme tuto aplikaci jako WEBové řešení a consolovou aplikaci a tím už 8 dam opustíme... Koho to zaujalo tady zdrojové soubory.
Užívejte života
Zdraví Michael
Autor:Michael Stavěla|Komentářů: 5|Přidej!|
|
|
|
20.02.2007: BETA verze int fora pro phpRS 28x BETA verze Int fora pro phpRS 280/281 je zde. Je to jenom prosté přepsání do nové verze bez plánovaných změn funkčnosti. Zejména prozatím nepodporuje systém levelů.
17.09.2006: Spamy ve fóru měli jsme trochu problémy se spamem ve foru, které je trochu starší provenience (v současné době se s velkými přestávkami - máme málo času - snažíme vytvořit verzi pro 280. Tremín nedokážeme odhadnout, je tam jeden poměrně obtížný logický problém) Takže jsme tam aplikovali jednu poměrně primitivní ochranu, kterou nyní musíme vložit do nové verze. Snad to na chvíli vydrží.
13.03.2006: Nový článek po hodně dlouhé době. Doufáme, že přibudou další. Náměty by byly, ale čas není.
20.02.2006: Oprava chyby V intforu alfa_5, která znemožňovala přihlášení do "privátních" témat. Opravený balíček s aktualizovanou verzí slovenského slovníku najdete v downloadu. Postačí aktualizovat soubory kifosmer.php a kifosmer2.php + slovníkový soubor (adresář kifo/slovnik/kifosl.sk.php)
|
|