<meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
<p id='prepend'>V nßsledujφcφch Φlßncφch vytvo°φme jednoduchou hru. Pro zaΦßtek si hlavn∞ rozebereme vÜe, na co by m∞l Φlov∞k myslet d°φve, ne₧ se skuteΦn∞ pustφ do psanφ. I kdy₧ nejste p°φmo programßto°i, sm∞le se do Φlßnku pus¥te, proto₧e neobsahuje ₧ßdn² k≤d...</p>
<h3>Z Φeho se hra sklßdß</h3>
<p>Ka₧dß hra se obvykle sklßdß z n∞kolika komponent:</p>
<ul>
<li><strong>┌vodnφ obrazovka</strong> (splashscreen) - obrßzek (m∙₧e to b²t i animace nebo n∞kolik obrßzk∙ za sebou), kter² se zobrazφ p°i spuÜt∞nφ aplikace. Obsahuje obvykle nßzev hry a logo v²robce, m∙₧e zobrazovat pr∙b∞h nahrßvßnφ hry.</li>
<li><strong>Menu</strong> - obsahuje obvykle standardnφ polo₧ky, jako nap°φklad <em>hrßt</em>, <em>nastavenφ</em>, <em>nßpov∞da</em>, <em>sk≤re</em>, <em>o aplikaci</em> a <em>konec</em>.</li>
<li><strong>Vlastnφ hra</strong> - i kdy₧ hry mohou b²t diametrßln∞ odliÜnΘ, existuje n∞kolik kritΘriφ, kterß by m∞ly spl≥ovat. P°i odstran∞nφ vlastnφ hry z displeje by m∞l b²t b∞h hry pozastaven a p°i jejφm zobrazenφ op∞t spuÜt∞n. Je-li aplikace urΦena na vφce cφlov²ch za°φzenφ, je vhodnΘ, je-li logika hry odd∞lena od t°φdy, kterß hru zobrazuje, proto₧e logika hry z∙stßvß stßle stejnß, i kdy₧ je nutnΘ psßt zobrazovßnφ hry pro r∙znß za°φzenφ zvlßÜ¥.</li>
<li><strong>Sk≤re</strong> - seznam nejvyÜÜφho dosa₧enΘho sk≤re. Sk≤re m∙₧e b²t odesφlatelnΘ na server, aby se mohli hrßΦi porovnßvat mezi sebou. V tom p°φpad∞ musφ hra obsahovat i formulß° pro registraci u₧ivatele na server, mß-li jmΘno jednoznaΦn∞ identifikovat u₧ivatele.</li>
<li><strong>Nastavenφ</strong> - hra obvykle mφvß n∞jakΘ nastavitelnΘ parametry, jako je nap°φklad ·rove≥ obtφ₧nosti, rozm∞ry hernφho plßnu a podobn∞. V∞tÜinou staΦφ nastavenφ parametr∙ aplikace implementovat jako jednoduch² formulß°.</li>
</ul>
<p>Nßsledujφcφ moduly sice nejsou "vid∞t", p°esto na n∞ nesmφme zapomenout:</p>
<ul>
<li><strong>Perzistentnφ data</strong> - uklßdat si data do trvalΘ pam∞ti m∙₧e chtφt vφce nezßvisl²ch modul∙ aplikace. Bylo by neefektivnφ (vzhledem k omezenΘ velikosti aplikace), kdyby si p°φstup k t∞mto dat∙m zajiÜ¥oval ka₧d² modul sßm.</li>
<li><strong>HTTP modul</strong> - zde platφ to samΘ jako u perzistentnφch dat. Komunikovat po sφti m∙₧e ·vodnφ obrazovka (sta₧enφ aktußlnφch informacφ), vlastnφ hra (je-li sφ¥ovß) i seznam nejlepÜφch sk≤re.</li>
</ul>
<p>Pohled na aplikaci jako na spojenφ n∞kolika modul∙ p°es n∞jakΘ vlastnφ, jasn∞ definovanΘ rozhranφ, je v²hodn² ze dvou d∙vod∙. Prvnφm z nich je <strong>znovuvyu₧itelnost komponent</strong>. N∞kterΘ komponenty jsou u v∞tÜiny aplikacφ stejnΘ (·vodnφ obrazovka, sk≤re), tak₧e je staΦφ napsat jednou u prvnφ aplikace a u dalÜφch aplikacφ je m∙₧eme pou₧φt tak, jak jsou, pouze s v²m∞nou obrßzku.</p>
<p>Druh²m d∙vodem je jednoduchß <strong>nahraditelnost komponent</strong>. Vezm∞me si jako p°φklad t°eba menu aplikace. Pro telefony s mal²m displejem je menu tvo°enΘ pouze obyΦejn²m seznamem polo₧ek (t°φda <code>javax.microedition.lcdui.List</code>) zcela dostaΦujφcφ. OvÜem u v∞tÜφch telefon∙, kterΘ se velikostφ blφ₧φ k PDA, vypadß takovΘ menu dost neesteticky a nenφ od v∞ci nahradit tuto komponentu novou verzφ, kterß kreslφ menu s pou₧itφm nφzko·rov≥ovΘho rozhranφ (<code>javax.microedition.lcdui.Canvas</code> nebo v MIDP 2.0 polo₧ky typu <code>javax.microedition.lcdui.CustomItem</code> vlo₧enΘ do formulß°e <code>javax.microedition.lcdui.Form</code>).</p>
<h3>Ne₧ zaΦneme programovat</h3>
<p>Ne₧ se pustφme do programovßnφ, je Φas na n∞kolik ·vah.</p>
<h4>Popis hry</h4>
<p>Prvnφm krokem je p°esn∞ popsat, jak se mß hra chovat. I pak se sice m∙₧e mnohΘ v pr∙b∞hu programovßnφ zm∞nit, ale rozhodn∞ bude k≤d p°ehledn∞jÜφ, ne₧ kdy₧ zaΦneme rovnou ₧iveln∞ psßt.</p>
<p>NßÜ scΘnß° bude vypadat takto:</p>
<blockquote>
<p>H°e °φkejme t°eba Blabouch. Pod mostem plave lo∩. U₧ivatel ovlßdß lo∩ stiskem Üipky doleva nebo doprava. Dokud u₧ivatel Üipku dr₧φ, lo∩ se pohybuje, kdy₧ Üipku pustφ, lo∩ se zastavφ. Prav² a lev² okraj displeje jsou pro lo∩ nepr∙chozφ, zarazφ se o n∞. Z mostu padajφ mince r∙znΘ hodnoty a bomby. Cφlem hry je chytit lodφ co nejvφce mincφ, jejich₧ hodnoty se sΦφtajφ do celkovΘho sk≤re. Dotkne-li se lodi bomba, lo∩ exploduje a hra konΦφ.</p>
</blockquote>
<h4>Popis cφlovΘ platformy</h4>
<p>Dßle je t°eba rozmyslet, na jakß vÜechna za°φzenφ je hra urΦena a jak se vypo°ßdßme s jejich r∙zn²mi vlastnostmi - velikost displeje, poΦet barev displeje, ovlßdßnφ klßvesnicφ nebo stylusem, maximßlnφ velikost aplikace, r∙znß implementovanß proprietßrnφ a rozÜi°ujφcφ rozhranφ a podobn∞.</p>
<p>Ovlßdßnφ klßvesnicφ nebo stylusem lze implementovat najednou, nenφ-li aplikace nabitß k prasknutφ a nebojujeme-li tedy o ka₧d² bajt velikosti.</p>
<blockquote>
<p>Jak je poznat u₧ ze scΘnß°e, ovlßdßnφ stylusem nebudeme °eÜit, jinak by bylo pot°eba i zp∙sob tohoto ovlßdßnφ naplßnovat dop°edu.</p>
</blockquote>
<p>HorÜφ je to s r∙zn²mi displeji. Zde mohou nastat v zßsad∞ t°i varianty:</p>
<ol>
<li><strong>Hra bude beze zm∞ny b∞hat na vÜech mo₧n²ch rozliÜenφch displeje.</strong> P°φkladem tΘto varianty m∙₧e b²t hra na Üachovnici, ve kterΘ vÜe kreslφme pomocφ nφzko·rov≥ovΘ grafiky, rozm∞ry vypoΦteme podle velikosti displeje a nepou₧φvßme hotovΘ obrßzky. Tento stav by byl asi ideßlnφ, ale obvykle se bez hotov²ch obrßzk∙ neobejdeme.</li>
<li><strong>Pro r∙znß rozliÜenφ displeje je pot°eba vytvo°it r∙znΘ obrßzky.</strong> TΘto variant∞ odpovφdß v∞tÜina her. Do verze pro telefony s v∞tÜφm displejem se prost∞ dajφ stejnΘ obrßzky, jako pro telefony s menÜφm displejem, jen budou mφt v∞tÜφ velikost. Mezi obrßzky musφme poΦφtat i ikony v menu tvo°enΘm seznamem polo₧ek a ikony p°ed jmΘnem hry v seznamu aplikacφ. A zde trochu komplikuje ₧ivot, ₧e nejprve Φlov∞k musφ zjistit velikosti t∞chto ikon metodou pokus-omyl, proto₧e specifikace telefon∙ tyto ·daje obvykle neuvßdφ, a pak zjistφ, ₧e i telefony s velmi podobnou velikostφ displeje majφ velikosti ikon Φasto dost odliÜnΘ.</li>
<li><strong>Pro r∙znß rozliÜenφ je pot°eba nastavit n∞kterΘ parametry odliÜn∞ Φi dokonce p°epsat zdrojov² k≤d.</strong> Tato situace nastane, pokud se aplikace Üije na mφru displeji a je pot°eba zachovat proporce a p°esnost na pixel (t°eba u fotbalu musφ aplikace znßt p°esn∞ pozice branky, aby nehlßsila g≤l, aΦkoli by Üel mφΦ mimo branku).</li>
</ol>
<blockquote>
<p>V naÜem p°φpad∞ bude platit druhß varianta. Pro zaΦßtek se hodφ zvolit si jeden telefon, na kter² se aplikace vyvφjφ, a p°enos na ostatnφ telefony °eÜit eventußln∞ a₧ na zßv∞r, kdy je hra prakticky hotovß.</p>
</blockquote>
<p>Mezi dalÜφ ·koly, kterΘ je pot°eba p°edem zvß₧it, pat°φ takΘ °eÜenφ vφcejazyΦnosti aplikace a zp∙sob organizace projektu (obrßzk∙, text∙, modul∙, sestavovßnφ cφlov²ch aplikacφ a podobn∞). P°i takovΘ variabilit∞ za°φzenφ, jakß panuje, je tento ·kol velmi d∙le₧it². Plßnujeme-li psßt aplikace nejen pro vlastnφ pot∞Üenφ, je pot°eba co nejvφce ·kon∙ automatizovat, aby se zabrßnilo chyb∞ lidskΘho faktoru p°i ruΦnφm kopφrovßnφ tam a zase zpßtky a takΘ aby se lidsk² faktor z toho vÜeho nezblßznil. Jeliko₧ zatφm budeme psßt zcela jednoduchou aplikaci v jednom jazyce a na jedno za°φzenφ, nechßme si komplikovan∞jÜφ organizaci projektu a₧ na pozd∞ji.</p>
<div id='article-about-author'>programßtor û analytik <a href="http://www.amaio.cz">Amaio Technologies</a></div>
</div>
<div class='refer'><h3><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/serial.asp?serial=225' title='p°ehled Φlßnk∙ vΦetn∞ anotacφ'>Kdo si J2ME, nezlobφ</a></h3><p>Projdeme si na konkrΘtnφm p°φkladu krok po kroku vznik J2ME hry a budeme p°itom °eÜit r∙znΘ problΘmy, kterΘ v²voj aplikace na mobilnφ telefon provßzejφ. P°edpokladem je znalost syntaxe programovacφho jazyka Java. Tato sΘrie Φlßnk∙ dosud nebyla ukonΦena!</p><ul><li><strong>Kdo si J2ME, nezlobφ - ·vod pro ka₧dΘho</strong> (prßv∞ Φtete)</li></ul></div>