Enterprise Forever
:HUN => Programozás => Topic started 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.
-
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.
-
Egész pontosan A kalandprogram írásának rejtelmei (http://www.braincluster.eu/alkotas_megjelenitese.php?cikk_id=2) a könyv címe.
-
-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.
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
É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.
-
Én ott akadok el, hogy találjunk ki kalandot? :oops:
-
É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. ;)
-
É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:
-
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. :)
-
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
-
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.
-
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...
-
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.
-
é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.")
-
itt a mutant test kódjából egy kis részlet, láthatóak a miniscriptek.
-
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".
-
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 :)
-
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?
-
É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
-
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.