Gymnázium, Praha 6, Arabská 14 předmět Programování, vyučující Tomáš Obdržálek
Karty Prší ročníkový projekt, Tomáš Krejča 1E květen 2014
Anotace: Mým cílem bylo vytvořit simulátor karetní hry prší. Hráč hraje proti počítači. Prostředí je zpracováno textově. Každý tah se vypíše jaká karta je na vrchu a jaké karty má hráč u sebe. Pote hráč napíše jakou kartu hraje, nebo zda si líže kartu z balíčku.
Abstract: My goal was to create a simulation of Prší card game. The user plays against the computer. The environment is made in text form. Every turn the program writes which card is on the top of the deck and which cards the player has. Then player writes which card he plays or if he takes a card from the deck.
2
Karty Prší Tomáš Krejča Karty Prší je počítačový provedení tradiční stejnojmenné hry -Hráč se střídá v tazích proti počítači -Grafické zpracování v podobě stolu s taženými kartami a kartami hráče
3 Karetní hra prší Hra je v Evropě známa pod názvem Pony. Vznik je odhadován na polovinu 20.století. Hraje se s mariášovými kartami, většinou hraje 2-6 hráčů.
Pravidla Každému hráči se rozdá 5 karet. Jedna karta se položí lícem nahoru a zbytek karet v balíčku se otočí lícem dolů. Vybere se první hráč a ten musí zahrát kartu se stejnou barvou nebo stejnou hodnotou jako je otočená karta. Kartu pokládá navrch otočené karty. Jestliže takovou kartu nemá, musí si líznout kartu z balíčku. Vyhrává hráč, kterému nezbyde žádná karta.
Speciální karty Ve hře se také nacházejí speciální karty a to sedma, svršek a eso. V případě, že je na vrchu odkládacího balíčku (místo, kam se pokládají zahrané karty) sedma, hráč může zahrát pouze jinou sedmu, nebo si musí líznout 2 karty. Je-li na sebe položeno více sedmiček, hráč si líže 2 karty za každou sedmičku. Svrška může hráč zahrát na jakoukoliv barvu předešlé karty a poté určí barvu, podle které musí hrát hráči po něm. Když hráč zahraje eso, tak další hráč musí také zahrát eso nebo tzv. stojí. To znamená že je jeho tah přeskočen.
Jiné varianty hry V prší je možné provádět různé variace. Nejznámější je, že červená sedma vrací hráče do hry. Když je červená karta zahrána na hráče, který odhodil poslední kartu, hráč se vrací do hry tím, že si lízne 2 karty. Hra jde taky rozšířit o speciální vlastnost zeleného krále. Hráč na kterého je král zahrán si líže 4 karty. Jiná varianta nabízí speciální vlastnost osmičky, která když se zahraje, tak se změní směr otáčení hráčů. Na tuto osmičku však další hráč může vyložit jakoukoliv kartu. Pro prodloužení hry slouží varianta, při které nelze zahrát sedmičku jako poslední kartu. Pro více her je možná varianta, v které výherce dostává příští hru vždy o kartu méně (případně ten, kdo prohraje o kartu více). Komu není rozdána už ani jedna karta, vyhraje.
4 Prostředí hry Hra se hraje pomocí příkazů v konzoli. Na začátku se vypíše vrchní karta a karty hráče. Tyto jednotlivé sekce jsou odděleny pomlčkami pro lepší přehlednost. Konec každého kola je oddělen delší pomlkovou čárou. V sekci počítače je zaznamenáván jeho tah(,,počítač stojí“, ,,počítač si lízl kartu“).
Ovládání hry Všechny příkazy se píší velkými písmeny, bez háčků a čárek. Na začátku hry se vypíše jaká karta je na vrchu lízacího balíčku a jaké karty má hráč v ruce. Hráč si může líznout kartu příkazem „KARTA“. Do konsole může vypsat kartu, kterou chce zahrát. Např. „ZELENA OSMA“, „KULE KRAL“. Poté se opět vypíše karta na vrchu odkládacího balíčku (ta, kterou zahrál počítač). Hra oznámí, pokud si počítač lízl kartu (jestliže si počítač lízl více karet, konsole vypíše jejich počet). Pak je hráč opět dotázan na svůj tah. Jestliže je na vrchu odkládacího balíčku ESO, hráč může zahrát pouze svoje eso nebo napsat příkaz ,,STOJIM“. Pokud hráč chce zahrát svrška, nejprve musí zadat příkaz „SVRSEK“. Tento příkaz může zadat kdykoliv, pokud zrovna nemusí zahrát eso nebo sedmu. Hra se zeptá, kterého svrška chce hráč zahrát (hráč musí zadat jméno karty, např SRDCE SVRSEK).
5 Nakonec hráč napíše na jakou barvu chce změnit (opět velkým písmem bez diakritiky, např ZELENA, KULE).
Datové struktury Hra je založena na používání kolekcí, v kterých se ukládají karty. Každou kartu představuje jeden objekt s vlastnostmi Typ a Barva. Program obsahuje celkově šest kolekcí. 1. Kolekce hrac obsahuje karty hráče. 2. Kolekce pocitac obsahuje karty počítače. 3. Kolekce balicek obsahuje všechny karty před tím, než se rozdají. 4. Kolekce lizaciBalicek obsahuje balíček s kartami určenými k lízání. 5. Kolekce odkladaciBalicek obsahuje zahrané karty. 6. Kolekce mezikrokPocitac obsahuje karty počítače, mezi kterými se rozhoduje jakou kartu zahraje.
Začátek hry Jako první se naplní kolekce balicek. Ke každé barvě se přiřadí jeden typ. Vznikne tedy 32 objektů, které se vloží do kolekce. Tato kolekce se nakonec příkazem Collections.shuffle(balicek) promíchá, tudíž každá hra je jiná. public void naplnBalicek() { for (Barva barva : Barva.values()) { for (Typ typ : Typ.values()) { balicek.add(new Karta(barva, typ)); } } Collections.shuffle(balicek); }
Z této kolekce poté rozdám karty mezi hráče a počítač. Každý dostane 5 karet. Zbylé karty se vloží do lízacího balíčku.
6 Herní mechanismus počítače Počítač se nejprve zeptá, jestli je nějaká speciální karta na vrchu odkládacího balíčku. Pro každou speciální kartu existuje speciální metoda, v které počítač buď stojí (líže 2 karty) nebo zahraje vlastní speciální kartu. U obyčejný karty, počítač vloží do kolekce mezikrokPocitac všechny karty, které může zahrát podle shodné barvy a poté všechny karty, které může zahrát podle shodného typu. Z této kolekce vybere náhodnou kartu, kterou zahraje a zbytek vrátí zpět do své kolekce. public void pocitacVyberKarty() { if (mezikrokPocitac.isEmpty()) { pocitac.add(0, lizaciBalicek.get(0)); lizaciBalicek.remove(0); System.out.println("počítač si lízl kartu"); } else { int j = random.nextInt(mezikrokPocitac.size()); odkladaciBalicek.add(0, mezikrokPocitac.get(j)); mezikrokPocitac.remove(j); for (Karta m : mezikrokPocitac) { pocitac.add(m); } mezikrokPocitac.clear(); } }
Kontrola průběhu hry V metodě nazvané hra se kontroluje, zda hráč nebo počítač již nezhráli všechny své karty. Také se zde kontroluje, jestli jsou nějaké karty v lízacím balíčku. Jestliže nejsou, vrátí se zpět do kolekce karty z odkládacího balíčku. Třetí funkce metody je střídání tahu hráče a počítače, dokud jeden z nich nevyhraje.
Problémové části Čistý herní mechanismus byl napsaný hned. Problém začal, když jsem chtěl dovnitř zakomponovat speciální karty. Začaly se mi hromadit do pár metod veliké množství podmínek a for cyklů. Začal jsem se ztrácet a potom už jsem nebyl schopný program vůbec upravovat a začal jsem to vzdávat. Jakmile jsem si program rozdělil do mnoha metod, najednou to šlo mnohem rychleji a mohl jsem se zase pohnout z místa a program dokončit. Pro příště jsem se aspoň už poučil.
7 Zhodnocení a závěr Když jsem si vymýšlel téma, nečekal jsem, že tato hra bude pro mne tak náročná. Na programu jsem pracoval necelý 3 týdny. Velkou část času mi zabralo pracování na grafickém prostředí, které jsem bohužel nestihl dokončit. Na začátku jsem stěží věděl, co jsou to objekty a ke konci jsem se naučil s nimi dobře pracovat. Během těchto týdnů jsem se naučil mnoho a provedl jsem asi největší skok v programování. Nakonec jsem tento schod zdolal. Jsem za tento ročníkový projekt vděčný, jelikož jsem se teprve teď plně vžil do programování a jsem si jistý, že v něm chci pokračovat.
Budoucnost projektu Jakmile se naučím lépe pracovat s JPanelem, hodlám dodělat grafické prostředí a až budu mít delší chvíli, rád bych vylepšil i umělou inteligenci při rozhodování počítače, jakou kartu zahraje. Nakonec bych rád tuto hru použil jako aplikaci pro mobil, abych mohl mít tento můj první skutečný projekt stále u sebe.
Prohlášení Prohlašuji, že jsem jediným autorem tohoto projektu, všechny citace jsou řádně označené a všechna použitá literatura a další zdroje jsou v práci uvedené. Tímto dle zákona 121/2000 Sb. (tzv. Autorský zákon) ve znění pozdějších předpisů uděluji bezúplatně škole Gymnázium, Praha 6, Arabská 14 oprávnění k výkonu práva na rozmnožování díla (§ 13) a práva na sdělování díla veřejnosti (§ 18) na dobu časově neomezenou a bez omezení územního rozsahu.
Zdroje https://cs.wikipedia.org/wiki/Pr%C5%A1%C3%AD