headerphoto

"LODĚ"

V dalších odstavcích najdete poznámky a rady k řešení závěrečné práce ve druhém ročníku na téma hry "lodě". Přesné zadání najdete na "iškole" nebo na "Moodlu".

Princip hry: krátce si připomeneme, jak klasická hra "na papír" probíhá. Jsou 2 hráči. Každý hráč si zakreslí svoje lodě. Následuje hádání lodí protihráče. Zadám souřadnice a protihráč mi oznámí, jak pokus dopadl (zásah nebo mimo). Takto se hráči střídají a hádají, dokud jeden z nich netrefí všechny lodě od protiháče.

Při návrhu hry v jazyce C, vycházíme v základní variantě z toho, že bude hrát jenom jeden hráč proti počítači. Počítač tedy vygeneruje pozice lodí a hráč hádá jejich umístění. Hra končí, když "trefí" všechny lodě.

Samotný prostor pro hru definujeme jako dvojrozměrné pole, ideálně datového typu char, ať je přímo jasné, jaké znaky tam máme. Pro odlišení různých stavů zvolíme jednotlivé znaky (co bude loď, co bude voda, ...).

Pokud si v programování úplně nevěříte, můžete si deklarovat dvojrozměrné pole typu int. Potom bude např. 0 voda, 1 loď, ...

Počáteční nastavení hrací plochy: na začátku předpokládáme, že celá plocha je prázdná t.j. všude je "voda" (např. znak '~').

void nastav_plochu(char plocha[][MAX])   // parametrem funkce je dvojrozmerne pole
    {                                    // MAX je konstanta definovana v programu
       int i, j;
        for(i=0; i<MAX; i++) 
          {
       	  for (j=0; j<MAX; j++)  plocha[i][j]= '~';
       	 
          }
     }
      

Generování náhodných čísel: budeme potřebovat pro náhodné rozmístění lodí. Můžeme to zajistit např. náhodným generováním souřadnic lodě. Je třeba dát pozor, abychom neumístili loď opakovaně na jednu pozici.

srand( (unsigned) time(NULL) );    //inicializace generatora
x = rand() % 20;                   //celé číslo z intervalu <0,19>
y = rand() % 20;

Funkce srand() - inicializace generátora pseudonáhodných čísel. Zajistí nám, že nedostáváme stejnou posloupnost čísel. Inicializovat stačí jednou na začátku programu.

Funkce rand() - generuje náhodné číslo. Pro omezení rozsahu čísel využijeme operátor % (zbytek po celočíselném dělení).

Barvy: nastavení barev můžete jednoduše zajistit použitím funkce system("color .."). Jako parametr doplníte 2 hexadecimální čísla barev - první je pozadí, druhé popředí. Barevně se změní celá aktuální obrazovka.

system("COLOR FC");  //změní barvu celé obrazovky (bílé pozadí, červené písmo)

Pro pokročilejší práci s barvami použijte SetConsoleTextAttribute() z knihovny windows.h . Uvedená funkce nastaví barevné schéma (pozadí a barva textu) pro další výpisy, aktuální obrazovka se nemění. Nastavení různých barev dohledejte na internetu.

HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);    //nastavení výstupu SetConsoleTextAttribute(hStdout,FOREGROUND_RED);    //červený text

Design downloaded from Free Templates - your source for free web templates