Avatar
Petr Bílí :13. března 18:41

Ahoj, mám takový problém. Dělal jsem si podle jednoho návodu hru, "oko bere", bohužel ta hra má jeden problém, který ani v tutoriálu nebyl vyřešen. Když přesáhnu limit do kterého se hádá, tak se hra neukončí, ale pokračuje to dál. "Obešel jsem to" přes jednu věc (označené jako komentář /* */), ale rád bych tomu zamezil hned v počátku, jakmile dostanu větší číslo než 21.

class Program
{

static void Main(string[] args)
{

Console.Write­Line("Vítejte v oko bere");

Random nahodnaCisla = new Random();
int kartyHrace = nahodnaCisla.Nex­t(0, 11);
int kartyPC = nahodnaCisla.Nex­t(0, 11);

DalsiKarta:
Console.Write­Line("Chcete další kartu ? ano/ne Počet vašich karet je " + kartyHrace);
String volba = Console.ReadLine();

if (volba == "ano")
{

kartyHrace += nahodnaCisla.Nex­t(0,11);

if (kartyPC < 15)
{
kartyPC += nahodnaCisla.Nex­t(0,11);

}
goto DalsiKarta;
}

else if (volba == "ne")
{
if (kartyHrace <= 21 && ( kartyPC > 21 || kartyPC < kartyHrace))
{

Console.Write­Line("Vyhrál/a jste ! Počítač měl " + kartyPC + " bodů!. ");

}

else if (kartyHrace <= 21 && (kartyPC > 21 || kartyPC > kartyHrace))
{

Console.Write­Line("Prohrál/a jste ! Počítač měl " +kartyPC + " bodů! ");

}

else if (kartyPC> 21 && kartyHrace> 21)
{

Console.Write­Line("Oba hráči prohráli ! Počítač měl " +kartyPC + " bodů! ");

}

else if (kartyPC == kartyHrace)
{

Console.Write­Line("REMÍZA ! ");

}
/*
else if (kartyHrace >21)
{

Console.Write­Line("Přesáhl/a jste limit. Prohráváte ! ");

}
*/
Console.ReadKey();
}
else
{
Console.Write­Line("Zadej jen (ano/ne)!");
goto DalsiKarta;
}

}.

Editováno 13. března 18:43
 
Odpovědět 13. března 18:41
Avatar
Petr Bílí :13. března 18:55

Ještě bych rád dodal, že musím zadat "ne" po přesaženém limitu. Rád bych, aby to automaticky napsal něco pokud mi to dá po "ano" číslo větší jak 2.Děkuji za pomoc.

 
Nahoru Odpovědět 13. března 18:55
Avatar
Mára
Člen
Avatar
Odpovídá na Petr Bílí
Mára:14. března 6:37

Pár rad:

  1. Používej tag code tady na Itnetworku, dělá to kód mnohem čitelnější.
  2. Zkus nepoužívat goto, je to přežitek z hodně starých jazyků - můžeš nahradit třeba funkcemi.

K první otázce. Mohl bys přidat do první podmínky kontrolu, jestli není překročen počet karet.

if(volba == "ano" && kartyHrace < 21 && kartyPC < 21)

A druhé otázce nerozumím, zkus ji přeformulovat prosím.

 
Nahoru Odpovědět 14. března 6:37
Avatar
Jakub Augusta:14. března 9:44

Ta druhá otázka je trošku krkolomná :D
Myslíš něco ve stylu, pokud je vygenerované číslo větší jak dva, tak se ti do konzole napíše "Dostal jsi číslo x"
Jestli ano, ulož si nejdříve vygenerované číslo do proměnné a následně se koukni, zdali je číslo větší nežli dva

int cislo = nahodnaCisla.Next(0, 11);
if(cislo > 1)
{
    Console.WriteLine("Dostal/a jsi " + cislo.ToString() + " karty");
}
kartyHrace += cislo;
Editováno 14. března 9:45
Nahoru Odpovědět 14. března 9:44
if(true == false) { Tu: DoDis() } else goto Tu;
Avatar
Petr Bílí :14. března 18:45

Měl jsem na mysli, jak upravit kód tak, aby mi to vyhodilo nějakou hlášku např. "překročil jste limit". Takhle když si napsáním "ano" přidává hráč karty, tak po napsání "ne" se mu to vyhodnotí a napíše to buď remíza, prohra apod. Když si ale hráč bere přes "ano" další a další karty, tak jde překročit číslo 21 lehce (21 má být limit k výhře, protože čím blíž jste tomu číslu, tak tím určí jestli vyhraje hráč nebo počítač, kdo je blíž vyhrává) Já ale překročit číslo 21 po přidávání karet přes "ano" nechci. Zkoušel jsem to obejít amatérsky přes to

else if (kartyHrace >21)
{

Console.WriteLine("Přesáhl/a jste limit. Prohráváte ! ");

}

Jenže u tohohle musí hráč po překročení limitu napsat "ne". Rád bych, aby to automaticky vyhodilo nějakou tu hlášku při (číslo > 21).
Co se týče goto, tak jsem to našel tuhle hru v jedné knížce na jednoduché hry, tam to ale není pojištěné vůbec a při překročení čísla 21 nedokáže hra dál odpovědět. Proto jsem to amatérsky obešel, protože jsem začátečník a jinak jsem to nevymyslel :D Díky moc za pomoc, doufám že jsem svůj problém popsal lépe :D

Editováno 14. března 18:48
 
Nahoru Odpovědět 14. března 18:45
Avatar
Odpovídá na Petr Bílí
Michal Štěpánek:14. března 23:08

Stačí si někam (do nějaké proměnné) ukládat součet hodnot na kartách, které se "rozdávají" hráči. Po rozdání každé karty se její hodnota přičte a zkontroluje se součet. Dokud je součet menší než 21, nabídne možnost líznutí další karty Jakmile se nějakou kartou dostanu přes 21, vyskočí hláška a další kartu už nenabídne...

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 14. března 23:08
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.