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í.

Diskuze: Machr na algoritmy - Náhodný příběh RPG hry

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

Aktivity
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:30.9.2013 19:44

Ahoj, vítám vás u pravidelné minisoutěže na tento týden, ve které se hraje o placku Machr na algoritmy (případně o Machr na C#, Javu nebo PHP, pokud již algoritmy máte). Na posledním srazu jsme probírali se Saťasem 3D RPG hru, kterou programují s Luckinem. Bavili jsme se o tom, že by byl zajímavý úkol vygenerovat náhodně příběh, aby byla každá hra unikátní. Generování náhodných prostor jsme tu již měli, když se to spojí s aktuálním tématem, mohla by vzniknout zajímavá hra :) Samozřejmě kdo jiný vyřeší otázku, zda lze náhodně generovat příběh hry, než komunita devbooku? :P

Máte za úkol navrhnout algoritmus, který vygeneruje kompletní příběh ke hře. Každé spuštění algoritmu pochopitelně vygeneruje jiný příběh. Není dané, jak má příběh vypadat. Pokusil jsem se vypracovat ukázkový výstup, který by skript mohl při některém spuštění vygenerovat:

Úvodní text
===========
Již od dětství jsi slýchával příběhy o jeskyni, která je ukryta hluboko
v lesích. Prý v ní straší a ukrývá tak strašné tajemství, že se jí lidé
vyhýbají. Rozhodl jsi se tuto pověru vyvrátit a les prohledat.

Levely
======
Celkem: 4

Les
---
Typ: venkovní
Popis: Tobě dobře známý les
Východy: Odlehlá část lesa
Předměty: houba
Nepřátelé: divočák, vlk
Osoby: poutník, říká: "Neměl bys tu chodit sám."

Odlehlá část lesa
-----------------
Východy: Les, Jeskyně
Typ: venkovní
Popis: Odlehlá část lesa
Předměty: kyj, hrob, náramek
Nepřátelé: bandita, vůdce vlčí smečky, vlk
Osoby: nikdo

Jeskyně
-------
Východy: Odlehlá část lesa, Hrobka
Typ: podzemí
Popis: Jeskyně, ve které prý straší
Předměty: lebka, dveře, svíčka, tajné tlačítko, tajné dveře
Nepřátelé: kostlivec
Osoby: nikdo

Hrobka
------
Východy: Jeskyně
Typ: podzemí
Popis: Hrobka, skrývající tajemství
Předměty: klenoty
Nepřátelé: nikdo
Osoby: mrtvola, má u sebe vzkaz: "Zazdili mě, aby mohli ukrást mé bohatství"

Konečný text
============
Odhalil jsi strašné tajemství jeskyně. Bohužel to nebyla jen pověra a dokázal
jsi pravý opak.

Snažte se samozřejmě, aby příběhy dávaly smysl. Jakým způsobem to uděláte a jak složité budou záleží jen na vás. Určitě se nevyhnete určité kostře nebo kostrám, ze kterých se bude vybírat, případně které se budou kombinovat, aby to nebylo na první pohled nápadné.

Můžete použít libovolný programovací jazyk. Čas jako vždy do neděle 6.10. do 18:00 hodin.

Editováno 5.10.2013 10:51
Odpovědět
30.9.2013 19:44
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Luboš Běhounek Satik:30.9.2013 19:48

"Saťasovu 3D RPG"
To je ještě daleko, ještě nemáme ani finální verzi střílečky.
A přece bych nemohl Luckina nahradit nějakým náhodným algoritmem... :D

Nahoru Odpovědět
30.9.2013 19:48
https://www.facebook.com/peasantsandcastles/
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Luboš Běhounek Satik
David Hartinger:30.9.2013 19:50

Nojo, vidíš, mám tě na tu hru moc fixovaného, hned ho tam doplním :) Luckin ti napíše kostru algoritmu, je stále nenahraditelný :D

Nahoru Odpovědět
30.9.2013 19:50
New kid back on the block with a R.I.P
Avatar
Odpovídá na Luboš Běhounek Satik
Vojtěch Pospíchal:30.9.2013 19:53

Tak 3D RPG jo? To je sakra velký sousto! Držím ti palce :D

 
Nahoru Odpovědět
30.9.2013 19:53
Avatar
Lukáš Hruda
Tvůrce
Avatar
Odpovídá na David Hartinger
Lukáš Hruda:30.9.2013 19:53

Tu si může napsat sám, ale lepší příběh než já to nenapíše :D

 
Nahoru Odpovědět
30.9.2013 19:53
Avatar
Michal Žůrek - misaz:30.9.2013 20:01

vzhledem k složitosti předpokládám že tu nebude vysoká účást, ale nechci předpovídat. Třeba bude generátor dělat celý devbook.

 
Nahoru Odpovědět
30.9.2013 20:01
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michal Žůrek - misaz
David Hartinger:30.9.2013 20:09

Ono to nebude tak těžké, spíš to chce fantazii, než programátorské skills.

Nahoru Odpovědět
30.9.2013 20:09
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:30.9.2013 20:16

Musí tam být nějaké vstupy? Jako např. kde se bude hra odehrávat, a kolik levlů tam bude, nebo jde jen o to vytvořit náhodný příběh?

Nahoru Odpovědět
30.9.2013 20:16
Neaktivní uživatelský účet
Avatar
Silvinios
Tvůrce
Avatar
Odpovídá na David Hartinger
Silvinios:30.9.2013 20:45

Nemá to být spíš textovka než RPG hra?

 
Nahoru Odpovědět
30.9.2013 20:45
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Silvinios
Kit:30.9.2013 20:46

Však to je jedno a totéž.

Nahoru Odpovědět
30.9.2013 20:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na Kit
TomBen:30.9.2013 21:07

No, tak úplně totéž to není, ale pro tyhle účely
to jako hrubé zjednodušení postačí. :-)

Nahoru Odpovědět
30.9.2013 21:07
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na TomBen
Kit:30.9.2013 21:15

Hrál jsi někdy Dračí doupě nebo Diablo?

Nahoru Odpovědět
30.9.2013 21:15
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
TomBen
Tvůrce
Avatar
Odpovídá na Kit
TomBen:30.9.2013 21:19

Samozřejmě. :-)

Nahoru Odpovědět
30.9.2013 21:19
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Odpovídá na Vojtěch Pospíchal
Luboš Běhounek Satik:30.9.2013 21:27

Jen pseudo3D - na enginu Nightmare3D, te hry, co jsme ji meli v soutezi Magicke leto.

Kit : Hehe, zrovna Draci Doupe jdeme hrát tuhle sobotu a Diablo jsem už tak 2 měsíce nehrál, ale asi počkám až na nový rok, kdy mají vydat větší patch na Diablo3 :)

Nahoru Odpovědět
30.9.2013 21:27
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na David Hartinger
Michael Olšavský:1.10.2013 8:30

V tom tvém příkladu není možnost výběru. Má to být tedy RPG nebo textovka? V RPG si mohu svůj příběh rozvětvovat sám. V textovce by byl nalinkovaný od spuštění hry. Ale to by v tomto případě asi nevadilo, protože když to bude spojené s nějakou hrou, tak tam se bude odehrávat něco mezi. Já bych byl pro obyčejnou textovku.

 
Nahoru Odpovědět
1.10.2013 8:30
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:1.10.2013 8:35

Nic není pevně dané, pokud se ptáš na tohle. Prostě spustíš skript a měl by vypsat něco jako jsem uvedl v zadání. Spustíš ho podruhé a vypíše jiný příběh v jiném prostředí a jinými levely.

Nahoru Odpovědět
1.10.2013 8:35
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Michael Olšavský
David Hartinger:1.10.2013 8:36

Je to RPG jak je zadáno, ale na funkci by to stejně nemělo mít vliv.

Nahoru Odpovědět
1.10.2013 8:36
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:1.10.2013 15:30

Tak abych šel vylepšovat <a href="http://­projekty.danvi­tek.cz/soutez-generator-vet/" target="_blan­k">svůj generátor vět</a> :D :D

Nahoru Odpovědět
1.10.2013 15:30
Neaktivní uživatelský účet
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na David Hartinger
Ondrca:1.10.2013 20:43

Mohl bych se vždyžtak zúčastnit s Javascriptem?

Nahoru Odpovědět
1.10.2013 20:43
Zase jsem o něco chytřejší
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Ondrca
Kit:1.10.2013 20:46

Cite sdraco: Můžete použít libovolný programovací jazyk

Kdysi jsem si něco takového v Javascriptu udělal. Bylo fajn, jak to bylo pekelně rychlé.

Nahoru Odpovědět
1.10.2013 20:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na Kit
Ondrca:1.10.2013 20:48

Díky

Nahoru Odpovědět
1.10.2013 20:48
Zase jsem o něco chytřejší
Avatar
KlimiCZ
Člen
Avatar
Odpovídá na Neaktivní uživatel
KlimiCZ:1.10.2013 21:08

Tomu říkáš náhoný generátor vět , mně to vygenerovalo "Bílý malý potkan mlátil kladivem do počítače" To se mně zdá normální v dnešní době :D

Nahoru Odpovědět
1.10.2013 21:08
Nesnaž se zakrýt něco, co jsi provedl úmyslně. Svět je tak malý, že dotyčný se to stejně dozví.
Avatar
Odpovídá na KlimiCZ
Neaktivní uživatel:3.10.2013 14:13

Náhodný generátor vět je o tom, aby generoval náhodné, tím i nesmyslné věty..

Nahoru Odpovědět
3.10.2013 14:13
Neaktivní uživatelský účet
Avatar
Ondrca
Tvůrce
Avatar
Ondrca:4.10.2013 20:58

Ahoj, zde přidávám svůj výtvor:
http://www.uschovna.cz/…C5G3P493-FHY
Jednotlivé levely se bohužel mohou opakovat, ale co - kyrandia 1 taky měla více lesů jako levely :D

Nahoru Odpovědět
4.10.2013 20:58
Zase jsem o něco chytřejší
Avatar
next-x
Neregistrovaný
Avatar
next-x:4.10.2013 22:56

tak se ucastnuji se svym dilem v C# dilo je vcetne zdrojoveho kodu.

<a href="http://­uloz.to/xXzn7keW­/algoritmy-zip">http://u­loz.to/xXzn7keW­/algoritmy-zip</a>

prosil bych jeste o nejakou pripadnou kritiku co by se dalo zlepsit.

 
Nahoru Odpovědět
4.10.2013 22:56
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:4.10.2013 23:30

Ano. Slyšel jsi někdy o konstrukci switch?

 
Nahoru Odpovědět
4.10.2013 23:30
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:4.10.2013 23:42

Tyvole nesnáším edit!!!

5 minut mu tu píšu komentář ke kódu, protože mám dobrou náladu, aby se zlepšil a pak to odešlu a voalá je to fuč. DAMN!

No abys ten kód zlepšil:
Stačí ti jedna instance třídy Random. Ty výrazy hoď do pole a generuj to náhodné číslo pomocí velikosti toho pole (indexuje se od 0 do Length -1) -> zbavíš se tak těch nesmyslných if-else if-else if... a bude to na pár řádků :)

Ještě taková rada ke konvencím. Ty proměnné jako DobaRandom, OneItemsRandom by měly začínat malým písmenem a pak každé nové slovo velkým.
Zkus zkratku CTRL+E a pak D - narážím nato, že vidím že ten text tabuješ a hned mi to bije do očí, protože to je jinak odsazené než jsem zvyklý.

Editováno 4.10.2013 23:46
 
Nahoru Odpovědět
4.10.2013 23:42
Avatar
Osel
Člen
Avatar
Osel:4.10.2013 23:44

Nemám co dělat, zkusím taky něco uškudlit ... :)

 
Nahoru Odpovědět
4.10.2013 23:44
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:4.10.2013 23:57

Špagety mám raději na talíři. Co takhle ten program rozčlenit do tříd? Jedna třída na dobu, jedna na nepřítele, jedna na item,...

Nahoru Odpovědět
4.10.2013 23:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Osel
Člen
Avatar
Osel:5.10.2013 10:42

Deadline je 29.10. ? o_O Vždycky, jsou na týden machři ne? Takže zítra by měla být :D

 
Nahoru Odpovědět
5.10.2013 10:42
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Osel
Petr Nymsa:5.10.2013 10:44

Jo zítra, sdraco zas jenom neumí datumy :P

Nahoru Odpovědět
5.10.2013 10:44
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Petr Nymsa
David Hartinger:5.10.2013 10:52

Jenom počkejte, já si na to napíšu skript :D

Nahoru Odpovědět
5.10.2013 10:52
New kid back on the block with a R.I.P
Avatar
Ondrca
Tvůrce
Avatar
Ondrca:5.10.2013 20:19

Ahoj, zde je verze 1.1:
http://www108.uschovna.cz/…RN2TAZA6-T3W

Nahoru Odpovědět
5.10.2013 20:19
Zase jsem o něco chytřejší
Avatar
Neaktivní uživatel:5.10.2013 21:03

Také se hlásím :P
http://projekty.danvitek.cz/…tor-pribehu/ - Možná to ještě trochu doupravím :)

Nahoru Odpovědět
5.10.2013 21:03
Neaktivní uživatelský účet
Avatar
Ondrca
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Ondrca:5.10.2013 21:29

Tohle se ti povedlo:
Předměty Neznámý předmět (říkají mu tam jídlo)
:D

Editováno 5.10.2013 21:30
Nahoru Odpovědět
5.10.2013 21:29
Zase jsem o něco chytřejší
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Ondrca
Kit:5.10.2013 21:33

Horší by bylo, kdyby jídlo pro ně bylo neznámým předmětem :)

Nahoru Odpovědět
5.10.2013 21:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Nahoru Odpovědět
5.10.2013 21:36
Neaktivní uživatelský účet
Avatar
next-x
Neregistrovaný
Avatar
next-x:5.10.2013 21:58

takze jsem udelal verzi 1.2 poupraje par detailu p4koo, ja s polema jeste bohuzel neumim, a Kit a třídy taky ne, naposledy jsem četl cykly - zakladní konstrukce, už to asi během jednoho dne a pár hodin nestihnu, ale zkusím se to naučit dál :)

<a href="http://­uloz.to/xcEm426z­/algoritmy-zip">http://u­loz.to/xcEm426z­/algoritmy-zip</a>

 
Nahoru Odpovědět
5.10.2013 21:58
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:5.10.2013 22:11

Cože? Neumím s polem a třídami? Příště si rozmyslím, než ti něco poradím.

Nahoru Odpovědět
5.10.2013 22:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
mariaanko
Člen
Avatar
mariaanko:5.10.2013 22:23

skusim to vytvorit v pythone ak nevadi :( hodi sa mi do RPG systemu co chcem robit.
kod sem capnem pod MIT licenciou :(

 
Nahoru Odpovědět
5.10.2013 22:23
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na
Jan Vargovský:6.10.2013 1:06

Trošku jsem nezaznamenal nějaký improve codu. Pro příklad to přepiš alespoň takhle:

Random rand = new Random();
            string[] foo = { "foo1", "foo2", "foo3", "foo4", "foo5", };
            string selectedFoo = foo[rand.Next(foo.Length)];

Takhle pak budeš mít jen jednotlivé názvy v tom poli a vybereš si jeden prvek z pole -> každý ten select bude mít pár řádků. Nezapomeň nato, že instance třídy Random ti stačí jednou a nemusíš ji vytvářet pro každé generování zvlášť !

 
Nahoru Odpovědět
6.10.2013 1:06
Avatar
Odpovídá na Jan Vargovský
Michael Olšavský:6.10.2013 8:37

To uz jsem mu psal. Ale on nechtěl. Ještě to pry neumí, tak to tam nebude dávat.

 
Nahoru Odpovědět
6.10.2013 8:37
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Kit:6.10.2013 8:58

Byl jsem příjemně překvapen, že mi to jelo hned napoprvé. To se mi moc často nestává. Trošku jsem mu to vylepšil, asi takto:

class MainClass {
    static Random rand = new Random();

    static string Vyber(string[] polozky) {
        return polozky[rand.Next(1, polozky.Length)];
    }

    public static void Main (string[] args) {
        //druhy tajemstvi
        string tajemstvi = Vyber(new string[] {"strašné", "zlé", "..."});
        //co mohl poslouchat
        string legenda = Vyber(new string[] {"legendy", "příběhy", "..."});

//...

... a teď si mě můžete dobírat kvůli statice :)

Nahoru Odpovědět
6.10.2013 8:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
next-x
Neregistrovaný
Avatar
next-x:6.10.2013 9:37

p4koo diky moc za radu, poupravil jsem jen nejake veci, protoze dnes nemam moc cas, ale zkusim jestli to stihnu jeste dodelat :)

verze 2.0
<a href="http://­uloz.to/xauMqu­cE/algoritmy-zip">http://u­loz.to/xauMqu­cE/algoritmy-zip</a>

brisingre, ja nevedel ze je to tak jednoduche, kod se mi ukratil uz jen ted asi o 100 radku.

 
Nahoru Odpovědět
6.10.2013 9:37
Avatar
adas
Tvůrce
Avatar
Odpovídá na Jan Vargovský
adas:6.10.2013 10:20

Je lepší pole stringů anebo list ?

 
Nahoru Odpovědět
6.10.2013 10:20
Avatar
Kit
Tvůrce
Avatar
Odpovídá na adas
Kit:6.10.2013 10:30

Lepší je List, ale pole stringů se snáze inicializuje. Řešením je převádět tyto struktury dle potřeby.

Nahoru Odpovědět
6.10.2013 10:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:6.10.2013 10:32

List lze v C# založit i z pole, takže je to na 1 řádek.

Nahoru Odpovědět
6.10.2013 10:32
New kid back on the block with a R.I.P
Avatar
adas
Tvůrce
Avatar
Odpovídá na Kit
adas:6.10.2013 10:32

Děkuji, já jsem taky použil list, ale raději se zeptám odborníků :D

 
Nahoru Odpovědět
6.10.2013 10:32
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Kit:6.10.2013 10:33

Koukám, že sis oblíbil názvy "foo", "bar", ... Četl jsem jeden manuál, ve kterém se to těmito názvy jen hemžilo a bylo to dost nepřehledné. Chybí jim totiž sémantika, která je pro pochopení účelu důležitá.

Nahoru Odpovědět
6.10.2013 10:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
 
Nahoru Odpovědět
6.10.2013 10:38
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 50 zpráv z 87.