Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Programujeme jednoduchou hru v Javě: Šibenice

Připravil jsem si pro vás tutoriál, ve kterém se naučíme vytvořit všem známou hru "Šibenice" v konzoli. K tomu budeme potřebovat jen základní konstrukce jazyka Java a pár maličkostí, které budou v průběhu tutoriálu vysvětleny.

Budeme potřebovat vědět, kolikrát uživatel zadal špatné písmeno. K tomu nám poslouží proměnná trest, která bude počítat "trestné body". Dále budeme potřebovat proměnnou vyhra, která nám naopak bude počítat kolik správných písmen uživatel uhodl. Hra by šla vytvořit i bez této proměnné, ale pro jednoduchost ji tu necháme. Bez čeho se ale neobejdeme bude hledané slovo, které bude ukryto v proměnné slovo. V poslední řadě potřebujeme proměnnou, která si bude pamatovat postup hry, a to bude postup.

int trest = 0;
int vyhra = 0;
String slovo = "jablko";
char[] postup = new char[slovo.length()];

Nyní, když máme proměnné vytvořené, vložíme do postup tolik pomlček, kolik je písmen ve slově. K tomu nám poslouží jednoduchý cyklus.

for(int i=0;i!=slovo.length();i++)
  postup[i] = '-';

Máme vše potřebné připravené, tak se můžeme pustit do hlavního cyklu, který bude řídit celou aplikaci. Vytvoříme ho pomocí cyklu while, který se opakuje tak dlouho, dokud platí podmínka. V našem případě se ptáme, jestli uživatel nedosáhl hranici 7 trestných bodů a zároveň neuhodl všechny písmena.

while (trest!=7&&vyhra!=slovo.length())
{
  ...
}

Hned na začátek vypíšeme postup, ať uživatel ví, kolikatipísmenné slovo má uhodnout. Následně ho vyzveme, aby zadal písmeno, které si myslí, že je obsaženo ve slově. Pro případ, že by uživatel zadal velké písmeno, použijeme metodu toLowerCase(). Poté si přes podmínku ověříme, zda je zadané písmeno obsaženo ve slově. Pokud ano, projedeme si jednotlivá písmena a hledáme, která se shodují. Ty následně předáme na postup a přičteme 1 do vyhra. Je možné, že uživatel zadá opakovaně jedno písmeno, proto podmínku rozšíříme o podmínku, zda-li postup již toto písmeno neobsahuje. Pokud není zadané písmeno obsaženo ve slově, přičteme 1 do trest.

for(char c:postup)
  System.out.printf("%c",c);
System.out.printf("\nZadejte písmeno: ");
String volba = sc.nextLine();
volba = volba.toLowerCase();

if(slovo.contains(volba))
{
  for(int i=0;i!=slovo.length();i++)
    if(volba.equals(Character.toString(slovo.charAt(i)))&&
       postup[i]!=slovo.charAt(i))
    {
        postup[i]=slovo.charAt(i);
        vyhra+=1;
    }
}
else
  trest+=1;

Už se nám sčítají trestné body, můžeme tedy začít vykreslovat šibenici, a to pomocí switch. Záleží na vás, jak bude vypadat, já jsem si zvolil následující.

switch (trest)
{
  case 7:
      System.out.println("      ___________\n"
                       + "     ││        I\n"
                       + "     ││       ( )\n"
                       + "     ││        │\n"
                       + "     ││       /│\\\n"
                       + "     ││        │\n"
                       + "     ││       / \\\n"
                       + "    .---.\n"
                       + "   /     \\");
      System.out.println("Prohrál jste!\n"
               + "Hledané slovo bylo: " + slovo);
      break;
  case 6:
      System.out.println("      ___________\n"
                       + "     ││        I\n"
                       + "     ││       ( )\n"
                       + "     ││        │\n"
                       + "     ││        │\n"
                       + "     ││        │\n"
                       + "     ││       / \\\n"
                       + "    .---.\n"
                       + "   /     \\");
      break;
  case 5:
      System.out.println("      ___________\n"
                       + "     ││        I\n"
                       + "     ││       ( )\n"
                       + "     ││        │\n"
                       + "     ││        │\n"
                       + "     ││        │\n"
                       + "     ││\n"
                       + "    .---.\n"
                       + "   /     \\");
      break;
  case 4:
      System.out.println("      ___________\n"
                       + "     ││        I\n"
                       + "     ││       ( )\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "    .---.\n"
                       + "   /     \\");
      break;
  case 3:
      System.out.println("      ___________\n"
                       + "     ││        I\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "    .---.\n"
                       + "   /     \\");
      break;
  case 2:
      System.out.println("\n     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "     ││\n"
                       + "    .---.\n"
                       + "   /     \\");
      break;
  case 1:
      System.out.println("\n\n\n\n\n\n\n    .---.\n"
                       + "   /     \\");
      break;
  default :
}

Jelikož nám cyklus skončí ve dvou případech (výhra, prohra), musíme zjistit, proč skončil a vypsat vítězství nebo porážku. Prohra je jednoduchá, tu připíšeme k poslední fázi stavby šibenice. Výpis výhry dáme do podmínky, kterou umístíme za cyklus.

if (trest != 7)
  System.out.println("Vyhrál jste!");

Šibenice nám krásně funguje, ale stále se tam objevuje jedno slovo. Aby byla hra zábavnější, vytvoříme si na začátku pole slov, které se mohou objevit a vzápětí náhodný výběr z těchto slov. Náhodné číslo nám zajistí metoda Math.random(), která vrací desetinné číslo od 0 do 1. My bychom potřebovali číslo od 0 do počtu prvků v poli slov -1 (protože jsou číslovány od 0). Proto náhodné číslo vynásobíme délkou pole a přetypujeme na int.

String[] databaze = {"auto", "pocitac", "internet", "skola"};
String slovo = databaze[(int)(Math.random()*databaze.length)];

Teď je již šibenice kompletní.

Jednoduchá hra Šibenice v Javě - Zdrojákoviště Java - Základní konstrukce

Do databaze si můžete napsat slov kolik chcete. Pokud jste něčemu nerozuměli nebo něco vám nefunguje, můžete si aplikaci pod článkem stáhnout.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 773x (22.04 kB)
Aplikace je včetně zdrojových kódů v jazyce Java

 

Všechny články v sekci
Zdrojákoviště Java - Základní konstrukce
Článek pro vás napsal Contrix
Avatar
Uživatelské hodnocení:
20 hlasů
Autor se věnuje programovaní v jazyce Java, ale nepohrdne tvorbou jednodušších webových stránek.
Aktivity