Hry s kostkami v jazyce C#

Podobné dokumenty
Náhodná a pseudonáhodná čísla

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Rovnice přímek v rovině

Středoškolská odborná činnost. Obor SOČ: 1. Matematika a statistika GRAFY FUNKCÍ

Seznámení s prostředím dot.net Framework

Rozklad na prvočinitele. 3. prosince 2010

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Úvodem... 9 Kapitola 1 Karetních

Aplikace pro vykreslování grafů elementárních funkcí

Podmíněné vykonávání

Evropská obchodní akademie, Děčín I, Komenského náměstí 2, příspěvková organizace IČ tel

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Větvení programů příkaz IF

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

První kapitola úvod do problematiky

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Profilová část maturitní zkoušky 2017/2018

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Metodický list k didaktickému materiálu

Takto chápanému druhu objektů se říká TŘÍDA.

VISUAL BASIC. Přehled témat

5 ÚVOD DO TESTOVÁNÍ SOFTWARE. 6 Testování software ve vývojovém prostředí MICROSOFT VISUAL STUDIO V hlavním menu volba Debug

Programování v jazyce VISUAL BASIC.NET

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

DUM 06 téma: Tvorba makra pomocí VBA

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Profilová část maturitní zkoušky 2013/2014

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Programujeme v softwaru Statistica

WINDOWS 7 ZÁKLADY. Na konci roku 2012 přišly na trh nové Windows 8, které revolučně mění ovládání a jsou orientovány především na dotykové ovládání.

Základy programování (C#) Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1134_Základy programování (C#) _PWP

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Přístup k poště MS Office 365 mají pouze studenti 1. a 2. ročníku EkF prezenčního studia. Přístup k ostatním službám mají všichni studenti.

PROJEKT MINY - DOKUMENTACE

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Reliance 3 design OBSAH

Úvod do počítačových sítí

Gymnázium, Praha 6, Arabská 16 předmět Programování, vyučující Tomáš Obdržálek Šibenice ročníkový projekt Tadeáš Váša, 1E květen 2014

Informační a komunikační technologie pro učební obory ME4 a SE4. Makra

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Část 1 - Začínáme. Instalace

Objekty jako zapozdření dat. začneme vytvářet vlastní objekty a třídy

Vstupní požadavky, doporučení a metodické pokyny

Obsah. 1) Rozšířené zadání 2) Teorie zásuvných modulů a) Druhy aplikací používajících zásuvné moduly b) Knihovny c) Architektura aplikace d) Výhody

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

AIDA64 Extreme. Příručka k nastavení. v

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

JRm verze Aplikace. Instalace. Ovládání

Kajot Casino Ltd. Popis hry Joker 27

František Hudek. duben ročník

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

MRBT. Stacionární průmyslový robot EPSON C3 aplikace pro prezentaci

Nejzajímavější jsou události MouseDown a KeyDown.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

ELEKTRONICKÉ PODÁNÍ OBČANA

1 Návod na instalaci prostředí LeJOS-NXJ a přehrání firmwaru NXT kostky

CZ.1.07/1.5.00/

Česká příručka. Obsah Balení. Systémové Požadavky. Instalace a podpora. Roccat Isku klávesnice Rychlá instalační příručka

Free and open source v geoinformatice. Příloha 3 - Praktické cvičení R Studio

Stručný obsah. Část I. Část II. Část III. Úvod do vývoje v prostředí Visual Studio 25. Návrh uživatelského rozhraní 127

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Připravil: Ing. Vít Ondroušek, Ph.D. Technologie.Net Framework

Algoritmizace a programování

Gymnázium, Praha 6, Arabská 16. předmět Programování, vyučující Tomáš Obdržálek Lodě Dokumentace ročníkového projektu Martin Karlík, 1E 17.5.

Instalace pluginů pro formuláře na eportálu ČSSZ

Microsoft Access tvorba databáze jednoduše

Projekt Obrázek strana 135

Databáze pro evidenci výrobků

Uživatelská příručka Autor: Martin Fiala

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Vytvoření.NET komponenty (DLL) ve Visual Studiu

Instalace a první spuštění programu.

Další nutný soubor je laydiv.js, ve kterém jsou uloženy funkce pro zobrazování virů na ploše a funkce pro odkaz na Teachers Guide.

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

5a. Makra Visual Basic pro Microsoft Escel. Vytvořil Institut biostatistiky a analýz, Masarykova univerzita J. Kalina

METODICKÉ LISTY. výstup projektu Vzdělávací středisko pro další vzdělávání pedagogických pracovníků v Sokolově

JavaScript 101. "Trocha života do statických stránek"

Gymnázium, Praha 6, Arabská 14. předmět Programování, vyučující Tomáš Obdržálek. Počítačová hra Fotbalový Manažer. ročníkový projekt.

8 Makra Příklad 4 Excel 2007

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Lekce 12 Animovaný náhled animace kamer

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Transkript:

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST Obor SOČ: 18. Informatika Hry s kostkami v jazyce C# Autor : Jan Havlík Škola : Střední škola spojů a informatiky Tábor, Bydlinského 2474 Kraj : Jihočeský Konzultant : Mgr. Jiřina Bartoňová Tábor 2019

Prohlášení Prohlašuji, že jsem svou práci SOČ vypracoval samostatně a použil jsem pouze prameny uvedené v seznamu na konci práce. Prohlašuji, že tištěná verze a elektronická verze soutěžní práce jsou shodné. Nemám závažný důvod proti zpřístupňování této práce v souladu se zákonem č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon) v platném znění. v Táboře dne 9. 4. 2019

Poděkování Touto cestou bych chtěl poděkovat mé vedoucí Mgr.Jiřině Bartoňové za pomoc a rady při zpracování této práce.

Anotace Cílem práce je vytvoření her, využívajících hrací kostky. Práce popisuje programovací jazyk C#, vývojářské prostředí Visual Studio, řešení grafiky aplikace a řešení jednotlivých her. Výsledek práce slouží jako balíček aplikací s kostkovými hrami pro více hráčů. Klíčová slova Hra s kostkami, jazyk C#, generátor náhodných čísel.

Obsah Úvod... 6 O Jazyce C#... 7 Microsoft Visual Studio... 8 Historie... 8 O Framework... 8 Distribuce... 9 Visual Studio z pohledu uživatele... 9 Vývoj aplikace :... 12 Menu Aplikace... 12 Grafika... 12 Řešení hry přebíjená... 13 Řešení hry přebíjená v kostky... 17 Řešení hry Kostkový poker... 24 Závěr... Chyba! Záložka není definována. Zdroje... 29 5

Úvod Ve své práci jsem se zabýval programováním her, využívajících hrací kostky, v programovacím jazyce C#. Výsledek práce slouží jako balíček aplikací s kostkovými hrami pro více hráčů. Hráči mohou změřit své štěstí, zabavit se, nebo použít vyhodnocení výhry k vlastní sázce. Výsledné hry přebíjená v kostky a kostkový poker spojuje vyhodnocování kombinací pěti kostek. Tato práce popisuje programovací jazyk C#, vývojářské prostředí Visual Studio, řešení grafiky aplikace, řešení hry přebíjená, řešení hry přebíjená v kostky a řešení hry kostkový poker. 6

O jazyce C# Programovací jazyk C# /si: ša:p/ byl vyvinut firmou Microsoft současně s platformou.net Framework v roce 2000. Je založen na programovacích jazycích C++ a Java. Slouží k tvorbě formulářových aplikací ve Windows, databázových programů, webových aplikací a mobilního softwaru. Jazyk C# se vyznačuje jednoduchostí a objektově orientovaným způsobem programování. To znamená, že metody jsou zapouzdřeny s objekty z knihoven. Podobně jako Java obsahuje pouze jednoduchou dědičnost. Od roku 2002 se jazyk dočkal verze C# 7.0 ( poté 7.1, 7.2, a aktuálně 7.3) společně s dalšími verzemi Frameworků a Visual Studia (Visual Studio 2017). Příklady Vývojářského prostředí: Microsoft Visual Studio Oficiální prostředí od firmy Microsoft pro operační systémy Windows a macos. SharpDevelop Open source program pouze pro operační systém Windows. MonoDevelop Podporuje Windows, macos a Linux. Baltík Český edukační programovací nástroj. 7

Microsoft Visual Studio Vývojářské rozhraní pro aplikace s grafickým rozhraním. Například konzolových, mobilních, s webovými službami, nebo aplikací Windows Forms. Tato práce zahrnuje pouze vývoj ve Windows Forms. Historie Microsoft poprvé vydal Visual Studio v roce 1997, za účelem spojení více svých programovacích nástrojů dohromady. Významná změna nastala když Microsoft vydal Visual Studio.NET, v roce 2002. Vývojářské prostředí spravovalo kód za použití.net Framework architektury. Microsoft vyžadoval platformu na základě Windows NT. Programovací jazyk C# byl vyvinut speciálně pro.net Framework. Následovalo odpojení přípony.net od produktového jména Visual Studia a distribuce verzí (aktuálně Visual Studio 2017). O Framework NET Framework lze chápat jako hierarchickou kostru Visual Studia. Automaticky podporuje překlad do více programovacích jazyků firmy Microsoft (Jscript, C++, Visual Basic), ale i dalších dostupných (Boo, IronPython). Překlad do mezijazyka probíhá přes vestavěnou funkci CLS. Virtuální stroj - CLR zajišťuje převod kódu do intermediálního jazyka a do instrukcí fyzického procesoru. Knihovny - Microsoft v.netu dodává kompletní sadu knihoven s prvky a komponenty. Při přenosu aplikace záleží na verzi.net ve Windows. 8

Distribuce Zdarma na oficiálních Microsoft webových stránkách https://visualstudio.microsoft.com/cs/. Instalace s SDK balíčky. IDE Visual Studio pro Operační systémy Windows nebo macos. - Bezplatná edice Community 2017 - Zkušební edice Professional 2017 - Zkušební edice Enterprise 2017 Další distribuce : Visual Studio Code, Azure DevOps a Visual Studio App Center. Visual Studio z pohledu uživatele Připravil jsem si seznámení z pohledu uživatele s vývojářském prostředím Visual Studio Community 2017. Pro vytvoření aplikace po spuštění zvolíme záložku Soubor/Nový(Ctrl+Shift+N), a budeme dotázáni na : - Název naší aplikace (Aplikace) - Umístění dat na disk - Typ C# - volíme možnost Aplikace Windows Forms (.NET Framwork). - automaticky se připojí příslušný nejnovější NET Framework. 9

Při vytvoření vznikne složka s názvem aplikace a do ní všechny soubory projektu. Soubory s příponou.cs jsou zdrojové texty programu v jazyce C#. Jsou ve formátu prostého textu. Dále se ve složce nachází soubor s příponou.sln a.csproj. Představují celek aplikace. Po vytvoření aplikace se spustí Okno designera (Form1). Okno představuje vizuální stránku budoucí aplikace. Oknu budeme upravovat jeho vlastnosti a budeme na něj přidávat funkční prvky ze záložky Zobrazit/ Panel nástrojů (Toolbox). Lze spustit i přes Ctrl+Alt+X. Pravým kliknutím na Okno nebo prvek vybíráme jeho možnost Vlastnosti a zobrazí se sekce Vlastnosti (ikona mechanického klíče) a sekce Události (ikona blesku). 10

Vpravo se nachází Průzkumník řešení, ve kterém vidíme a můžeme otevírat jednotlivé součásti projektu (Design, Kód, Resources ) Připojením události prvku nebo možností Zobrazit/Kód spustíme programovací stránku aplikace. Nástroj IntelliSense integrovaný v Microsoft Visual Studiu, při psaní kódu napovídá programátorovi. Program spustíme možností spustit nebo klávesou F5. Ukáže se běh naší aplikace. Kód je převeden do instrukcí procesoru. 11

Vývoj aplikace : Menu Aplikace Pro řešení více variant her s kostkami bylo třeba zařídit úvodní menu hry. Konkrétně docílení spuštění Okna (Form1), a přes stisknutí tlačítek spustit další samostatná Okna. Přes záložku Projekt zvolíme možnost Přidat formulář systému Windows, a přidělíme jméno (prvnihra). První hra se vytvoří do průzkumníka řešení. Spuštění první hry docílíme přes kliknutí na příslušné tlačítko. Tlačítku (button1) ze sady nástrojů připojíme událost Click, a deklarujeme spuštění první hry. private void button1_click(object sender, EventArgs e) přebíjená prvnihra = new přebíjená(); prvnihra.showdialog(); Grafika Menu hry doplňuje jednoduchá grafika tvořená v rastrovém programu GIMP. Přes najetí kurzoru myši na určitý prvek, změníme obrázek pozadí, a následným opuštěním kurzoru myši zase změníme obrázek na původní. Pokud budou obrázky pozadí skoro stejná, docílíme vizuálního dojmu animace. Událost MouseHover a MouseLeave za účelem animace se běžně vyskytuje na webech nebo webových hrách využívající přehrávač Flash Player. Pro usnadnění práce jsem si na webu https://avachara.com/portrait/vytvořil postavičku se třemi rozdílnými výrazy obličeje, a v GIMPu vytvořil tři pozadí s krupiérem v kasínu. 12

Obrázky musí být vloženy do složky Resources, a deklarovány jako členská proměnná v Oknu menu. Následně deklarujeme změnu pozadí tlačítku přes událost MouseHover/MouseLeave. // neutrální postavička Image menu = Properties.Resources.menu2; // smějící se postavička Image úsměv = Properties.Resources.menu_smile; // zlobící se postavička Image odchod= Properties.Resources.exit; private void button1_mousehover(object sender, EventArgs e) BackgroundImage =úsměv; private void button1_mouseleave(object sender, EventArgs e) BackgroundImage = menu; Řešení hry přebíjená Přebíjená je určená pro dva hráče za jedním počítačem. Cílem hry je naházet větší skóre na kostce než soupeř za určitý počet kol. Hra sloužila také pro osobní osvojení práce s náhodou. Pro řešení házení kostky jsem použil příklad obrázková kostka ze třetího ročníku. Princip závisí na překreslování obrázků stran kostky na souřadnice plochy OknaProgramu řízené konstrukcí Switch, a aktivací události tlačítka kliknutí. Ve složce Resources jsou vloženy obrázky stran kostky a obrázky pozadí z menu). Pro začátek deklarujeme členské proměnné obrázků kostek obou hráčů, proměnnou pro náhodu, skóre obou hráčů a pro libovolný počet kol. Image obrázek = Properties.Resources.jedna; Image obrázek2 = Properties.Resources.jedna; Image menu = Properties.Resources.menu2; Image smile = Properties.Resources.menu_smile; Random náhoda = new Random(); 13

//pole skóre 1 int skóre1 = 0; //pole skóre 2 int skóre2 = 0; int početkol; Pro vykreslování obrázků je třeba Oknu přidělit událost Paint. Deklarujeme kreslící plochu a vykreslení obrázku na vhodné souřadnice Okna a vhodnou velikost. private void přebíjená_paint(object sender, PaintEventArgs e) Graphics kp = e.graphics; kp.drawimage(obrázek, 10, 20, 260, 260); kp.drawimage(obrázek2, 490, 20, 260, 260); Libovolný počet kol řešíme nutností při spuštění zadat počet kol do pole (text- Box3) a uložením tlačítkem (button3). Až poté se odemkne první hráč. private void button3_click(object sender, EventArgs e) button3.enabled = false; button1.enabled = true; textbox3.enabled = false; try početkol = Convert.ToInt32(textBox3.Text); if (početkol <= 0) MessageBox.Show("Chyba!"); button3.enabled = true; textbox3.enabled = true; catch MessageBox.Show("Chyba!"); button3.enabled = true; textbox3.enabled = true; return; 14

Střídání hráčů docílíme zablokováním a odblokováním házecích tlačítek. Začínat bude první hráč. Házení je řešeno zmíněním Switchem pro oba hráče zvlášť, a k možnostem přičítáme příslušné body skóre do pole (textbox) reprezentující stav skóre. Příkaz Refresh zajištuje překreslení na plochu Okna. // Házení prvního hráče private void button1_click(object sender, EventArgs e) button1.enabled = false; button2.enabled = true; //náhoda pro rozmezí se píše o jedna větší než horní mez int číslo = náhoda.next(1, 7); switch (číslo) case 1: obrázek = Properties.Resources.jedna; //přičítání skóre skóre1 += 1; textbox1.text = skóre1.tostring(); break; case 2: obrázek = Properties.Resources.dva; skóre1 += 2; textbox1.text = skóre1.tostring(); break; case 3: obrázek = Properties.Resources.tri; skóre1 += 3; textbox1.text = skóre1.tostring(); break; case 4: obrázek = Properties.Resources.ctyri; skóre1 += 4; textbox1.text = skóre1.tostring(); break; case 5: obrázek = Properties.Resources.pet; skóre1 += 5; textbox1.text = skóre1.tostring(); break; case 6: obrázek = Properties.Resources.sest; skóre1 += 6; textbox1.text = skóre1.tostring(); break; Refresh(); 15

Totožně řešíme házení pro druhého hráče. Odečítání kol a následnou výhru stačí řešit pouze u druhého hráče v události Click pro button2. Pokud počet kol dovrší nuly, vyvolá se zpráva (MessageBox), který hráč vyhrál podle výše skóre. Hned poté následuje dotaz pro opakování hry, kdy se resetují všechny pole, a zase se zpřístupní pouze pole pro zadání počtu kol. Můžeme také zvolit, že znovu hrát nechceme a vrátíme se zpátky do menu. Grafika hry je řešena stejně jako v menu. //řešení výhry početkol--; textbox3.text = početkol.tostring(); if (početkol == 0) if (skóre1 > skóre2) MessageBox.Show(" Vyhrál hráč 1"); if (skóre2 > skóre1) MessageBox.Show("Vyhrál hráč 2"); DialogResult result = MessageBox.Show("Nová hra?", "", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) button1.enabled = false; button2.enabled = false; button3.enabled = true; textbox3.enabled = true; textbox3.text = ""; skóre1 = 0; skóre2 = 0; textbox1.text = ""; textbox2.text = ""; else if (result == DialogResult.No) this.close(); 16

Řešení hry přebíjená v kostky Další hra zdokonaluje první řešení přebíjená. Pro zajímavější ohodnocení hodnoty kostky, použijeme pravidla her V kostky a kostkových Vrchcábů. Budeme házet pět kostek a výsledné kombinace odhodnocovat podle pravidel, které oceňují malou pravděpodobnost. Nejvyšší možná kombinace je pět stejných kostek. Hodnoty kombinací zakreslíme do grafiky pozadí z menu, a budou po celou dobu hraní k dispozici. Kvůli enormnímu počtu kombinací je třeba identifikace kombinací řešit přes Pole. Pole jsou datová struktura proměnných stejného typu a rozlišující se indexováním. Z principu Pole představují domečky pro příslušné hodnoty. Pole se hojně používají při vytváření menších logických her, nebo vlastních databázových programů. Pole pro kostky hráče jedna a hráče dva vytvoříme jako členskou proměnnou. 17

//kostky 1. hráče - pole o 6 prvcích naplněné nulami - prvek s indexem 0 se nevyužívá int[] kostkyhrac1 = new int[] 0, 0, 0, 0, 0, 0 ; //kostky 2. hráče int[] kostkyhrac2 = new int[] 0, 0, 0, 0, 0, 0 ; Na plochu vykreslujeme celkem deset kostek, jejich obrázky zase deklarujeme jako členské společné. Další členské proměnné zůstávají z minulého řešení. //kostky hráče č.1 Image obrázek1 = Properties.Resources.jedna; Image obrázek2 = Properties.Resources.jedna; Image obrázek3 = Properties.Resources.jedna; Image obrázek4 = Properties.Resources.jedna; Image obrázek5 = Properties.Resources.jedna; // kostky hráče č.2 Image obrázek6 = Properties.Resources.jedna; Image obrázek7 = Properties.Resources.jedna; Image obrázek8 = Properties.Resources.jedna; Image obrázek9 = Properties.Resources.jedna; Image obrázek10 = Properties.Resources.jedna; Random náhoda = new Random(); int skorehrac1 = 0; int skorehrac2 = 0; int početkol; Při Události Click deklarujeme kostkám hodnoty od jedné do šesti, a náhodu pro všech pět kostek. Řešíme konstrukci Switch pro každou kostku toto stejně jako ve hře přebíjená, ale řešíme ho pro příslušné vytvořené Pole, a přidáváme textové vypsání hodnoty do pole (textbox) nad vykreslenou kostku. //losování kostek for (int i = 1; i < 6; i++) kostkyhrac1[i] = náhoda.next(1, 7); 18

// kostka 1 switch (kostkyhrac1[1]) case 1: obrázek1 = Properties.Resources.jedna; textbox3.text = "jedna".tostring(); break; case 2: obrázek1 = Properties.Resources.dva; textbox3.text = "dva".tostring(); break; case 3: obrázek1 = Properties.Resources.tri; textbox3.text = "tři".tostring(); break; case 4: obrázek1 = Properties.Resources.ctyri; textbox3.text = "čtyři".tostring(); break; case 5: obrázek1 = Properties.Resources.pet; textbox3.text = "pět".tostring(); break; case 6: obrázek1 = Properties.Resources.sest; textbox3.text = "šest".tostring(); break; Kód obsahuje totožné vypsání pro další čtyři kostky. Příkaz Refresh(); vkládáme až pod pátou kostku, pro vykreslení všech kostek najednou. Dále pro událost Click vytvoříme další Pole kombinací - četností kostek, pro naházené hodnoty. // pole četností - pole o 7 prvcích, prvek s indexem 0 se nevyužívá int[] cetnosti = new int[] 0, 0, 0, 0, 0, 0, 0 ; foreach (int k in kostkyhrac1) cetnosti[k]++; Nyní bychom mohli deklarovat podmínky pro kombinace kostek. Výsledkem by ovšem bylo přebíjení logicky shodných kombinací (dvojic s postupkami a Fullhousem). Řešením je lokální logická proměnná bool, nastavena na hodnotu false. Budeme se na ni odkazovat jako na podmínku pro vyhodnocení kombinace, a následné přepnutí na hodnotu true, čímž splní svou podmínku, a nebude hledat další správně vyhodnocenou kombinaci (například dvojici). 19

//logická proměnná - jefigura nastane vždy, ale následně se správně vyhodnotí podle deklarace bool jefigura = false; //Vrchcáby - projde pole četností a hledá 5 if (!jefigura) for (int i = 1; i <= 6; i++) if (cetnosti[i] == 5) textbox13.text = "vrchcáby"; skorehrac1 += 50; jefigura = true; //Velká postupka if ((!jefigura) && (cetnosti[1] == 1) && (cetnosti[2] == 1) && (cetnosti[3] == 1) && (cetnosti[4] == 1) && (cetnosti[5] == 1)) textbox13.text = "velká postupka"; skorehrac1 += 40; jefigura = true; if ((!jefigura) && (cetnosti[2] == 1) && (cetnosti[3] == 1) && (cetnosti[4] == 1) && (cetnosti[5] == 1) && (cetnosti[6] == 1)) skorehrac1 += 40; textbox13.text = "velká postupka"; jefigura = true; //malá postupka - >= 1 je proto, že jedno z čísel může být 2krát - např 1 2 2 3 4 if ((!jefigura) && (cetnosti[1] >= 1) && (cetnosti[2] >= 1) && (cetnosti[3] >= 1) && (cetnosti[4] >= 1)) textbox13.text = "malá postupka"; skorehrac1 += 30; jefigura = true; if ((!jefigura) && (cetnosti[2] >= 1) && (cetnosti[3] >= 1) && (cetnosti[4] >= 1) && (cetnosti[5] >= 1)) textbox13.text = "malá postupka"; skorehrac1 += 30; jefigura = true; 20

if ((!jefigura) && (cetnosti[3] >= 1) && (cetnosti[4] >= 1) && (cetnosti[5] >= 1) && (cetnosti[6] >= 1)) textbox13.text = "malá postupka"; skorehrac1 += 30; jefigura = true; //čtyři stejné if (!jefigura) for (int i = 1; i <= 6; i++) if (cetnosti[i] == 4) textbox13.text = "čtyři stejné"; skorehrac1 += 4 * i; jefigura = true; // tři stejné nebo full house - když najde 3, tak hledá v celém poli ještě 2 if (!jefigura) for (int i = 1; i <= 6; i++) if (cetnosti[i] == 3) //dvojice je číslo kde je 2 int dvojice = 0; for (int j = 1; j <= 6; j++) if (cetnosti[j] == 2) dvojice = j; if (dvojice > 0) textbox13.text = "Full house"; skorehrac1 += 2 * dvojice + 3 * i; jefigura = true; else textbox13.text = "tři stejné"; skorehrac1 += 3 * i; jefigura = true; // dvě stejné nebo dvakrát dvě stejné - jako full house nebo tři - jen druhá dvojice se nehledá od začátku ale od první dvojice dál if (!jefigura) for (int i = 1; i <= 6; i++) if (cetnosti[i] == 2) //druhadvojice je číslo kde je další 2 int druhadvojice = 0; for (int j = i + 1; j <= 6; j++) if (cetnosti[j] == 2) druhadvojice = j; 21

if (druhadvojice > 0) textbox13.text = "dva páry"; skorehrac1 += 2 * druhadvojice + 2 * i; jefigura = true; else textbox13.text = "dvě stejné"; skorehrac1 += 2 * i; jefigura = true; //když najdeme dvojici a ověříme druhou dvojici, tak i nasadíme víc než 5, abychom dál nehledali i = 10; //přepis skóre v textboxu textbox1.text = skorehrac1.tostring(); if (!jefigura) textbox13.text = "nic"; Totožné řešení pro házení druhého hráče, ale řešíme u něj výhru. //řešení výhry početkol--; textbox15.text = početkol.tostring(); if (početkol == 0) if (skorehrac1 > skorehrac2) MessageBox.Show(" Vyhrál hráč 1"); if (skorehrac2 > skorehrac1) MessageBox.Show("Vyhrál hráč 2"); DialogResult result = MessageBox.Show("Nová hra?", "", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) 22

//řešení restart, odemykáme pouze button3 a čistíme pole a skóre button1.enabled = false; button2.enabled = false; button3.enabled = true; textbox15.enabled = true; textbox15.text = ""; textbox1.text = ""; textbox2.text = ""; textbox3.text = ""; textbox4.text = ""; textbox5.text = ""; textbox6.text = ""; textbox7.text = ""; textbox8.text = ""; textbox9.text = ""; textbox10.text = ""; textbox11.text = ""; textbox12.text = ""; textbox13.text = ""; textbox14.text = ""; else if (result == DialogResult.No) this.close(); Grafiku opět řešíme jako v menu, a při spuštění odemykáme pouze prvky k zadání počtu kol. 23

Řešení hry Kostkový poker Další hrou hodnotící kombinace hozených kostek může být zábavnější a svižnější Kostkový poker. Věrnou předlohou rozhraní hry, byla minihra z polské počítačové hry Zaklínač. Pokud hráči při prvním kole hodí stejnou kombinaci, hra se opakuje. V každém kole má ovšem prohrávající hráč možnost odvety, a to přehozením soupeřovi kombinace. Muže sice hodit všemi kostkami znovu, klíčové je ovšem volit kostky, které už v kombinaci přebývají nebo chybí. Hráč s vyšší kombinací vyhrává kolo, a hráč s třemi vyhranými koly vyhrává celou hru. V ideálním případě řešení by se měli hráčům při selhání přehození soupeře odečítat vsazené peníze určené na začátku. 24

Celé Okno a celé první kolo řešíme stejně jako v řešení Přebíjená v kostky. Priority kombinací schováme za fiktivní indexovací skóre. Pořadí kombinací budou napsány na Pozadí grafiky hry. Upravíme ovšem deklaraci výhry. Při prohrách hráčů, odemykáme viditelnost opravných házejících tlačítek, jejichž vlastnost Visible je na začátku nastavena na false. Deklarujeme také Remízu a následný restart kola, který maže všechno, kromě pole pro počet výher. // výhra první kolo // vyhraje hráč 1, hráč 2 chce odvetu if (skorehrac1 > skorehrac2) MessageBox.Show(" Vyhrál hráč 1"); //opravné hody hráče 2 visible = true button2.enabled = false; button1.enabled = false; button3.visible = true; button4.visible = true; button5.visible = true; button6.visible = true; button7.visible = true; // odešle výsledek button8.visible = true; // vyhraje hráč 2, hráč 1 chce odvetu if (skorehrac2 > skorehrac1) MessageBox.Show("Vyhrál hráč 2"); //opravné hody hráče 1 visible = true button1.enabled = false; button2.enabled = false; button9.visible = true; button10.visible = true; button11.visible = true; button12.visible = true; button13.visible = true; // odešle výsledek button14.visible = true; if (skorehrac1 == skorehrac2) MessageBox.Show("Remíza"); button1.enabled = true; textbox13.text = ""; textbox14.text = ""; textbox1.text = ""; textbox2.text = ""; skorehrac1 = 0; skorehrac2 = 0; 25

Opravná tlačítka mají metodu Click a mají přiřazený Switch pro příslušné Pole. Po stisknutí se zablokují, aby hráč nelosoval jemu přívětivou kombinaci. Před příkaz Refresh měníme proměnnou skóre na nulu, aby se nám přepočítalo, nikoliv přičítalo a následně vyhodnotilo kombinaci. Pole kombinací musíme zkopírovat pro každé tlačítko, z důvodu lokální proměnné. Potvrzovací šesté opravné tlačítko opět zmizí tlačítka, a vyhodnotí hráčovu odvetu. Pokud hráč v odvetném hodu hráče nepřehodil, nebo hodil stejnou hodnotu, prohrál a soupeř si přičítá výhru. Při úspěšném odvetném hodu odemyká odvetné tlačítka soupeře. // Konec opravného hodu hráče 2 private void button8_click(object sender, EventArgs e) button2.enabled = false; button3.visible = false; button3.enabled = true; button4.visible = false; button4.enabled = true; button5.visible = false; button5.enabled = true; button6.visible = false; button6.enabled = true; button7.visible = false; button7.enabled = true; button8.visible = false; // nepřehodil, Vyhrál první if (skorehrac2 <= skorehrac1) MessageBox.Show(" Kolo vyhrál hráč 1"); //skóre plus početvýher1 += 1; textbox3.text = početvýher1.tostring(); //konec hry if (početvýher1 == 3) MessageBox.Show("Vyhrál hráč 1"); DialogResult result = MessageBox.Show("Nová hra?", "", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) button1.enabled = true; textbox13.text = ""; textbox14.text = ""; textbox1.text = ""; textbox2.text = ""; skorehrac1 = 0; skorehrac2 = 0; 26

početvýher1 = 0; početvýher2 = 0; textbox3.text = ""; textbox4.text = ""; else if (result == DialogResult.No) this.close(); //reset kromě skore button1.enabled = true; textbox13.text = ""; textbox14.text = ""; textbox1.text = ""; textbox2.text = ""; skorehrac1 = 0; skorehrac2 = 0; // přehodil, Vyhrál druhý if (skorehrac2 > skorehrac1) //odemkne opravný buttony hráče 1 button9.visible = true; button10.visible = true; button11.visible = true; button12.visible = true; button13.visible = true; button14.visible = true; Totožně řešíme opravná a potvrzovací tlačítka pro prvního hráče. 27

Závěr Ve své práci jsem se zabýval programováním her, využívajících hrací kostky, v programovacím jazyce C#. Při tvorbě aplikace jsem postupoval od nejjednodušší hry, tedy přebíjené, k složitejším hrám, v kterých již bylo nutné vytvořit algoritmus pro vyhledávání figur hozených pěti kostkami. Všechny tři vytvořené hry jsou určené pro dva hráče. V budoucnu bych rád zkusil napsat hru hráče proti počítači. 28

Zdroje Radek Vystavěl, Moderní programování učebnice pro začátečníky, ISBN 978-80-903951-8-3 Radek Vystavěl, Moderní programování učebnice pro středně pokročilé, ISBN 978-80-903951-2-1 Avachara Self-Portrait Maker - Website to Create a Cartoon Character of Yourself. Avatar Character Maker Avachara [online]. Dostupné z: https://avachara.com/portrait/ Referenční dokumentace jazyka Visual Basic Microsoft Docs. [online]. Dostupné z: https://docs.microsoft.com/cs-cz/dotnet/visual-basic/language-reference/ Příloha obsah vloženého CD Text práce ve formátu.pdf Složka s kompletním zdrojovým kódem aplikace Samostatně spustitelná aplikace 29