Npovda k programu Miny
------------------------
Clem hry je odkrt vechna polka, na kterch nen mina. Polka se odkrvaj pomoc levho tlatka myi. Po odkryt se zobraz slo, kter znamen poet min na sousednch polkch. 
Pravm tlatkem oznaujete polka, na kterch jsou miny. Jestlie jsou kolem sla u vechny miny oznaeny, pak lze rychle odkrt zbyl okoln polka tak, e klepnete na slo levm nebo pravm tlatkem. 
Pokud je v pravm dolnm rohu zobrazen otaznk, pak to znamen, e o dnm polku nelze s jistotou ci, e na nm nen mina. V takov situaci se vm pota sna pomoct a jestlie klepnete na minu, pak se ji pokus pemstit nkam jinam. 
Novou hru zanete klepnutm do oblasti nad hrac plochou nebo stisknutm F2.

Obtnost
---------
Jestlie odkryjete polko, o kterm nelze rozhodnout, jestli na nm je nebo nen mina, pak vsledek zvis na zvolen obtnosti:
1. nejleh - nikdy nevybouchnete
2. lehk    - kdy odkrvan polko soused s slem, pak nevybouchnete
3. stedn  - rozhodne se nhodn
4. tk    - vdy vybouchnete
5. nejt잚 - vdy vybouchnete
Pi nejt잚 obtnosti nesmte v situacch oznaench otaznkem odkrt polko, kter nesoused s dnm slem. Kad hra se d vyhrt i pi nejt잚 obtnosti.

Tabulky nejlepch as
-----------------------
Tabulky s nejlepmi asy existuj jen pro mnostv min 12,15,18,21,24 procent. Pokud si zvolte jin mnostv min, pak se do dn tabulky nezapete. 
Vsledky jsou setdny podle (rychlost+vka*ka/6). Graf rychlosti se zobrazuje i bhem hry. Rychlost se pot jako poet kliknut myi za sekundu krt 1000. 

 Nejlep vsledky autora hry: 
12% trojhlenkov: 1250
24% trojhlenkov: 520 
12% tvercov: 1800
24% tvercov: 960

Strun popis algoritmu (ureno jen pro programtory :)
-------------------------------------------------------
 Clem algoritmu je zmnit polko. To znamen, e pokud je na polku mina, pak se mina pesune jinam, a pokud na polku nen mina, pak se na nj odnkud mina pesune. Samozejm se pitom nesmj zmnit sla na odkrytch polkch. lovk nesm v dnm ppad poznat, e pota s minami hbe. Pokud vybouchne, pak si mus myslet, e na polku byla mina u od zatku hry a ne e ji tam pota schvln podstril.  
 Po nalezen sprvn kombinace min se obvykle stv, e se zmn celkov poet min. V takovch ppadech se pidvaj nebo ubraj miny na vnitnch polkch. Vnitn polka jsou takov polka, kter nesoused z dnm odkrytm polem. Proto je mon na nich bez omezen pidvat nebo ubrat miny. Je teba, aby byl zachovn celkov poet min, kter je zobrazen na stavovm dku. Problm nastv ke konci hry, kdy u nejsou k dispozici vnitn polka. Pak se mus hledat takov kombinace, pi kter se poet min nemn.    Zkladem algoritmu je backtracking. Na zatku funkce se na polku d nebo odebere mina. Na konci funkce se ve vrt do pvodnho stavu. Kad zmnn polko se mus uzamknout, aby se pi rekurzivnm voln funkce nemohlo polko zmnit vcekrt a aby se algoritmus nezacyklil. Pidnm nebo odebrnm miny se sla na sousednch odkrytch polkch zv nebo sn o jedna. Vechna odkryt polka, u nich slo na obrazovce nesouhlas s potem sousednch min, se ukldaj do spojovho seznamu. Jestlie je tento seznam przdn, pak byla nalezena ppustn kombinace a algoritmus spn skon. Jet je teba pi nvratu z rekurze vytvoit seznam zmnnch pol. 
 Jakmile je njak polko oznaeno jako definitivn, je zrove tak uzameno. To znamen, e pi backtrackingu se nebudou zbyten mnit polka, kter u jsou definitivn. Aby se snil poet kombinac, kter algoritmus bude postupn zkouet, je poteba uzamykat doasn jet dal polka. Pi pesunu jedn miny se obvykle stv, e to znemon zmny na jinch sousednch polkch. Takov polka se zamknou. (Navc se do spojovho seznamu uchovvaj polka, kde dolo k zamknut, aby se pi nvratu z backtrackingu mohla zase odemknout.) 
 Heuristiky jsou nsledujc: Kdy jsou kolem odkrytho polka uzameny vechny miny, pak se zamknou tak vechna voln polka. Naopak kdy jsou kolem odkrytho polka uzamena vechna voln polka, pak se zamknou tak vechny miny. Kdy se stane, e byla u odkrytho polka pidna mina a zrove nen k dispozici nezamen mina, kter by se dala odebrat, pak se backtracking mus vrtit o krok zpt. Podobn kdy byla u odkrytho polka odebrna mina a nen k dispozici nezamen voln polko, pak se backtracking mus tak vrtit o krok zpt. Jestlie se kolem odkrytho polka poet pidanch min rovn potu nezamench min, pak se nezamen miny hned odeberou. Jestlie se kolem odkrytho polka poet odebranch min rovn potu nezamench volnch polek, pak se na nezamen voln polka pidaj miny.

 Po kadm tahu se prochz cel hrac plocha. Na kad polko se zavol funkce invert, a pokud se miny nepoda perovnat, pak se polko ozna jako definitivn. Funkce invert se vol jen na polkch, kter soused s njakm slem. Jestlie je nalezeno njak perovnn min, pak se u vech zmnnch pol nastav hodnota unknown na true a pi prochzen zbytku hrac plochy se tato polka nemusej znovu testovat.
 Jednoduch ppady se zpracuj jet ped sputnm backtrackingu - v procedue setDef. Pokud je napklad na odkrytm polku slo 2 a u jsou definitivn 2 miny, pak vme, e zbyl okoln polka jsou urit bez min. Na druhou stranu kdy kolem sla 2 jsou prv 2 neodkryt polka, pak na nich musej bt miny.
 Dv polka jsou ekvivalentn, kdy soused se stejnmi odkrytmi polky. Zrove na obou je nebo nen mina. Algoritmus provd vechny vpoty jen s jednm z ekvivalentnch polek. Do druhho polka se vsledek jen okopruje a tm se uet dost asu.
 Jestlie jsou na vech definitivnch polkch miny, pak lovk mus hdat. Takov situace jsou oznaeny otaznkem v pravm dolnm rohu. Pokud se v takov chvli lovk stref na minu, pak se pota pokus s minou uhnout a to i pi nejt잚 obtnosti.


Co je novho
------------
    1.1999 - verze pro DOS
    8.2001 - verze pro Windows
   11.2001 - zobrazen grafu rychlosti hre, tabulka nejlepch as
    1.2002 - sloitj (rychlej) algoritmus
26.11.2002 - trojhelnkov pole, barvy
22.12.2002 - kolem prvnho kliknut se odeberou miny
 14.1.2003 - na konci hry se oznakuj vechny miny
 15.1.2003 - 10 tabulek nejlepch as, lze zmnit barvu mky
  5.2.2003 - monosti, odkrvn polka pi uvolnn tlatka
19.10.2003 - pi jin velikosti fontu se chybn zobrazovaly texty
 24.3.2004 - anglick peklad


Licence
-------
Na tento program se vztahuje licence "Reciprocal Public License". Zde jsou uvedeny jen nejdleitj body. Cel jej znn (33KB, v anlitin) lze sthnout z autorovy webov strnky nebo http://opensource.org/licenses. 
1) Program je zdarma. Je povoleno ho koprovat nebo distribuovat na CD, teba spolu s jinmi programy. 
2) Program si mete pro vlastn potebu upravit. Tak mete sti zdrojovho kdu pout do svch vlastnch program. V obou ppadech muste splnit nsledujc poadavky:
 a) Nesmte zmnit nebo odstranit tuto licenci.
 b) Nesmte smazat jmno pvodnho autora.
 c) Zdokumentujete vechny proveden zmny a u kad zmny uvedete datum.
 d) Zdrojov kdy (vetn vaich prav a rozen) zdarma zveejnte na internetu. 
3) Program je bez zruky. 

http://sweb.cz/petr.lastovicka

(C) 2.12.2005  Petr Latovika
