Enterprise Forever

:HUN => Programozás => Topic started by: szipucsu on 2017.December.28. 12:09:19

Title: Hogyan írjunk kalandjátékot?
Post by: szipucsu on 2017.December.28. 12:09:19
Szívesen olvasnék arról, hogyan kell szöveges kalandjátékot írni. Elsőre belegondolva ez tűnik a legegyszerűbbnek. Másodikra belegondolva már kicsit bonyolultabbnak tűnik. Csak feltételezem, hogy hasonlóan kell letárolni egy pályát, mint ha pl. karakteres képernyőn tárolnánk le a pacman játék pályáját, csak a navigálás más,és nem jelenik meg maga a pálya olyan módon, mint a pacmanben. De kalandjátékot kilistázva sose láttam data sorokban pályát. Ha így kell letárolni, feltételezem, minden egyes pozícióhoz tartozik egy halom változóérték (tömbökben), hogy milyen tárgyak vannak ott, és milyen tárgyakra használatára mi történik.
Ez csak tipp. Ha én írnék kalandjátékot, biztos így csinálnám.
Írás közben lehet bonyolult, ha alakul a dolog, átírni, hogy ne egy adott szobában legyen valami, hanem egy másikban.
Vagy mondjuk minden szobát egy vagy több hexadecimális szám írna le, melynek az alsó néhány bájtja az ott lévő tárgyakat jelenti, a többi valami mást. De ez is változik a játék során.
Érdekelne, aki elejétől végéig írt már szöveges kalandjátékot, hogyan csinálta.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.28. 12:23:28
Szöveges játék írásáról kérdezett szipucsu. Nos, én elég sokat írtam.
Van egy könyv, "kardhalak és kincsek" vagy ilyesmi a címe, na az egy alapmű a kalandjáték írásban. De én az ottaniakat továbbfejlesztettem, de úgy, hogy igazából leegyszerűsítettem.

De az alapok kb:
-van egy tömb amiben benne van az pályák szövege.
-van egy változó ami tárolja hogy a játékos melyik pályán van.
-van egy tömb, ami tartalmazza hogy egy adott pályáról a különböző irányokba mozogva hányas pályára jutunk. pl ha ez a szám 0 vagy -1 akkor arra nem lehet menni. ebben a tömbben lehet más dolgokat is tárolni, pl. azt hogy az adott irányban az ajtó nyitva van-e.
-van egy tömb, ami a tárgyak helyét határozza meg. ha a tárgy helye 0 akkor az jelentheti azt hogy a játékosnál van. ha -1 akkor sehol sincs.
-a tárgyakat lehet használni különböző flag-ek kezelésére is. pl ha egy kulcs nálunk van akkor ügye a 0-ás pályán van. ha felhasználtuk (kinyitottunk egy ajtót) akkor mondjuk 999-es pályára rakjuk.

Ha még valakit érdekel akkor még írok róla. Én ezt az egész dolgot egy "miniscript" programnyelvvel bővítettem ki, amivel kb mindent le lehetett kezelni. Ilyen script rendszert használnak szinten mindenhol a játékfejlesztésben.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: Zozosoft on 2017.December.28. 12:30:27
Egész pontosan A kalandprogram írásának rejtelmei (http://www.braincluster.eu/alkotas_megjelenitese.php?cikk_id=2) a könyv címe.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: szipucsu on 2017.December.28. 12:51:09
-van egy tömb amiben benne van az pályák szövege.
Minden pályának a szövegét pályánként érdemes letárolni? Persze vannak "univerzális" szövegek, amik mindig megjelennek.

Quote
van egy tömb, ami tartalmazza hogy egy adott pályáról a különböző irányokba mozogva hányas pályára jutunk
Elvileg mindig a szomszédos pályára jutunk, vagy nem feltétlen? Hát igen, pl. a Wrigglerben sincs mindig így.

És magát a pályát hogyan "rajzolod" meg?
Szerintem a legegyszerűbb a pacman szerű pályatárolás, csak nem kerül ki abban a formában a képernyőre, és nem a joy-jal kell irányítani, hanem parancsokkal.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.28. 13:47:38
Minden pályának a szövegét pályánként érdemes letárolni? Persze vannak "univerzális" szövegek, amik mindig megjelennek.
Elvileg mindig a szomszédos pályára jutunk, vagy nem feltétlen? Hát igen, pl. a Wrigglerben sincs mindig így.
És magát a pályát hogyan "rajzolod" meg?
Szerintem a legegyszerűbb a pacman szerű pályatárolás, csak nem kerül ki abban a formában a képernyőre, és nem a joy-jal kell irányítani, hanem parancsokkal.

ja hát lehet x * y tömb is a pályák, de szöveges játékoknál nem feltétlen követték ezt a módszert. pl lehet olyan hogy valahonnan elmész északra és ugyanoda jutsz. vagy körbe-körbe haladsz. aztán lehet olyan is hogy fel vagy le mész... szóval nem feltétlen kell térbelileg helyesnek lennie a pályaszerkezetnek.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: szipucsu on 2017.December.28. 16:28:55
szóval nem feltétlen kell térbelileg helyesnek lennie a pályaszerkezetnek.
Akkor hogyan tervezik meg a pályákat és hogyan tárolják? Elég nehéz lehet így követni tervezés közben, szerintem legalábbis.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.28. 16:42:45
Akkor hogyan tervezik meg a pályákat és hogyan tárolják? Elég nehéz lehet így követni tervezés közben, szerintem legalábbis.

már miért lenne nehéz?
biztos láttál már szöveges kalandjáték térképet. meg kell előre rajzolni, húzni a vonalakat hogy honnan hova, aztán beírni a data sorokba.
de egy ilyen térképen a játék összes történését és paraméterét szépen be lehet rajzolni.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: Lacika on 2017.December.28. 17:42:32
Egész pontosan A kalandprogram írásának rejtelmei (http://www.braincluster.eu/alkotas_megjelenitese.php?cikk_id=2) a könyv címe.

A C64-os Plus4-en úgy írtak kalandjátékot, ahogy ott le van írva. Ep-n pont nem úgy írnék, sokkal egyszerűbben és persze strukturáltan. A Castle Dracula Adventure listáját érdemes megnézni, az a "hagyomágyos" GOTO/GOSUB-os begoldásból egy letisztultabb fajta.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: szipucsu on 2017.December.28. 19:12:42
biztos láttál már szöveges kalandjáték térképet. meg kell előre rajzolni, húzni a vonalakat hogy honnan hova, aztán beírni a data sorokba.
Én biztos karakteres formában tenném data sorokba. Az a baj, akkor listázáskor kiderül, milyen a térkép.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: ergoGnomik on 2017.December.28. 19:32:27
Én biztos karakteres formában tenném data sorokba. Az a baj, akkor listázáskor kiderül, milyen a térkép.
De ez teljesen felesleges lenne. Miután nincs igény arra, hogy a játékos számára megjelenítsd, és nem is akarod felhasználni a pályán való mozgás korlátozására, ezzel inkább csak bonyolítanád a saját dolgodat. Hidd el, hogy úgy érdemes csinálni, ahogyan endi mondta!

Ha akarod, elképzelheted az egészet egy DATA sorokba rögzített listaként, ahol mondjuk minden helyhez tartozik egy sor, ami meghatározza, hogy az adott helyet megadott irányba el lehet-e hagyni, illetve az adott irányban hová jutsz. Például van 100 helyszíned, egytől százig sorszámozva. Ekkor lesz száz DATA sorod, amik mondjuk tartalmazzák sorban az északi, észak-keleti, keleti, dél-keleti, déli, dél-nyugati, nyugati és észak-nyugati irányba, valamint a felfelé és lefelé eső szomszédos helyek sorszámát, illetve mondjuk nullát, ha az adott irány tiltott.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: Zozosoft on 2017.December.28. 19:39:05
Én ott akadok el, hogy találjunk ki kalandot? :oops:
Title: Re: Hogyan írjunk kalandjátékot?
Post by: ergoGnomik on 2017.December.28. 19:47:01
Én ott akadok el, hogy találjunk ki kalandot? :oops:
Igazából nem is muszáj kitalálni. Ha ügyesen variálod, lehet akár a tegnap esti krimi, kedvenc könyved története és cselekmény szálai, vagy valami ami veled vagy cimboráddal történt gyerekkorodban. ;)
Title: Re: Hogyan írjunk kalandjátékot?
Post by: DrPrery on 2017.December.28. 20:36:43
Én ott akadok el, hogy találjunk ki kalandot? :oops:

Ilyen gondjaim egyelőre nincsenek, mert most fejeztem be a "Hogyan rázzuk gatyába Tutus OSX-es EP emulátorát?" című kalandot... :ds_icon_cheesygrin:

A hajzatomban ugyan némi hiányosságok keletkeztek a végére... :mrgreen:
 
Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.28. 20:45:17
Igazából nem is muszáj kitalálni. Ha ügyesen variálod, lehet akár a tegnap esti krimi, kedvenc könyved története és cselekmény szálai, vagy valami ami veled vagy cimboráddal történt gyerekkorodban. ;)

lehetne random generált pálya és történet is. vannak már ilyesmik.
persze nyilván ezek sehol sincsenek ahhoz amikor ember találja ki. :)
Title: Re: Hogyan írjunk kalandjátékot?
Post by: szipucsu on 2017.December.28. 21:20:36
Magamból kiindulva, én úgy próbálnám a történetet kitalálni, hogy lenne valahogy egy kulcs, máshol egy ajtó, és egy harmadik helyen a start, ahonnan előbb a kulcshoz kell eljutni és azt felvenni, onnan az ajtóhoz, és azon átmenni. És utána lehet színesíteni, hogy egy negyedik helyen van egy szörny, amihez az ötödik helyen lévő gázspray-t kell felvenni, amivel hatástalanítani tudjuk, és csak utána férünk hozzá a kulcshoz. De mondjuk a gázspray-t csak akkor vesszük észre, ha előbb megvizsgáljuk az egyik falon az írást, mely a gázspray-k történetével foglalkozik.
De mondom, csak magamból kiindulva gondolom így. Pl. a pacman játékban is programozás közben is többször változtattam a pályát, itt is ilyesmi lenne. Na persze akinek megy, az előtte megtervezi az egész történetet és utána csak leprogramozza, ez nekem nem menne, közben is alakulna. És ehhez áttekinthetőbb, ha ott a térkép a programban és ott lehet egyszerűen módosítani.
Ezt a gázspray-s sztorit talán egyszer megcsinálom és kipróbálom ezt a térképes módszert. De már nem lesz olyan érdekes, mert már mindenki tudja a megfejtést. :D
Title: Re: Hogyan írjunk kalandjátékot?
Post by: ergoGnomik on 2017.December.28. 23:23:09
De mondom, csak magamból kiindulva gondolom így. Pl. a pacman játékban is programozás közben is többször változtattam a pályát, itt is ilyesmi lenne. Na persze akinek megy, az előtte megtervezi az egész történetet és utána csak leprogramozza, ez nekem nem menne, közben is alakulna. És ehhez áttekinthetőbb, ha ott a térkép a programban és ott lehet egyszerűen módosítani.
Ebben a műfajban ez a fejlesztési stílus nagyjából az önt*k*nszúrás szintjén mozog. A parancsértelmezőt leszámítva egy szöveges kalandjátékban nincs szerintem semmi akár csak félig is érdekes programozni való. Amíg nincs meg a történet és a megoldás menete, addig felesleges hozzákezdeni az adatfeltöltéshez. Szerintem.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.29. 00:12:04
Ebben a műfajban ez a fejlesztési stílus nagyjából az önt*k*nszúrás szintjén mozog. A parancsértelmezőt leszámítva egy szöveges kalandjátékban nincs szerintem semmi akár csak félig is érdekes programozni való. Amíg nincs meg a történet és a megoldás menete, addig felesleges hozzákezdeni az adatfeltöltéshez. Szerintem.

haha, ha tudnád hogy a magyar játékfejlesztésben ez az *nt*k*nszúrás az elterjedt fejlesztési stílus. :D :D :D azaz: semmit se tervezni meg, csak csinálni durrbele... :(
nem csoda hogy lassan kihal az összes magyar játékfejlesztő cég. ilyen módszerekkel nem lehet versenyezni a nyugattal... :(
szinte minden munkahelyemen brutális küzdelmem volt hogy megértessem: tervezni kell...
Title: Re: Hogyan írjunk kalandjátékot?
Post by: szipucsu on 2017.December.29. 10:42:34
Az biztos, hogy könnyebb leprogramozni mindent, ha már előre megvan, milyen tárgyak lesznek és hol. De ez alakulhat közben is, lehetnek újabb ötletek, stb.
Belegondolva, ha sok művelet van egy kalandprogramban és ezek össze is függenek (pl. ha még nem volt a pincében, nem tudja kinyitni a padlásajtót), akkor nagyon sok változót, tömböt kell létrehozni. Pl. egy változó értéke 0-ról 1-re vált, ha a pincébe megy a krapek, a padlásnál pedig meg kell vizsgálni ennek a változónak az értékét, hogy 0 vagy 1, ettől függően engedi be.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.29. 11:47:10
én olyan rendszert csináltam amiben minden változó egységesítve volt. azaz a tárgyakat használtam változókra is. pl az 1-es tárgy egy kulcs. a 2-es tárgy nem tárgyként van használva, hanem valami flag, ami jelez valamit.

mindezt a miniscript rendszer kezeli. ennek az a lényege hogy az utasítások 1 betű, utána jön egy-két paraméter. tehát pl: "T0102-L01"

a játék minden történése ilyen utasításokkal van leírva, tehát a basic kód nem tartalmaz egyedi, csak az adott játékra vonatkozó if-then dolgokat.

a minisciptnek ilyen utasításai lehetnek:
U - utasítás. az utána írt szám. ezzel vizsgáljuk meg hogy milyen utasítást írt be.
u - az utasítás után írt második szó vizsgálata.
T - megadott tárgyat megadott pályára rakja
t - megvizsgálja hogy a megadott tárgy adott pályán van-e
M - üzenet kiírása

A következő miniscript például azt csinálja hogy ha beírtad hogy "VIZSGÁLD SZEKRÉNY" akkor megkaptad a benne lévő kulcsot és egy üzenetet:
U01-u10-t0199-T0200-M10

azaz
U01 : 1-es utasítás a VIZSGÁLD
u10 : 10-es szó a "SZEKRÉNY"
t0199 : a 01-es tárgy (kulcs) a 99-es pályán van? (99-es pálya jelzi hogy a szekrényben van még)
T0100 : tedd a 01-es tárgyat a 00-ás pályára (ami a játékos hátizsákja)
M10: írd ki a 10-es üzenetet ("A szekrényben találtál egy kulcsot.")

Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.29. 11:49:05
itt a mutant test kódjából egy kis részlet, láthatóak a miniscriptek.
Title: Re: Hogyan írjunk kalandjátékot?
Post by: szipucsu on 2017.December.29. 12:06:35
M10: írd ki a 10-es üzenetet ("A szekrényben találtál egy kulcsot.")
Minden egyes művelethez külön van mondat? Attól jó hosszú a kód. Én így csinálnám talán: A következőben kerestél: szekrény. Ezt találtad benne: kulcs. Ha a teljes mondat meg van adva, oké, csak hosszú minden lehetséges művelethez külön mondatot írni. Vagy pedig figyelni kell, hogy a kulcs végére azt írja, hogy "ot", a "könyv" végére meg "et". Tudom, ennek most nem ez volt a lényege, de akkor te az összes lehetséges mondatot letároltad mondatonként, amiket a gép kiírhat?
Ennyiből egyszerűbb angolra csinálni meg, mert akkor nem kell figyelni, hogy "kulcsot", de már nem "könyvot".
Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.29. 12:28:27
Minden egyes művelethez külön van mondat? Attól jó hosszú a kód. Én így csinálnám talán: A következőben kerestél: szekrény. Ezt találtad benne: kulcs. Ha a teljes mondat meg van adva, oké, csak hosszú minden lehetséges művelethez külön mondatot írni. Vagy pedig figyelni kell, hogy a kulcs végére azt írja, hogy "ot", a "könyv" végére meg "et". Tudom, ennek most nem ez volt a lényege, de akkor te az összes lehetséges mondatot letároltad mondatonként, amiket a gép kiírhat?
Ennyiből egyszerűbb angolra csinálni meg, mert akkor nem kell figyelni, hogy "kulcsot", de már nem "könyvot".

sosem foglalkoztam azzal hogy magyarul helyes legyen, mert akkor ennek a lekezelése bonyolultabb lenne mint az egész játék :D (sokkal!)
kezelhetőbb, egyszerűbb, felhasználóbarátabb a "vizsgál szekrény" és társai :)
Title: Re: Hogyan írjunk kalandjátékot?
Post by: szipucsu on 2017.December.29. 16:31:37
sosem foglalkoztam azzal hogy magyarul helyes legyen, mert akkor ennek a lekezelése bonyolultabb lenne mint az egész játék :D (sokkal!)
Érdekes kihívás lenne ezt is megcsinálni. Az a vicc, a Facebook még mindig nem tud ragozni rendesen, a múltkor is volt valami "könyvot"-hoz hasonló szó.

Az aktuális szobát hogyan tárolod? Mint a karakteres képernyőn X és Y koordinátában?
Title: Re: Hogyan írjunk kalandjátékot?
Post by: endi on 2017.December.29. 17:14:29
Érdekes kihívás lenne ezt is megcsinálni. Az a vicc, a Facebook még mindig nem tud ragozni rendesen, a múltkor is volt valami "könyvot"-hoz hasonló szó.

Az aktuális szobát hogyan tárolod? Mint a karakteres képernyőn X és Y koordinátában?

a pálya csak 1 szám, nem kell x y térben gondolkodni.

amúgy, vannak olyan szövegesek is ahol nem kell beírni a szöveget hanem menüből választani (mondjuk a mutant test is ilyesmi).
pl ebben még ügyesnek is kell lenni hogy elkaphassuk a megfelelő szót :D
https://youtu.be/p-HBvzvIWLo?t=1710
Title: Re: Hogyan írjunk kalandjátékot?
Post by: ergoGnomik on 2017.December.29. 17:33:08
Az aktuális szobát hogyan tárolod? Mint a karakteres képernyőn X és Y koordinátában?

Ha akarod, elképzelheted az egészet egy DATA sorokba rögzített listaként, ahol mondjuk minden helyhez tartozik egy sor, ami meghatározza, hogy az adott helyet megadott irányba el lehet-e hagyni, illetve az adott irányban hová jutsz. Például van 100 helyszíned, egytől százig sorszámozva. Ekkor lesz száz DATA sorod, amik mondjuk tartalmazzák sorban az északi, észak-keleti, keleti, dél-keleti, déli, dél-nyugati, nyugati és észak-nyugati irányba, valamint a felfelé és lefelé eső szomszédos helyek sorszámát, illetve mondjuk nullát, ha az adott irány tiltott.