Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
discount week 30 halloween

Diskuze: Pomoc s lehkou karetní hrou (Konzolová aplikace)

Aktivity
Avatar
Petr Bílí :13.3.2018 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.3.2018 18:43
 
Odpovědět
13.3.2018 18:41
Avatar
Petr Bílí :13.3.2018 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.3.2018 18:55
Avatar
Mára
Člen
Avatar
Odpovídá na Petr Bílí
Mára:14.3.2018 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.3.2018 6:37
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Jakub Augusta:14.3.2018 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.3.2018 9:45
Nahoru Odpovědět
14.3.2018 9:44
if(true == false) { Tu: DoDis() } else goto Tu;
Avatar
Petr Bílí :14.3.2018 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.3.2018 18:48
 
Nahoru Odpovědět
14.3.2018 18:45
Avatar
Odpovídá na Petr Bílí
Michal Štěpánek:14.3.2018 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.3.2018 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.