IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

Diskuze: nová iniciallizace číselné proměnné

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
itlady
Člen
Avatar
itlady:28.12.2020 12:56

Ahoj.
Potřebovala bych poradit. Ve while loop do int proměnné přiřadím číslo, při druhém průchodu smyčkou bych potřebovala toto číslo smazat, a poté do proměnné znovu načíst vstup pomocí Console.ReadLine().

Zkusil jsem: Zkoušela jsem int? promenna = null na konci while, ale hodí mi to chybu už na začátku, do prom přiřazuju poprvé.

Chci docílit: Mám funkci pro vykreslení jednoduchého pexesa. Hráč otočí dvě karty, ty se odkryjou. Pokud jsou stejné, nezobrazují se dál. Při dalším otočení potřebuju vynulovat druhou otočenou kartu, protože se mi zobrazuje druhá otočená v prvním tahu a pak první otočená v druhém tahu.

 
Odpovědět
28.12.2020 12:56
Avatar
DarkCoder
Člen
Avatar
Odpovídá na itlady
DarkCoder:28.12.2020 16:05

Pro každou kartu je třeba uchovávat dvě hodnoty - ID obrázku a stav uhodnutí. Karty jsou uloženy ve 2D poli. Na základě stavu uhodnutí se určuje, zda-li se karta vykreslí či nikoli. Cyklus bude obsahovat následující úkony v tomto pořadí: vykreslení, zadání vstupu (výběr dvou karet), validace vstupu, vykreslení s modifikací vstupu, vyhodnocení. Vykreslení s modifikací vstupu se od prvotního vykreslení liší v tom, že se pro danou kartu ověřuje, zda je právě otočena či nikoli. Otočení je určeno zadanými platnými hodnotami na vstupu. Při tom se vykresluje ID obrázku obou karet. Následuje fáze vyhodnocení kde se porovnávají ID obou karet. Pokud jsou stejné, nastaví se stav uhodnutí obou karet na 1 a přičte se bod danému hráči. Pokud jsou různé nastaví se že druhý hráč je na tahu. Body se přidělují při uhodnutí tomu hráči co je zrovna na tahu. Následná iterace cyklu již obsahuje informaci o stavu uhodnutí a zobrazí se tak pouze ty karty, které se mají. Ukončovací podmínka je dána hodnotou součtem bodů obou hráčů při shodě s počtem karet / 2. Po ukončení cyklu se porovnají body obou hráčů a určí se vítěz (pokud je).

Nahoru Odpovědět
28.12.2020 16:05
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
itlady
Člen
Avatar
Odpovídá na DarkCoder
itlady:28.12.2020 17:07

Snad jsem to pochopila dobře ... uživatelem jsou vybrány dvě karty, které se porovnávají se herním pole. OK. Já jsem ale zvolila postup - vyber 1 kartu - otoč 1 kartu - pak vyber 2 kartu - otoč obě karty. V případě že jsou karty stejné, hra pokračuje - opět 1. karta - a zde je problém - karta se sice odkryje, ale zároveň se odkryje i 2. karta z předchozího tahu. Chápu to, mám to tak v podmínce. Zkoušela jsem podmínku změnit, ale už mi dochází nápady. Nebo další možnost bude celý kód přepsat, aby uživatel musel zadat obě karty nejednou (což se mi moc nechce).

Zde je část metody pro výpis pole:

public static void aktualniHerniPole()
                {
                        Console.WriteLine();
                        bool prvniKarta;
                        bool dvojiceKaret;

                        for (int i = 0; i < karty.Length; i++) {
                                prvniKarta = karta1 == i+1;
                                dvojiceKaret = karta1 == i+1 || karta2 == i+1;
                                if (prvniKarta)
                                        Console.Write("  "+ karty[i] + " ");
                                else if (dvojiceKaret)
                                        Console.Write("  "+ karty[i] + " ");
                                else
                                        Console.Write("  " + '█' + " ");
                                if ((i+1)%4 == 0)
                                Console.Write("\n\n");
                        }
                }
 
Nahoru Odpovědět
28.12.2020 17:07
Avatar
DarkCoder
Člen
Avatar
Odpovídá na itlady
DarkCoder:28.12.2020 17:39

Je jedno zda zadávání karet, jejich otáčení a vykreslování probíhá postupně nebo najednou. Vyhodnocování probíhá vždy na konci. Když jsou obě karty stejné, nastavuje se jejich stav uhodnutí na 1 a přidává se hráči bod. Pokud nejsou, stav uhodnutí se nemění, mění se pouze hráč. První vykreslování probíhá bez ohledu na odkryté karty, další už berou ohled. To je důležité. Druhé vykreslování bere v potaz první kartu, třetí vykreslování obě. Následná iterace cyklu jede s čistým štítem, opět si to záda nové vstupy.

Nahoru Odpovědět
28.12.2020 17:39
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na itlady
DarkCoder:28.12.2020 18:10

Ještě jinak, z tohoto Ti to bude jasnější. Pro kartu uchovávej tři hodnoty (ID obrázku, uhodnutí, otočení). A teď k vykreslování. Je-li stav karty uhodnutí na 1, vykresluješ prázdné pole. V opačném případě provádíš další testy. Je-li stav karty otočení na 1, vykresluješ ID obrázku, v opačném případě vykresluješ vrchní část karty.

Nahoru Odpovědět
28.12.2020 18:10
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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 5 zpráv z 5.