Diskuze: Kontrola kódu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
asi to bude chtit vic studovat 
xyz) proč se mi po přečtení návodu vypne hra;
xyz)chybí ošetření jiných vstupů při prvním switchi (a,b,c)
xyz)
"Nim je hra, kde můžete odebrat 1 až 3 zápalky z hromady,\nkde jich bude 10 až 100.
cislo.Next(10, 21);
Zkus popsat slovně jak má ta hra fungovat a já ti ukážu, jak by to mohlo
vypadat 
Já jsem to upravoval a zapomněl jsem to přepsat v návodu, protože u
počtu sirek větší jak 20 už to bylo hodně na dlouho;
Zapoměl jsem napsat, abych se po přečtení návodu vrátil do menu;
Na tohle jsem taky zapomněl
;
Je to moje první aplikace, kterou nedělám podle tutoriálu, tak jsem chtěl
aby jste my pomohli odhalit chyby, abych je už nedělal
Vybereš si v menu nová hra, náhodně se ti vygeneruje počet sirek od 10 do 20, potom si vybereš jestli budeš začínat ty a nebo PC a střídáte se v odbírání 1-3 sirek za kolo. Kdo odebere jako poslední vyhrál.
A víš o tom, že vždy existuje vyhrávající strategie pro jednoho z
hráčů? 
Vím, ale zatím jsem to neupravoval, později udělám náročnější verzi, aby to nebylo tak lehké najít.
Vždy když vidím někde v kódu "neuvážené" goto, tak mě v noci budí noční můry z raptorů (viz. obrázek).
PS: Vyhýbej se goto, nebo Tě sežere raptor.. True story.
internal static class Program
{
[STAThread]
private static void Main(string[] args)
{
Console.WriteLine("Chceš začít? ano/ne");
Player playerOnTurn = Console.ReadLine().ToLower() == "ano" ? Player.Human : Player.Pc;
Console.WriteLine("Kolik sirek? (10-20)");
int matchesCount = int.Parse(Console.ReadLine());
Console.Clear();
while (matchesCount > 0)
{
Console.WriteLine("Kolik sirek chceš odebrat? (1-3) Je jich aktualne {0}",
matchesCount);
int minus = 0;
if (playerOnTurn == Player.Human)
minus = int.Parse(Console.ReadLine());
else
minus = (matchesCount % 4 == 0) ? 1 : matchesCount % 4;
Console.WriteLine("Hráč {0} odebral {1} z celkoveho poctu {2}",
playerOnTurn,
minus,
matchesCount);
matchesCount -= minus;
if (matchesCount > 0)
playerOnTurn = (playerOnTurn == Player.Human) ? Player.Pc : Player.Human;
Console.WriteLine();
}
Console.WriteLine("Vyhrál "+ playerOnTurn.ToString());
}
}
enum Player
{
Pc, Human,
}
A teď mi budeš muset pár věcí objasnit
.
Co je za a) tohle
[STAThread]
b)proč je u třídy internal
c)Player playerOnTurn = Console.ReadLine().ToLower() == "ano" ? Player.Human :
Player.Pc;
d)minus = (matchesCount % 4 == 0) ? 1 : matchesCount % 4;
e)playerOnTurn = (playerOnTurn == Player.Human) ? Player.Pc : Player.Human;
f)Console.WriteLine("Vyhrál " + playerOnTurn.ToString());
Promiň, že tě tak otravuju.Díky za všechno.
S pozdravem GunSpawn
Ani to nemusíš chápat, ono to tam VS za tebe dává automaticky 
Je to v podstatě jednořádková podmínka (odborně ternární operátor). Dá se to napsat i jako:
if(Console.ReadLine().ToLower() == "ano")
playerOnTurn = Player.Human;
else
playerOnTurn = Player.Pc;
vždycky ti to přiřadí zbytek po
dělení 4. Dělá to úplně to samé co máš ty ve svém kódu, takže jestli
jsi ho psal, měl by jsi to chápat. Zase se to dá napsat do normálních
podmínek jako:if(matchesCount % 4 == 0)
minus = 1
else
minus = matchesCount % 4;
Tuhle hru už jsem viděl, stačí, aby člověk udělal 1 chybu a už
nemůže vyhrát 
Zobrazeno 14 zpráv z 14.
