NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.
Avatar
Vojtěch Stejskal:19.3.2018 11:05

Dobrý den, potřeboval bych poradit s naprogramováním hry "tahání sirek". Nevím moc jak do toho. Zkoušel jsem něco pomocí for, ale tudy cesta zřejmě nepovede. Je tu někdo, kdo byl ochotný a zkusil naprogramovat tuto aplikaci? Předem mockrát děkuji.
ZADÁNÍ:
Vytvořte hru sirky:
a. Hra bude začínat na 13ti sirkách, odebírat budete na střídačku 1-3 sirky
b. Vykreslete na konzoli 13 sirek, počet se bude snižovat dle počtu zbývajících sirek
c. Kdo vezme poslední sirku, ten prohrává
d. Vytvořte umělého protihráče:
i. Počet sirek odebraných na počátku hry počítačem generujte náhodně
ii. Pokud zbývají dvě sirky, odebere jednu
iii. Pokud zbývají tři sirky, odebere dvě
iv. Pokud zbývají 4, odebere 3
v. Pokud zbývá 5, odebere náhodně
vi. Pokud zbývá 6-8, odebere tak, aby zbylo 5 sirek
int a = 1;
int b = 100;
Random rn = new Random();
int c = rn.Next(a, b);

 
Odpovědět
19.3.2018 11:05
Avatar
zelvicek
Člen
Avatar
zelvicek:19.3.2018 11:17

Možná, že se někdo takový najde, ale v mezičase to můžeme zkusit dát dokupy - tedy pokud máš zájem.

Nepíšeš svou úroveň znalostí ani zázemí, tak to vezmem od nuly.

  1. předpoklad: máš nějaké novější windows.
  2. stáhni si Visual Studio 2017 community - je zdarma; a nainstaluj. Asi by to šlo i v menším VS Code, ale s tím neumím.
  3. spusť VS.
  4. vytvoř project typu "Console Application".

Až to budeš mít, napiš, můžem pokračovat.

Editováno 19.3.2018 11:18
 
Nahoru Odpovědět
19.3.2018 11:17
Avatar
Odpovídá na zelvicek
Vojtěch Stejskal:19.3.2018 11:45

Toto už všechno mám hotová. Už nějaký čas programuji. Ano, jsem teprve na začátku, ale máme nyní úkol udělat výše popsaný program.Nevím jak na to. Nejedná se o vytváření grafiky. Sirky chci zobrazit pouze pomočí "hvězdiček(*)".

Editováno 19.3.2018 11:47
 
Nahoru Odpovědět
19.3.2018 11:45
Avatar
zelvicek
Člen
Avatar
Odpovídá na Vojtěch Stejskal
zelvicek:19.3.2018 12:48

Máš tedy problém s použitím Console.Write("*")?
A dále: nemohl by ses trošku rozepsat, co nevíš/co jsi na těch fórech nenašel? Dost by to celou věc urychlilo.

 
Nahoru Odpovědět
19.3.2018 12:48
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Vojtěch Stejskal
Martin Petrovaj:19.3.2018 14:39

Prepáč, že začnem najprv v trochu negatívnejšom duchu, ale:

  • na tomto fóre ti aplikáciu ani domácu úlohu do školy ľudia nenaprogramujú. Maximálne ti môžeme pomôcť s konkrétnym problémom, či poradiť, ako na to čo najlepšie ísť, naprogramovať to ale musíš sám. Od toho to zadanie máš, aby si sám niečo nové spravil, naučil sa, precvičil atď, nie aby si proste hodil otázku do fóra a čary mary aplikácia. Ak sa ti tak veľmi nechce, hoď to do ponúk práce ako zákazku aj s ohodnotením, aby sme z toho mali niečo aspoň my, lebo ak k tomu budeš pristupovať takýmto spôsobom, ty z toho nič nebudeš mať určite :-) (disclaimer: myslené ironicky)
  • do budúcna skús na pridávanie kódu použiť buď tagy [ code] [ /code] (bez medzier), alebo ich vlož tlačidlom, ktoré vyzerá ako nepárový html tag (v ponuke nad editovacím oknom pre nový príspevok, medzi smajlíkmi a tučným písmom)
  • dávaj svojim premenným zmysluplnejšie mená ako "a", "b" a "c". Prosím. A komentáre (cez //) sú tvoj najlepší kamarát.

    No a teraz k tvojej aplikácii:

  • dôrazne ti odporúčam vždy začať tzv. funkcionálnou dekompozíciou zadania - musíš si úlohu "rozmeniť na drobné" a pre každý menší problém spraviť vlastnú funkciu. Je to síce len jednoduchý program, ale veľmi ti to uľahčí život, napíšeš menej kódu a s menej chybami, plus to bude oveľa prehľadnejšie aj pre teba. Viď ukážka pseudokódu na konci príspevku.
  • ak si preložíme tvoje zadanie do "programátorčiny", hra prebieha dovtedy, kým nie je počet zápaliek (siriek) 0 (resp. 1, ako sa to vezme). No a "dovtedy, kým" je snáď najjasnejší možný hint na cyklus s podmienkou, teda while.
  • počítačom ovládaného oponenta si nechaj na záver. Pokyny pre jeho vytvorenie a fungovanie však máš v podstate už spísané - len prepíš podmienky zo zadania do if-ov alebo switch-u.
private static void VykresliSirky (int pocet)
{
        // vypíš toľko hviezdičiek, koľko máme zápaliek
        for (…)
        {
                Write("*");
        }
}

private static int SirkyOdAI (int pocet)
{
        // if-y alebo switch, jednoducho sa rozhodne, koľko siriek bude chcieť AI potiahnuť
}

private static int Tah (int pocet)      // alebo void Tah (ref int sirky, int pocet)
{
        // kontrola validity zadaného počtu (či nie je viac ako všetkých siriek, či je väčši ako 0 atď)

        // ak použiješ aj parameter ref int sirky, tak tu rovno zmeň hodnotu premennej s počtom siriek
}


public static void Main()
{
        int sirky = 13;
        Random rand = new Random();
        Write("Tu sa vypíšu informácie o hre, ovládaní atď");


        bool jeHracNaTahu = false;      // môžeš zmeniť, aby sa určilo náhodne

        // kým ešte ostali nejaké sirky
        while (…)
        {
                jeHracNaTahu = !jeHracNaTahu;   // na začiatku každého kola prehodíme hráča

                VykresliSirky(sirky)
                int pocet;

                if (jeHracNaTahu)
                {
                        // // načítanie počtu siriek na potiahnutie zo vstupu, môžeš použiť aj TryParse
                        pocet = Int32.Parse(ReadLine());
                }
                else
                {
                        pocet = SirkyOdAI(sirky);
                }

                sirky -= Tah(pocet);    // ak použiješ verziu Tah s ref parametrom, tak len Tah(sirky, pocet);
        }

        // došli nám sirky, zisťujeme, kto vyhral
        if (jeHracNaTahu)
        {
                Write("Poslednú sirku potiahol hráč, hru vyhral počítač!");
        }
        else
        {
                Write("Poslednú sirku potiahol počítač, vyhral si hru!!");
        }

        ReadLine();
}
Nahoru Odpovědět
19.3.2018 14:39
if (this.motto == "") { throw new NotImplementedException(); }
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.