načítání...
nákupní košík
Košík

je prázdný
a
b

E-kniha: Programujeme hry v jazyce C# - Petr Roudenský; Mokhtar M Khorshid

Programujeme hry v jazyce C#

Elektronická kniha: Programujeme hry v jazyce C#
Autor: ;

Chcete se naučit programovat, ale všechny příručky jsou zbytečně složité? Láká vás vytvoření vlastní hry, ale nevíte, jak na to? Naučte se jazyk C# při vytváření her – ... (celý popis)
Titul je skladem - ke stažení ihned
Médium: e-kniha
Vaše cena s DPH:  189
+
-
6,3
bo za nákup

hodnoceni - 76.1%hodnoceni - 76.1%hodnoceni - 76.1%hodnoceni - 76.1%hodnoceni - 76.1% 93%   celkové hodnocení
6 hodnocení + 0 recenzí

Specifikace
Nakladatelství: » Computer press
Dostupné formáty
ke stažení:
PDF
Upozornění: většina e-knih je zabezpečena proti tisku
Médium: e-book
Počet stran: 248
Rozměr: 23 cm
Úprava: ilustrace
Vydání: Vyd. 1.
Jazyk: česky
ADOBE DRM: bez
ISBN: 978-80-251-3355-2
Ukázka: » zobrazit ukázku
Popis / resumé

Zábavný výklad o jazyku C# na konkrétních příkladech devíti her v něm naprogramovaných. Publikace naučí, jak zpracovat vstupy pro hráče, navrhnout logiku a hlavní smyčku hry, počítat hráčovo skóre apod.

Popis nakladatele

Chcete se naučit programovat, ale všechny příručky jsou zbytečně složité? Láká vás vytvoření vlastní hry, ale nevíte, jak na to? Naučte se jazyk C# při vytváření her – prakticky, bez zbytečné teorie a s plně funkčními výsledky.

Dvojice autorů vás zábavnou formou výuky seznámí se základy C#. Každá z devíti kapitol představuje ucelený projekt, na kterém se postupně naučíte pracovat se základními i pokročilými konstrukcemi jazyka. Kniha obsahuje minimum teorie, veškeré nové informace jsou čtenáři předkládány na praktické bázi v podobě nové funkčnosti právě rozpracované hry. Při vývoji postupujete krok za krokem a vytváříte hru zcela od začátku až po hotový výsledek.

Publikace vás mimo jiné naučí, jak:
* Korektně zpracovat všechny možné vstupy od hráče
* Navrhnout logiku a hlavní smyčku hry
* Průběžně počítat hráčovo skóre
* Vytvářet nepřátele a modelovat jejich chování
* Zobrazovat a pracovat s herní mapou
* Pohybovat s herní postavou v prostředí hry


O autorech:
Petr Roudenský pracuje pro přední světovou IT společnost Logica, externě spolupracuje v oblasti počítačových her s tuzemskou společností Conquest Entertainment a.s. Je autorem několika her pro děti, knihy Vytváříme PC hry. V knize se podílel na většině textu a konceptu aplikací.

Mokhtar M. Khorshid pracuje jako výzkumník v oboru umělé inteligence na univerzitě v Albertě. Je držitelem Microsft Certified Professional, s technologií .NET pracuje od roku 2004. Jako zkušený vývojář s praxí v oblasti počítačových her se podílel se na úpravách textu a je autorem ukázek kódu.

Předmětná hesla
Zařazeno v kategoriích
Petr Roudenský; Mokhtar M Khorshid - další tituly autora:
Recenze a komentáře k titulu
Zatím žádné recenze.


Ukázka / obsah
Přepis ukázky

Petr Roudenský, Mokhtar M. Khorshid

Programujeme hry v jazyce C#

Computer Press, a. s.

Brno

2011


Programujeme hry v jazyce C#

Petr Roudenský, Mokhtar M. Khorshid

Computer Press, a. s., 2011. Vydání první.

Grafika her: Tomáš Kopecký

Odborná spolupráce a testy: Martin Kačmařík

Computer Press, a. s.,

Holandská 3, 639 00 Brno

Objednávky knih:

http://knihy.cpress.cz

distribuce@cpress.cz

tel.: 800 555 513

ISBN 978-80-251-3355-2

Prodejní kód: K1890

Vydalo nakladatelství Computer Press, a. s., jako svou 3983. publikaci.

© Computer Press, a. s. Všechna práva vyhrazena. Žádná část této publikace nesmí být kopírována arozmnožována za účelem rozšiřování v jakékoli formě či jakýmkoli způsobem bez písemného souhlasu vydavatele.

Jazyková korektura: Alena Láníčková

Sazba: Zuzana Šindlerová

Rejstřík: Daniel Štreit

Obálka: Martin Sodomka

Komentář na zadní straně obálky: Martin Herodek

Technická spolupráce: Jiří Matoušek,

Zuzana Šindlerová, Dagmar Hajdajová

Odpovědný redaktor: Martin Herodek

Technický redaktor: Jiří Matoušek

Produkce: Petr Baláš


Obsah

Úvodem ..................................................................................... 9

Základní znalosti o programovacích jazycích ......................................................... 10

Jazyk C# a platforma .NET .............................................................................................. 10

Visual C# 2010 Express ..................................................................................................... 11

Instalace platformy .NET 4.0 a Visual C# 2010 Express ....................................... 11

Zdrojový kód aplikací ....................................................................................................... 12

Zpětná vazba od čtenářů ................................................................................................ 12

Errata ...................................................................................................................................... 13

Kapitola 1

Karetních „21“ ......................................................................... 15

Založení konzolové aplikace ......................................................................................... 16

Kdo má jaké karty aneb proměnné ............................................................................ 18

Výpis textu na obrazovku ............................................................................................... 20

Čtení vstupu od uživatele ............................................................................................... 20

Rozhodování příkazem if ................................................................................................ 22

Řízení toku programu příkazem goto ........................................................................ 24

Podmínky pro určení vítěze ........................................................................................... 25

Ošetření chybného vstupu ............................................................................................. 28

Kompletní kód .................................................................................................................... 28

Ladění aplikace ................................................................................................................... 29

Užitečné tipy ........................................................................................................................ 30

Shrnutí ................................................................................................................................... 31


4

Obsah

Kapitola 2

Hádání slov („šibenice“) ......................................................... 35

Proměnné pro počítadla a hádané slovo .................................................................. 36

Práce se znakem aneb typ char .................................................................................... 37

Práce s polem ...................................................................................................................... 37

Naplnění pole pomocí cyklu for ................................................................................... 38

Pravda či nepravda aneb proměnná typu bool ...................................................... 40

Smyčka hry pomocí cyklu while................................................................................... 41

Vypsání maskovaného slova a zprávy

pro uživatele...................................................................................................................... 42

Zadání písmene uživatelem ........................................................................................... 42

Porovnávání písmen a odkrývání slova ..................................................................... 44

Přerušení herní smyčky aneb konec hry ................................................................... 45

Určení výsledku hry .......................................................................................................... 46

První vylepšení – hádání více slov ............................................................................... 46

Druhé vylepšení – skóre za celou hru ........................................................................ 48

Shrnutí ................................................................................................................................... 50

Kapitola 3

Textová dobrodružná hra ...................................................... 53

Postavy ve hře aneb úvod do použití tříd a objektů ............................................ 54

Přístup k datovým složkám třídy ................................................................................. 56

Nastavování atributů postavy ....................................................................................... 57

Nepřátelé a generátor náhodných čísel .................................................................... 60

Úvod k použití metod aneb výpis dovedností ........................................................ 61

Návratový typ metod ....................................................................................................... 62

Parametry metod ...............................................................................................................63

Lokální proměnné ............................................................................................................. 66

Nastavení atributů postav pomocí konstruktoru .................................................. 68

Výpis nepřátel pomocí příkazu foreach ..................................................................... 71

Metoda pro výpočet síly útoku..................................................................................... 72

Souboj s nepřáteli .............................................................................................................. 73

Určení vítěze a pokračování hry ................................................................................... 77


5

Obsah

První vylepšení – nerozlišování velkých a malých písmen ................................. 77

Druhé vylepšení – změna barvy textu aneb výčty ................................................ 78

Shrnutí ................................................................................................................................... 80

Kapitola 4

Jednoduchá hra s pohyblivými prvky .................................. 83

Než začnete – jmenné prostory ................................................................................... 84

Zobrazení a výběr položek v hlavní nabídce ........................................................... 87

Úvod do statických členů a tříd .................................................................................... 91

Zpracování výstupu hlavní nabídky............................................................................ 93

Herní mapa aneb dvourozměrné pole ...................................................................... 96

Zobrazení mapy při startu hry ...................................................................................... 98

Vytváření překážek, předmětů a východu na mapě .......................................... 100

Příprava herní smyčky ................................................................................................... 102

Souřadnice hráče a použití vlastností ..................................................................... 103

Ovládání pohybu hráče ................................................................................................ 106

Zobrazování hráče na mapě a smyčka hry ............................................................ 107

Zobrazení informací o počtu předmětů ................................................................. 109

Sbírání předmětů, výhra a prohra ............................................................................ 109

Shrnutí ................................................................................................................................ 111

Kapitola 5

Pexeso .................................................................................... 113

Rozvržení aplikace a úvod do struktur ................................................................... 114

Hlavní nabídka ................................................................................................................. 116

Herní obrazovka .............................................................................................................. 117

Rozdávání karet aneb úvod do kolekcí ................................................................... 118

Zobrazení herní plochy ................................................................................................. 122

Smyčka hry – výběr a otáčení karet ......................................................................... 123

Výhra a ukončení hry ..................................................................................................... 128

Ošetření chybného vstupu aneb základy správy výjimek ............................... 128

Vlastní nastavení hry aneb přetěžování metod ................................................... 131

Shrnutí ................................................................................................................................ 134


6

Obsah

Kapitola 6

Adresář kontaktů .................................................................. 137

Struktura programu ....................................................................................................... 138

Hlavní nabídka ................................................................................................................. 140

Přidávání záznamů aneb hodnotové

a referenční typy ........................................................................................................... 141

Zobrazení všech záznamů ........................................................................................... 144

Úprava záznamů aneb typ Object a přetypování ............................................... 145

Ošetření výjimek ............................................................................................................. 147

Vyhledávání záznamů ................................................................................................... 147

Operátory is a as aneb jak přetypovat bezpečně ............................................... 148

Co je přetěžování operátorů ....................................................................................... 150

Shrnutí ................................................................................................................................ 151

Kapitola 7

Jednoduchý editor obrázků ................................................ 153

Založení grafické aplikace Windows Forms ......................................................... 154

Tvorba uživatelského rozhraní ................................................................................... 155

Klíčové slovo partial aneb částečné třídy .............................................................. 159

Dialog otevření souboru .............................................................................................. 160

Vykreslení obrázku na plochu aplikace .................................................................. 164

Programování efektu inverze barev ......................................................................... 165

Zesvětlení a ztmavení obrázku .................................................................................. 167

Efekt rozmazání ............................................................................................................... 168

Výběr efektů aneb použití delegátů ........................................................................ 170

Základní použití lambda výrazů ................................................................................ 172

Přidání efektů převrácení obrázku ........................................................................... 175

Uložení obrázku............................................................................................................... 177

Shrnutí ................................................................................................................................ 178


7

Obsah

Kapitola 8

Grafická hra s bludištěm a pohybem překážek ................. 181

Vytvoření aplikace a základní nastavení okna formuláře ................................ 183

Přidávání zdrojů do projektu ...................................................................................... 183

Vytvoření mapy a její vykreslení ............................................................................... 186

Zobrazení postavy hráče .............................................................................................. 191

Pohyb hráče po mapě ................................................................................................... 193

Zlepšení vykreslování grafiky ..................................................................................... 196

Vykreslení textu aneb počítadlo kroků a předmětů .......................................... 196

Posunování překážek a prokopávání sousedních políček ............................... 197

Padání překážek aneb práce s událostmi .............................................................. 199

Otáčení hráče ve směru pohybu ............................................................................... 204

Shrnutí ................................................................................................................................ 207

Kapitola 9

Vesmírná střílečka ................................................................ 209

Struktura aplikace a tvorba hlavní nabídky .......................................................... 211

Třídy pro herní objekty aneb úvod do dědičnosti ............................................. 219

Vytváření odvozených tříd .......................................................................................... 222

Vytvoření herní smyčky ................................................................................................ 229

Střelba hráče ..................................................................................................................... 233

Zjišťování kolizí ................................................................................................................ 234

Generování nepřátel ...................................................................................................... 236

Rozhraní ............................................................................................................................. 237

Shrnutí ................................................................................................................................ 238

Rejstřík .................................................................................. 241



Úvodem

O programování v jazyce C# dnes naleznete na trhu řadu knih, ať jste úplný začátečník, pokročilý

nebo jen přecházíte z jiného programovacího jazyka. Zcela pochopitelně jsou tak na místě otázky,

čím se tato kniha odlišuje a co vám může nabídnout oproti ostatním. Na to by vám měly odpovědět

následující odstavce.

Knihy zaměřené na programování v určitém programovacím jazyce používají obvykle velmiteoretic

ký výklad, doplněný většinou abstraktními příklady. Tento způsob výkladu sice umožňuje seznámit

čtenáře s daným programovacím jazykem v požadované míře, avšak často bohužel jen málov rovi

ně skutečného využití. Některým, především zkušenějším, čtenářům takový výklad vyhovuje, jiným

může připadat nedostatečný a další odradí přílišnou abstrakcí ukázek, které možná nejlépe popisují

daný problém, ale čtenáři prostě není dané řešení či použití zřejmé.

Tato kniha naopak přistupuje k programování v jazyce C# především tak, aby bylo pro čtenáře zábavné.

A protože začínající programátoři rádi vidí výsledky svého snažení, je kniha uspořádána tak, že každá

kapitola popisuje tvorbu nezávislé funkční aplikace – většinou hry – od prvotního návrhu přes, popis

funkčnosti jednotlivých částí až po kompletní realizaci. Začnete prostými textovými aplikacemia bude

te pokračovat přes vlastní editor obrázků až po jednoduché grafické hry v prostředí Windows Forms.

S  každou kapitolou se tak budete více seznamovat s  jazykem C#, průběžně (v  kontextu vyvíjené

aplikace) procvičovat získané vědomosti a v neposlední řadě se také naučíte základy řešení různých

problémů, které s programováním obecně souvisí. V pozdějších kapitolách bude pozornostvěnová

na také technologii Windows Forms a tvorbě grafického uživatelského rozhraní. Je zřejmé, že kvůli

návaznosti výkladu je třeba číst kapitoly v knize tak, jak jsou uspořádány.

Nemusíte se bát, že látka probraná v jedné kapitole bude v kapitole následující brána jakosamozřej

most – některé důležité pojmy či postupy jsou použity a příslušně vysvětleny u více příkladůrůz

ným způsobem.

Jak už obsah a forma této knihy napovídají, je určena především začátečníkům v jazyce C#, ale také

těm, kteří dosud nikdy v žádném programovacím jazyce nepracovali. Z tohoto důvodu mohoupokro

čilejším programátorům přijít některá řešení použitá v jednotlivých aplikacích jako neefektivní či

nepříliš vhodná, ovšem jinak by nebylo možné zachovat koncept knihy. Díky tomuto postupu se kód

zlepšuje průběžně spolu s vašimi znalostmi, kapitolu za kapitolou.

Vzhledem k rozsahu a tématu tato kniha samozřejmě nepokrývá zdaleka všechny možnostia vlast

nosti jazyka C#, což ani nebylo jejím cílem. Aplikace v každé kapitole obsahuje vždy některé nové

prvky, konstrukce či pojmy, avšak samozřejmě ne vždy bylo možné začlenit je smysluplně do jejího

kódu, proto jsou vysvětleny na samostatných, jednoduchých příkladech.

Způsob výkladu je přizpůsoben účelu knihy: snažili jsme se minimalizovat používání technických termínů

či odborných názvů a teoretických příkladů a místy jsme si dovolili dopustit se mírných zjednodušení.


10

Úvodem

Po  prostudování této knihy budete mít dobrý přehled o  jazyce C# a  práci ve  Visual Studio 2010

Ex press. Budete mít již také nezanedbatelné zkušenosti s praktickým využitím jazyka C#. To vše vám

poslouží jako dobrý základ pro prohlubování nabytých znalostí za pomoci literatury propokroči

lejší a pokročilé programátory.

Základní znalosti o programovacích jazycích

Ještě před samotným představením jazyka C# je vhodné si v krátkosti něco říct o programovacích

jazycích obecně, což vám objasní některé pojmy používané dále v této knize.

Počítačový program je posloupnost určitých příkazů, pomocí níž programátor sděluje počítači, co

má provést s daty. Při zpracování je program spolu s potřebnými daty uložen v tzv. operační paměti,

ke které může procesor rychle přistupovat a jejíž obsah je pouze dočasný.

Informace v operační paměti se udržují ve formě bitů – základních jednotek, které mohou nabývat pouze

hodnoty 0 a 1. Běžně však budete pracovat s jednotkou, která se označuje jako byte (bajt) a která je tvořena

uskupením osmi bitů. Jeden byte proto může nabývat hodnoty od 0 do 255, tedy celkem 256 hodnot (2

8

).

Procesor jako hlavní výpočetní jednotka provádí s daty různé operace, ovšem jde pouze o čísla, neboť

nic jiného nemůže být v paměti uloženo. Aby mohl procesor zpracovávat i příkazy, musí i ty býtvyjá

dřeny čísly, přičemž tomuto způsobu vyjádření instrukcí se říká strojový kód.

Protože programovat ve strojovém kódu je velice obtížné, existují tzv. vyšší programovací jazyky, které

umožňují zápis kódu pro člověka srozumitelným způsobem, tedy s  vyšší mírou abstrakce. Z  řady

vyšších programovacích jazyků lze jmenovat například C, C++, Javu, Basic a pochopitelně také C#.

Jak bylo uvedeno, procesor zpracovává strojový kód, takže program zapsaný ve vyššímprogramova

cím jazyce samozřejmě nemůže provést. Jednou z možností je tak nechat program přeložitdo stro

jového kódu – zkompilovat, což za vás udělá program zvaný kompilátor (překladač). Klasickýmpří

kladem kompilovaného jazyka je C++.

Ovšem kromě překladu do strojového kódu existuje také tzv. interpretace, kdy je zdrojový kódpro

gramu zapsaného v  určitém programovacím jazyce vykonáván prostřednictvím jiného programu,

který se označuje jako interpret. K překladu do strojového kódu tak nedochází, provádění je obecně

pomalejší než u zkompilovaného kódu a ke spuštění daného programu je třeba mít navíc danýinter

pret. Intepretovaným jazykem je například Python či Basic.

U vyšších programovacích jazyků lze dále rozlišovat jazyky procedurální a neprocedurální a v dělení

lze pokračovat dále, což je však již mimo rozsah tohoto stručného úvodu.

Jazyk C# a platforma .NET

Koncept jazyka C# byl společností Microsoft představen v roce 2000. O dva roky později bylauvol

něna první verze jeho implementace pod názvem Visual C# jako součást vývojového prostředíVisu

al Studio .NET.

Dle specifikace je C# moderní, jednoduchý, objektově orientovaný a typově bezpečný programovací

jazyk založený na základech programovacích jazyků z rodiny C. Syntaxe těchto jazyků je tak velmi

podobná, přičemž účel změn v jazyce C# měl za cíl především její zjednodušení.


Visual C# 2010 Express

11

Pro programování a spouštění aplikací napsaných v jazyce Visual C# musí mít cílový počítačnainstalováno prostředí Microsoft .NET Framework, což je zjednodušeně řečeno platforma obsahující

základní knihovnu tříd a rozhraní sloužící k provádění programů napsaných v jazycích, které .NET

podporuje – například C# či Visual Basic .NET.

Ať použijete pro psaní programů na  platformě .NET jakýkoli podporovaný programovací jazyk,

výsledný kód bude vždy přeložen do mezijazyka CIL (Common Intermediate Languge), který je na

platformě nezávislý. To znamená, že může být proveden v jakémkoli prostředí, které podporuje CLI

(Common Language Interface), což je klasicky .NET CLR (viz níže) pro Windows, ovšem nikoli

výhradně, neboť existují i implementace CLI pro jiné operační systémy.

CLR (Common Language Runtime – společné běhové prostředí) je jádrem prostředí .NET,zajišťujícím vše potřebné pro běh programů přeložených do mezijazyka CIL.

Při spuštění aplikace CLR zajistí, že CIL kód je překládán do strojového kódu specifického prosystém cílového počítače ve chvíli, kdy je to třeba (JIT - Just In Time), což příznivě ovlivňuje rychlost

provádění programu.

Kód běžící pod CLR se označuje jako řízený (managed code), neboť využívá služeb CLR, jako jeautomatická správa paměti či řízení výjimek, přičemž o tyto úlohy se nadále programátor nemusí starat.

Poznámka

V prostředí .NET je možné pracovat i s neřízeným kódem, tato problematika je však mimorozsah této knihy. Prostředí .NET Framework ve verzi 3.0 je součástí operačního systému Windows Vista, Windows 7 obsahuje již verzi 3.5. Do obou zmíněných, ale i do starších Windows XP (po nainstalovánípotřebného servisního balíčku) lze doinstalovat případně verzi 4.0. Visual C# 2010 Express Ačkoli k samotnému napsání programu byste v podstatě mohli použít jakýkoli textový editor, tato kniha popisuje práci s aplikací Visual C# 2010 Express, což je funkčně omezená, neplacená verze tzv. integrovaného vývojového prostředí (IDE – Intergrated Development Environment), které obsahuje vše potřebné pro vývoj, překlad a ladění aplikací. Visual C# 2010 Express je produktem z řady Microsoft Visual Studio 2010 Express, které jsouurčeny pro studenty, začínající vývojáře a ostatní neprofesionální uživatele. Po 30 dnech je nutno produkt bezplatně registrovat, aby bylo možné dál pokračovat v jeho užívání. Instalace platformy .NET 4.0 a Visual C# 2010 Express Instalaci Visual C# 2010 Express a platformy .NET 4.0 lze provést dohromady – stačí spustit instalační soubor vcssetup.exe, který stáhnete z adresy http://www.microsoft.com/express/Downloads/ (odkaz Visual C# 2010 Express), přičemž všechny potřebné části budou staženy automaticky z Internetu.

Poznámka

V prostředí .NET je možné pracovat i s neřízeným kódem, tato problematika je však mimorozsah této knihy.


Úvodem

12

Pokud nechcete nebo nemůžete využít instalaci s připojením k Internetu, je možné stáhnout celýinstalační balík a instalaci spustit na počítači bez připojení k Internetu. Příslušný soubor VS2010Express1.

iso najdete také na adrese http://www.microsoft.com/express/Downloads/ pod odkazem All – Offline

Install ISO image file. Jedná se o soubor formátu ISO, takže je třeba jej buď vypálit na CD/DVD,

nebo využít software emulující CD/DVD-ROM mechaniky, tzv. virtuální mechaniku. Tento soubor

obsahuje všechny produkty z řady Visual Studio 2010 Express, vám však samozřejmě postačí zvolit

instalaci Visual C# 2010 Express.

Prostředí .NET 4.0 je možné přímo a samostatně nainstalovat ze souboru dotNetFx40_Full_x86_

x64.exe, který naleznete na adrese http://www.microsoft.com/net/ pod odkazem Get the .NETFramework (v rámečku Get Started).

Poznámka

V  závislosti na  verzi vašeho operačního systému Windows může být potřeba nainstalovat příslušné servisní balíčky (Service Packs). Po dokončení instalace platformy .NET 4.0 a vývojového prostředí Visual C# 2010 Express budete mít připraveno vše, co je nutné k programování podle této knihy. Zdrojový kód aplikací Přestože v každé kapitole je vývoj dané aplikace popsán od počátku a obsahuje všechny částizdrojového kódu popsaného v textu, vždy máte možnost svůj kód zkontrolovat podle hotových projektů, které jsou uloženy ve složkách pojmenovaných podle jednotlivých kapitol. Z adresy http://knihy.cpress.cz/K1890 si po klepnutí na odkaz Soubory ke stažení můžete přímostáhnout archiv s ukázkovými kódy. Zpětná vazba od čtenářů Nakladatelství a vydavatelství Computer Press, které pro vás tuto knihu připravilo, stojí o zpětnou vazbu a bude na vaše podněty a dotazy reagovat. Můžete se obrátit na následující adresy: redakce PC literatury Computer Press Spielberk Office Centre Holandská 3 639 00 Brno nebo sefredaktor.pc@cpress.cz Computer Press neposkytuje rady ani jakýkoli servis pro aplikace třetích stran. Pokud budete mít dotaz k programu, obraťte se prosím na jeho tvůrce.

Poznámka

V  závislosti na  verzi vašeho operačního systému Windows může být potřeba nainstalovat příslušné servisní balíčky (Service Packs).


13

Errata

Errata

Přestože jsme udělali maximum pro to, abychom zajistili přesnost a správnost obsahu, chybám se

úplně vyhnout nedá. Pokud v některé z našich knih najdete chybu, ať už chybu v textu nebo v kódu,

budeme rádi, pokud nám ji nahlásíte. Ostatní uživatele tak můžete ušetřit frustrace a nám můžete

pomoci zlepšit následující vydání této knihy.

Veškerá existující errata zobrazíte na adrese http://knihy.cpress.cz/K1890 po klepnutí na odkaz Errata.



KAPITOLA 1

Karetních „21“

Jakou hru budete tvořit

V této kapitole společně vytvoříme jednoduchou textovou hru založenou na karetní hře známé

u nás především jako Oko bere či Jednadvacet. Názorně a snadno se tak naučíte následující:

 Co je to konzolová aplikace a jak ji založit

 Jak se deklarují a používají proměnné

 Co jsou datové typy int, short,long a string a jak je použít

 Jak lze rozhodovat pomocí příkazu if

 Co jsou operátory relační a logické

 Co jsou operátory složeného přiřazení

 Jak se používá příkaz goto

 Jak pracovat s režimem ladění

 Jak pracovat s  vestavěnou třídou Console a Random (Třídám obecně se budete věnovat

v pozdější kapitole, pro tento příklad není nutné jim rozumět).


16

Kapitola 1: Karetních „21“

Nejprve je třeba si říct, jak má zamýšlená aplikace fungovat. Pointa karetní hry Oko bere spočívá

v tom, že hráči snímají karty z balíčku a snaží se, aby byl jejich součet co nejblíže nebo přímo roven

číslu 21. Pokud hráč tuto hodnotu přesáhne, prohrává. Záleží tedy pouze na náhodě a ochotě hráče

riskovat, protože hodnotu příští karty nelze nijak ovlivnit ani předvídat.

Jednotlivé karty budou představovat čísla od 1 do 11. V plánované hře budou hráči pouze dva –uži

vatel a jeho protihráč počítač. Každý z nich bude začínat s první kartou náhodné hodnoty.

Poté se hra dotáže hráče (uživatele), zda má zájem vytáhnout si další kartu. Pokud odpoví kladně,

bude karta náhodně vybrána a její hodnota přičtena k celkovému součtu jeho karet. Pak přijde na řadu

protihráč (počítač) a také se rozhodne, zda chce další kartu či nikoli. Takto se hráči střídají do té doby,

než uživatel zvolí, že již další kartu nechce. V takovém případě program porovná celkové součty karet

obou hráčů a určí vítěze podle toho, který z nich dosáhl čísla nebo se k němu alespoň více přiblížil.

Pro úplnost je vhodné zmínit, že protihráč je znevýhodněn tím, že skončit hru (resp. přistoupit

k určení vítěze) může pouze uživatel. Tedy když ten kartu odmítne, hra skončí i v případě, žeproti

hráč by další kartu ještě riskovat chtěl.

Pro účely zachování jednoduchosti se však tímto nedostatkem zabývat nebudete. Po spuštění a chvíli

hraní bude aplikace vypadat takto:

Obrázek 1.1 Dokončená a spuštěná aplikace Karty

Založení konzolové aplikace

Aplikace bude pouze textová bez grafického rozhraní – systém bude zobrazovat informace pouze

ve  formě textu a  hráč bude reagovat vstupem z  klávesnice. Takovým aplikacím, které běží v  okně

příkazového řádku, se říká konzolové.

Vaším prvním krokem tak bude založení konzolové aplikace v prostředí Visual Studia Express 2010:

1. Spusťte Visual Studio Express 2010.

2. Z panelu nabídek vyberte File  New Project.


Založení konzolové aplikace

17

Obrázek 1.2 Vytvoření nového projektu 3. Zvolte typ Console application. 4. Do kolonky Name dole zadejte název aplikace, v tomto případě „Karty“, a potvrďte tlačítkem OK.

Obrázek 1.3 Založení konzolové aplikace Po vytvoření projektu bude jeho struktura zobrazena v okně s názvem Solution Explorer. Pokud toto okno nemáte zobrazeno, můžete jej vyvolat pomocí nabídky View  Other Windows Solution Explorer z panelu nabídek Visual Studia.


18

Kapitola 1: Karetních „21“

Kromě složek Properties a References, kterými se zatím vůbec nemusíte zabývat, se zde nachází

i soubor Program.cs. Jeho zdrojový kód by měl být zobrazen v otevřeném okně se stejným názvem.

Pokud tomu tak není, jednoduše na soubor poklepejte levým tlačítkem myši.

Obrázek 1.4 Struktura projektu a soubor Program.cs

Ve zdrojovém kódu souboru Program.cs se nachází mimo jiné i statická (co to znamená sedozví

te až později) metoda Main, jejíž kód je uveden spolu s komentářem níže. Tato metoda je vstupním

bodem programu – po jeho spuštění dojde k zavolání této metody a provedení příkazů v jejím těle.

Její přítomnost je proto povinná, čili každá aplikace v C# musí tuto metodu obsahovat. Pokud byste

ji přejmenovali či smazali, program by jednoduše nevěděl, kde začít.

Prozatím tedy budete zapisovat kód hry přímo do těla této metody, tedy mezi složené závorky, tak,

jak vidíte níže.

static void Main(string[] args)

{

//sem budete zapisovat celý kód vaší hry

}

Zde je vhodné ještě zmínit, že cokoli zapsané za dvě lomítka slouží v kódu jako komentář, který je

jednoduše při sestavování programu ignorován. Pokud chcete zapsat delší poznámku, zapištenejpr

ve /* a poté normálně pokračujte svým textem. K ukončení použijte znaky */.

/* Takto je možné zapsat delší poznámku

* na více řádků.

*/

Kdo má jaké karty aneb proměnné

Z návrhu i samostné podstaty hry vyplývá, že program bude muset pro každého z hráčů uchovávat

jednu číselnou hodnotu – ta bude představovat hodnotu součtu jeho karet, a bude se tak měnit(zvy

šovat) s každou další vytaženou kartou.

Je proto zřejmé, že budete potřebovat dvě proměnné, z nichž jedna bude představovat součet karet

uživatele a druhá součet karet protihráče. Každá tak bude obsahovat číselnou hodnotu, což jevlast

ně konkrétní typ dat. Jiným typem dat je například textový řetězec.

Proměnné v jazyce C# musí být vždy určitého datového typu, který tak určuje, jaké hodnoty mohou

uchovávat a jak s nimi lze pracovat.


Kdo má jaké karty aneb proměnné

19

Vaše dvě proměnné proto budou muset být takového datového typu, aby v nich mohlo býtuloženo číslo. Takových (celočíselných) datových typů je v jazyce C# několik. Liší se tím, jak velká čísla

mohou uchovávat:

 Typ short, do kterého lze uložit číslo o délce 16 bitů

 Typ int, do kterého lze uložit číslo o délce 32 bitů

 Typ long, do kterého lze uložit číslo o délce 64 bitů

Poznámka

Typ short je ve  skutečnosti jen přezdívkou (tzv. alias) pro Int16, int pro Int32 a long pro

Int64. Int je zkratkou anglického slova „integer“ – celé číslo. Maximální hodnoty jednotlivých

typů jsou uvedeny ve shrnutí na konci kapitoly. Uvedené tři typy nejsou jedinými celočíselnými

typy, které jazyk C# nabízí. Když si uvědomíte, že cílem obou hráčů je mít méně nebo právě 21 bodů, je vcelku zřejmé, že pro tento případ by bohatě postačil typ short. Ovšem z určitých důvodů, které by vám příkladzkomplikovaly, použijete datový typ int. Abyste mohli s proměnnou začít pracovat, je nejprve nutné ji deklarovat. Tím v podstatě oznámíte, že je potřeba rezervovat místo v paměti, kde bude uložena hodnota daného datového typu. U deklarace proměnných je třeba uvést nejdříve datový typ a poté zvolený název, který se také označuje jako identifikátor. Ten by měl v tomto případě začínat malým písmenem, a pokud je složen z více slov, je první písmeno každého dalšího slova velké. Tento zápis se označuje jako velbloudí (Camel case). Proměnná musí mít vždy před použitím přiřazenu hodnotu. To lze provést přímo během deklarace nebo později prostým přiřazením, jak vidíte na ilustračním kódu níže: //Ukázka! Tento kód není součástí hry! int ukazka; //deklarace proměnné typu int ukazka=5; //přiřazení hodnoty 5 int promenna=5; //deklarace s inicializací na hodnotu 5

Poznámka

Přiřazení počáteční hodnoty proměnné se běžně označuje jako její inicializace. Začněte tedy vytvořením dvou proměnných typu int se smysluplnými názvy, které se vám později nebudou plést, a přiřaďte oběma počáteční hodnotou 0. Protože jde o deklarační příkazy, nesmíte zapomenout zakončit je středníkem: static void Main(string[] args) { int kartyHrace=0; int kartyPC=0; } Jak je specifikováno v  návrhu programu, každý hráč má začínat s  jinou hodnotou (každý si totiž vytáhne jinou počáteční kartu). Zatím však začínají oba s nulou. Potřebujete tedy, aby byla hodnota proměnné nastavena místo na 0 na náhodné číslo od 1 do 11.

Poznámka

Typ short je ve  skutečnosti jen přezdívkou (tzv. alias) pro Int16, int pro Int32 a long pro

Int64. Int je zkratkou anglického slova „integer“ – celé číslo. Maximální hodnoty jednotlivých

typů jsou uvedeny ve shrnutí na konci kapitoly. Uvedené tři typy nejsou jedinými celočíselnými

typy, které jazyk C# nabízí.

Poznámka

Přiřazení počáteční hodnoty proměnné se běžně označuje jako její inicializace.


20

Kapitola 1: Karetních „21“

K tomu můžete využít metodu Next třídy Random a upravit kód do této podoby:

static void Main(string[] args)

{

Random nahodnaCisla=new Random(); //zatím jen opíšeme

int kartyHrace=nahodnaCisla.Next(1,12);

int kartyPC=nahodnaCisla.Next(1,12);

}

Zatím tento kód jednoduše opište a přijměte vysvětlení, že příkaz (volání metody) nahodnaCisla.

Next(1,12) vrátí náhodné číslo z intervalu 1 až 11 a výsledná hodnota je přiřazena proměnné.Protože hodnota horní hranice intervalu je při použití metody nahodnaCisla.Next vyloučena, je třeba

zde použít číslo 12.

Poznámka

Náhodná čísla generovaná třídou Random ve  skutečnosti úplně náhodná nejsou, jsou pseudo náhodná, neboť k jejich generování je použit určitý algoritmus. Ač se to může zdát zvláštní,

ve skutečnosti není generování náhodných čísel jednoduché. Výpis textu na obrazovku Nyní, když jsou karty rozdány, by měl systém zobrazit součet hodnot karet hráče (uživatele)a prostřednictvím textové zprávy se jej zeptat, zda si přeje vytáhnout další. Zobrazení textu provedete snadno pomocí třídy Console a její metody WriteLine, která zadaný text vypíše na nový řádek obrazovky: Console.WriteLine(„Chcete další kartu? ano/ne Máte „ + kartyHrace); Obsah závorky je ve skutečnosti parametr metody (zde typu string – viz níže), o čemž se vícedozvíte až ve třetí kapitole. Celý příkaz samozřejmě zakončíte středníkem. Řetězcová konstanta (předem vepsaný textový řetězec) musí vždy začínat a končit dvojitýmiuvozovkami „. Následuje operátor +, který slouží ke spojování řetězců a k zadanému textu vám připojí hodnotu proměnné kartyHrace, respektive její textovou reprezentaci. Aby se hodnota této proměnné nevypsala hned za poslední písmeno textového řetězce, je na jeho konci záměrně umístěna mezera. Čtení vstupu od uživatele Po vypsání otázky bude třeba, aby program umožnil uživateli reagovat zadáním vstupu – tedy textového řetězce „ano“ či „ne“. Na základě toho se program bude moci později rozhodnout, jak dál pokračovat. Abyste ale mohli se vstupem od  uživatele pracovat, bude třeba jej uložit do  proměnné, kterou si k tomuto účelu založíte. Jak jste se již dočetli, každá proměnná musí být takového datového typu, jaká data bude uchovávat. Pro čísla jste použili typ int, nyní bude třeba pracovat s textovýmřetězcem a pro ten existuje datový typ nazvaný string.

Poznámka

Náhodná čísla generovaná třídou Random ve  skutečnosti úplně náhodná nejsou, jsou pseudo náhodná, neboť k jejich generování je použit určitý algoritmus. Ač se to může zdát zvláštní,

ve skutečnosti není generování náhodných čísel jednoduché.


Čtení vstupu od uživatele

21

Proměnnou tohoto typu a s názvem volba deklarujete stejně jako všechny ostatní proměnné:uve

dením typu a názvu. Přiřazení na druhém řádku je v ukázce níže uvedeno jen pro doplnění, a tento

řádek tak do kódu hry nepište.

string volba;

volba=“Ukázkový řetězec“; //Tak lze přiřadit hodnotu proměnné typu string

Pro zachycení vstupu uživatele použijete metodu Console.ReadLine. Po jejím zavolání budeuživa

tel moci psát do příkazového řádku programu a potvrdit svůj vstup stiskem klávesy Enter. Upravte

tedy předchozí deklaraci proměnné takto:

string volba=Console.ReadLine();

Tak vlastně říkáte, že proměnné volba bude přiřazena taková hodnota, jakou vrátí volaná metoda,

a Console.ReadLine vrací text zadaný uživatelem, tedy textový řetězec typu string. I kdybyuži

vatel zadal pouze číslo, výsledek bude vrácen jako textový řetězec, a tak jej můžete bezpečně uložit

do proměnné typu string.

Ještě než se pustíte do  další části, můžete si aplikaci spustit a  tak si ozkoušet, že skutečně zobrazí

zadaný text a hodnotu karet a čeká na vstup od uživatele, po kterém skončí.

Sestavení a  spuštění provedete stiskem klávesy F5 nebo klepnutím na  položku Debug  Start

Debugging v panelu nabídek.

.

Obrázek 1.5 Spuštění programu

Vaše dosavadní metoda Main by měla vypadat takto:

static void Main(string[] args)

{

Random nahodnaCisla=new Random(); //zatím jen opíšeme

int kartyHrace=nahodnaCisla.Next(1,12);

int kartyPC=nahodnaCisla.Next(1,12);

Console.WriteLine(„Chcete další kartu? ano/ne Máte „ +

kartyHrace);

string volba=Console.ReadLine();

}


22

Kapitola 1: Karetních „21“

Rozhodování příkazem if

Když máte zajištěno, že proměnná volba bude obsahovat textový vstup zadaný uživatelem („ano“ či

„ne“), využijete ji k rozhodnutí, jak má program dále pokračovat. Jestliže uživatel odpovědělkladně, pak má dostat další kartu. Pokud ne, hra má skončit a vyhodnotit výsledky. V každém případě

je třeba, aby program provedl různé činnosti podle toho, jak uživatel odpověděl, a tedy jaká jehodnota proměnné volba.

K takovému účelu, kdy je potřeba spustit příkaz či příkazy, jen pokud je splněna určitá podmínka,

slouží příkaz if. Následující kód je podrobně vysvětlen níže:

if (volba==“ano“)

{

//první blok

}

else if (volba==“ne“)

{

//druhý blok

}

else

{

//třetí blok

}

Při použití příkazu if nejprve zapíšete do závorek logický výraz, který lze vyhodnotit jako pravdivý

nebo nepravdivý. Prostě řečeno jde o podmínku, která buď platí, nebo ne. Pokud má být v případě

jejího splnění provedeno více příkazů než jeden, musí být umístěny ve složených závorkách. To je

zde předpokládáno, a proto jsou závorky v kódu již předepsány.

Zde jde nejprve o výraz volba==“ano“. V něm se porovnává hodnota vpravo, tj. textový řetězec „ano“,

s hodnotou vlevo, uloženou v proměnné volba. Aby mohly být hodnoty vůbec porovnány, musí být

samozřejmě stejného typu. Zde je to splněno, neboť textový řetězec porovnáváte s proměnnoustejného typu – string.

Způsob, jakým se porovnávají, určuje operátor umístěný mezi nimi, v tomto případě operátorrovnosti ==. To znamená, že pokud je textový řetězec v proměnné volba roven textovému řetězci „ano“,

výraz je vyhodnocen jako pravdivý a dojde ke spuštění bloku kódu označeného jako první blok.

Pro úplnost je třeba uvést, že u porovnávání textových řetězců se samozřejmě rozlišují velká a malá

písmena.

Poznámka

Pravá a levá hodnota ve výrazu se správně nazývají operandy. Operátor tedy s operandy provádí

operaci. Pro ilustraci lze uvést sčítání: 1+2. 1 a 2 jsou operandy, + je operátor a provádí operaci

sčítání. Operátor nerovnosti se zapisuje jako !=. Např. výraz volba!= „ano“ bude pravdivý vždy,

když bude hodnota proměnné volba odlišná od „ano“. Pokud výraz v if pravdivý není (hodnota proměnné volba není „ano”), přejde programautomaticky ke klauzuli else, za kterou může následovat libovolný příkaz – zde if(volba==“ne“). Hodnota proměnné volba tak bude opět porovnána, tentokrát s textovým řetězcem „ne“. Bude-li tento výraz vyhodnocen jako pravdivý, program spustí blok kódu označený jako druhý blok.

Poznámka

Pravá a levá hodnota ve výrazu se správně nazývají operandy. Operátor tedy s operandy provádí

operaci. Pro ilustraci lze uvést sčítání: 1+2. 1 a 2 jsou operandy, + je operátor a provádí operaci

sčítání. Operátor nerovnosti se zapisuje jako!=. Např. výrazvolba!= „ano“ bude pravdivý vždy,

když bude hodnota proměnné volba odlišná od „ano“.


Rozhodování příkazem if

23

A konečně, pokud byly předchozí výrazy vyhodnoceny jako nepravdivé, přejde program k poslední

klauzuli else. Například v případě, kdy uživatel nenapíše ani „ano“, ani „ne“, spustí program blok

kódu označený jako třetí blok.

Poznámka

Pro správnost je třeba uvést, že klauzule else není povinná. Zapisujete ji tehdy, pokud chcete

provést konkrétní příkazy jen v případě, kdy podmínka není splněna. Po vykonání příkazů v daném bloku program přejde na konec příkazu if a pokračuje dalšímpříkazem – a tak pokud by v uvažovaném případě byla hodnota proměnné volba „ano“, vykoná se první blok kódu a program následně pokračuje až za poslední klauzulí else. Druhý a třetí blok taksamozřejmě nebude spuštěn. Jako první zde napíšete kód pro případ, kdy uživatel odpoví „ano“ – přeje si tedy vytáhnout další kartu a tím zvýšit svůj celkový součet o její hodnotu. Z pohledu programu nejde o nic jiného než o vygenerování náhodného čísla (stejně jako při rozdávání úvodní karty) a jeho přičtení k proměnné kartyHrace, kterou jste vytvořili právě pro uchovávání hodnot hráčových karet. Vygenerujete proto opět náhodné číslo (samozřejmě od 1 do 11) a přičtete jej k proměnné kartyHrace: if (volba==“ano“) { kartyHrace+=nahodnaCisla.Next(1,12); } Operátor += je zkráceným zápisem a znamená totéž, jako byste napsalikartyHrace=kartyHrace+nahodnaCisla.Next(1,12). Jednoduše tedy k hodnotě vlevo přičítáte hodnotu vpravo. Tentooperátor se nazývá operátor složeného přiřazení a rozhodně byste si jeho používání měli osvojit, protože šetří čas a zlepšuje přehlednost kódu.

Poznámka

Stejně tak lze samozřejmě zapsat -= pro odečítání, *= pro násobení či = pro dělení. Např. tedy

(uvažujte o A jako o proměnné typu int) A-=2 má stejný význam jako A=A-2. Hráč již svou kartu má, nyní je tak řada na počítači. Jeho rozhodování o tom, zda riskovat, budezaloženo na jednoduchém pravidle: pokud bude součet jeho karet (tedy hodnota proměnné kartyPC) nižší než 15, vezme si další kartu. Přidejte proto tuto podmínku spolu s příkazem, který zajistí přičtení náhodného čísla,k proměnné kartyPC: if (kartyPC<15) { kartyPC+=nahodnaCisla.Next(1,12); } První blok v příkazu if tak bude nyní vypadat takto: if (volba==“ano“) { kartyHrace+=nahodnaCisla.Next(1,12);

Poznámka

Pro správnost je třeba uvést, že klauzule else není povinná. Zapisujete ji tehdy, pokud chcete

provést konkrétní příkazy jen v případě, kdy podmínka není splněna.

Poznámka

Stejně tak lze samozřejmě zapsat -= pro odečítání,*= pro násobení či= pro dělení. Např. tedy

(uvažujte o A jako o proměnné typu int)A-=2 má stejný význam jakoA=A-2.


24

Kapitola 1: Karetních „21“

if (kartyPC<15)

{

kartyPC+=nahodnaCisla.Next(1,12);

}

}

Kód by vám měl být již zřejmý, snad kromě relačního operátoru <. Ten v daném výrazu ověřuje, zda

je hodnota levého operandu menší než hodnota operandu pravého. Pokud je tedy hodnotaproměnné kartyPC nižší než 15, je k ní přičteno náhodné číslo od 1 do 11. Přehled relačních operátorů je

uveden v tabulce na konci této kapitoly.

Ačkoli if zde podmiňuje pouze jeden příkaz, a složené závorky by tak bylo možné vynechat, jepřesto dobré zapisovat je.

Klauzule else není použita, protože nepotřebujete vykonat žádnou akci pouze v případě, kdypodmínka neplatí. Program tak jednoduše pokračuje dál.

Řízení toku programu příkazem goto

Nyní když oba hráči učinili svá rozhodnutí, program by se měl dostat zpět do  bodu, kdy zobrazí

hodnotu karet hráči a opět se jej dotáže, zda si přeje vytáhnout další kartu. Měl by tedy pokračovat

v určité smyčce, což vyplývá ze samotného návrhu hry v úvodu této kapitoly.

K zajištění toho, že zpracování programu se přesune do určitého bodu, použijete příkaz goto. Do kódu

jednoduše umístíte pojmenovaná návěští (jakési „značky“ v kódu), na něž poté příkazem gotoukážete. Ilustrační příklad může vypadat takto:

TestovaciNavesti: //návěští

Console.WriteLine(„Ukázka“);

goto TestovaciNavesti;

Pokud by byl takový kód spuštěn, opakoval by se donekonečna – program by vypsal „Ukázka“ ,příkazem goto by se přesunul na návěští TestovaciNavesti a tak stále dokola.

Poznámka

Příkaz goto se ve skutečnosti příliš nepoužívá (ačkoli jsou situace, kdy je jeho použití vhodné)

a je zde uvedem především pro snazší pochopení toku programu. Zpět ale k naší aplikaci. Nejprve umístíte návěští pojmenované DalsiKarta nad řádek, kterým vypisujete otázku a hodnotu součtu karet hráče. Pokud byste ale návěští umístili ještě výše, nad deklaracia přiřazení hodnot proměnným, došlo by znovu k jejich nastavení, a tedy ke ztrátě dosud přičtených hodnot. Váš kód by tedy měl nyní vypadat takto: int kartyHrace=nahodnaCisla.Next(1,12); int kartyPC=nahodnaCisla.Next(1,12); DalsiKarta: Console.WriteLine(„Chcete další kartu? ano/ne Máte „ + kartyHrace); Poté na toto návěští jen odkážete příkazem goto. Ten samozřejmě umístíte až za příkaz if, kterým se počítač rozhodoval, zda si vytáhne další kartu:

Poznámka

Příkaz goto se ve skutečnosti příliš nepoužívá (ačkoli jsou situace, kdy je jeho použití vhodné)

a je zde uvedem především pro snazší pochopení toku programu.


Podmínky pro určení vítěze

25

if (volba==“ano“)

{

kartyHrace+=nahodnaCisla.Next(1,12);

if (kartyPC<15)

{

kartyPC+=nahodnaCisla.Next(1,12);

}

goto DalsiKarta;

}

Tím jste zajistili, že program po spuštění bude tak dlouho nabízet hráči další kartu a zobrazovataktu

ální součet bodů, dokud bude uživatel odpovídat „ano“.

Nebudete se už zabývat situací, že po překročení hodnoty 21 by již hráč neměl mít možnost žádat

další karty. Protože jde o drobnou úpravu, můžete se o ni pokusit sami po dokončení této kapitoly.

Podmínky pro určení vítěze

Nyní je třeba naprogramovat chování programu v případě, kdy uživatel již nechce další kartu(odpo

ví tedy „ne“). Je zřejmé, že tím hra končí a v tomto okamžiku musí dojít k porovnání součtu hodnot

obou hráčů a určení vítěze. K tomu použijete již známé příkazy if (budete porovnávat hodnoty),

ale naučíte se i něco nového.

Nejprve zapíšete ideální případ výhry uživatele, kdy součet jeho karet je menší nebo roven číslu 21

a zároveň protihráč toho číslo přesáhl. Ačkoli byste mohli obě podmínky zapsat pomocí vícepříka

zů if, šlo by o zbytečně komplikovaný zápis. Namísto toho proto zapíšete obě podmínkydo jedno

ho výrazu a mezi nimi použijete logický operátor && s významem „a zároveň“ – operátor logického

součinu. Tak v podstatě říkáte, že musí platit první a zároveň druhá podmínka:

else if (volba==“ne“)

{

if (kartyHrace<=21 && kartyPC>21)

{

}

}

Jen pokud budou oba výrazy vyhodnoceny jako pravdivé, bude i výraz jako celek vyhodnocen jako

pravdivý.

Tento výraz říká: hodnota proměnné kartyHrace musí být menší nebo rovna 21 a zároveň hodnota

proměnné kartyPC musí být větší než 21.

Pokud se však zamyslíte, uživatel vyhraje i v případě, kdy je jednoduše blíže číslu 21 než protihráč –

má tedy méně nebo právě 21 bodů, ale stále má více než protihráč.

V tom případě můžete přeformulovat podmínku: uživatel vyhraje v případě, že má méně nebo právě

21 bodů a zároveň protihráč má více než 21 bodů nebo méně než uživatel.

V takovém případě, kdy stačí, aby platila alespoň jedna ze dvou podmínek, použijete logickýoperá

tor || s významem „nebo“ – operátor logického součtu. Předchozí výraz v příkazu if tedy upravte

do tohoto tvaru:

if (kartyHrace<=21 && ( kartyPC>21 || kartyPC

{

}


26

Kapitola 1: Karetních „21“

Je-li tedy hodnota proměnné kartyHrace menší nebo rovna 21 a zároveň je hodnota proměnné

kartyPC větší než 21 nebo menší než kartyHrace, bude celý výraz pravdivý.

Ještě je třeba si vysvětlit, proč jsou oba výrazy vpravo od operátoru && uzavřené v závorce. Je tomu

tak proto, že operátor && má přednost před operátorem ||, stejně jako má například násobenípřednost před sčítáním (a tedy operátor + má přednost před operátorem * aneb 2*(1+2) není totéž jako

2*1+2). Pokud byste závorky nezapsali, výraz jako celek by byl vyhodnocen jinak, než zamýšlíte –

říkal by, že musí platit první a zároveň druhá podmínka, nebo třetí podmínka – stačilo by tedy,

aby platila jen třetí. Zde je však nutné, aby vždy platila první a zároveň ještě buď druhá, nebo třetí.

Poznámka

Ve  skutečnosti jde opravdu o  přednost násobení před sčítáním, protože operátor && provádí

logický součin, zatímco operátor || logický součet. Pokud jsou podmínky splněny a výraz je vyhodnocen jako pravdivý, program by měl informovatuživatele o vítězství a zobrazit i celkovou hodnotu karet, které dosáhl počítač. K tomu vám opětposlouží metoda Console.WriteLine: Console.WriteLine(„Vyhrál jsi! Počítač měl „+kartyPC+“ bodů! „); V takovém případě jste se dostali k jednomu z možných konců hry, a váš program tak můžeúspěšně skončit. Můžete tedy rovnou přejít k další variantě, jak může porovnání výsledků skončit – výhrou počítače nad uživatelem. Jak víte, není-li výraz v příkazu if vyhodnocen jako pravdivý, pokračuje program ke klauzuli else, pokud existuje. Protože prohra uživatele automaticky neznamená, že by vyhrál počítač (mohouprohrát oba či situace může být nerozhodná), použijte klauzuli else a vnořený příkaz if, kdespecifikujte podmínky pro výhru protihráče: else if (kartyPC<=21 && (kartyHrace>21 || kartyPC>kartyHrace)) { } Skladbu výrazů i operátory již znáte – příkaz říká, že protihráč musí mít méně nebo právě 21 bodů a zároveň uživatel musí mít více než 21 nebo méně, než má protihráč. V případě, že je výrazpravdivý, vypíšete tuto informaci a i zde zobrazíte body protihráče: Console.WriteLine(„Prohrál jsi! Počítač měl „+kartyPC+“ bodů! „); Jestliže ani tento výraz nebyl vyhodnocen jako pravdivý, nevyhrál nikdo a v dalších klauzulích else s vnořeným přkazem if jen zjistíte, zda oba hráči prohráli či je situace nerozhodná. Nejprve zapište podmínku pro prohru obou hráčů (kdy mají oba nad 21 bodů) a vypsání danéinformace: else if (kartyPC>21 && kartyHrace>21) { Console.WriteLine(„Oba hráči prohráli! Počítač měl „ +kartyPC+“ bodů! „); }

Poznámka

Ve  skutečnosti jde opravdu o  přednost násobení před sčítáním, protože operátor && provádí

logický součin, zatímco operátor || logický součet.


Podmínky pro určení vítěze

27

A nakonec ošetřete situaci, kdy se hodnoty obou hráčů rovnají, a vítěze tak nelze určit:

else if (kartyPC==kartyHrace)

{

Console.WriteLine(„Nikdo nevyhrál!“);

}

Poznámka

Zde by mohla být použita prostá klauzule else bez vnořeného příkazu if, protože všechny

ostatní možné situace jsou již pokryty podmínkami výše. Pro přehlednost si lze níže zkontrolovat, jak má kód v této části (sekce příkazu if podmíněnápravdivostí volba==“ne“) programu vypadat: else if (volba==“ne“) { if (kartyHrace<=21 && ( kartyPC>21 || kartyPCkartyHrace)) { Console.WriteLine(„Prohrál jsi! Počítač měl „ +kartyPC+“ bodů!“); } else if (kartyPC>21 && kartyHrace>21) { Console.WriteLi



       
Knihkupectví Knihy.ABZ.cz - online prodej | ABZ Knihy, a.s.
ABZ knihy, a.s.
 
 
 

Knihy.ABZ.cz - knihkupectví online -  © 2004-2018 - ABZ ABZ knihy, a.s. TOPlist