Page 5 - Enterpress Magazin - 2020. 3-6.
P. 5
2020. május – december 5. oldal
Játékfejlesztésem története I.
Az Emberkétől a Hungry Creature-ig
Írta: Bodnár Tamás
(Szipucsu)
A 80-as évek vége felé írtam első „játékprogramomat”, küzdelmek árán így sikerült elérnem valamikor 1995
amely az Emberke volt. A program négyszög alakú ka- őszén, ha jól emlékszem:
raktereket véletlenszerűen szétszórt a képernyőn, az
emberke alakú karaktert pedig a belső botkormánnyal 3750 LET UT,FEL,LE,JO,BA=0
lehetett mozgatni. Egy percünk volt, hogy minél több 3760 IF KEP$(SZO1(A)-1,SZO2(A))=” „ THEN LET
négyszöget összeszedjünk. A program még a négy- UT=UT+1:LET FEL=1
szöggel való ütközést sem érzékelte, és ha kimentünk 3770 IF KEP$(SZO1(A)+1,SZO2(A))=” „ THEN LET
a játéktérből, hibaüzenettel leállt. De azért így is jól el
lehetett szórakozni vele. Egy picit mindig szépítettem UT=UT+4:LET LE=1
rajta, így idővel lett Emberke 10 is. Később nagyon meg- 3780 IF KEP$(SZO1(A),SZO2(A)-1)=” „ THEN LET
örültem, hogy a Hetedhéten túl című Enterprise-os UT=UT+8:LET BA=1
könyvben a Hamikában volt ütközésérzékelés, így on- 3790 IF KEP$(SZO1(A),SZO2(A)+1)=” „ THEN LET
nan el tudtam lopni a GET #102:A$ elvét, ami lekérdezi UT=UT+2:LET JO=1
a kurzor pozíciójában lévő karaktert. Így már számolta 3800 IF UT=5 OR UT=10 THEN GOTO 3970
az összegyűjtött négyszögeket, és a játéktér körül keret- 3810 IF FEL+LE+JO+BA=0 THEN LET
karakterek (ez a szó visszafele olvasva is ugyanúgy van!) I1(A),I2(A)=0:GOTO 3970
is voltak, a játéktéren belül pedig falak. 3820 IF FEL+LE+JO+BA=1 THEN LET
I1(A)=I1(A)*(-1):LET I2(A)=I2(A)*(-1):GOTO 3970
Hála a Zzzip-nek, rájöttem, hogy ebből még többet is 3830 SELECT CASE RND(4)
ki lehet hozni, így megjelentek a pályán a szörnyek is. 3840 CASE 0
Innen egy kicsit komolyabbra fordult a programozás. A
játék pályáit DATA sorokban tároltam. Hogy gyorsabb 3850 IF FEL=1 THEN LET I1(A)=-1:LET I2(A)=0:GOTO 3960
legyen, azt találtam ki, hogy a pálya kirajzolása után a 3860 LET I1(A)=1:LET I2(A)=0
program a képernyő tartalmát, az összes karaktert a 3870 CASE 1
képernyőről végignézi, és beolvassa egy tömbbe (a 3880 IF LE=1 THEN LET I1(A)=1:LET I2(A)=0:GOTO 3960
KEP$(X,Y) tömbbe), így a pálya falai abban a tömbben 3890 LET I1(A)=-1:LET I2(A)=0
voltak benne. A szörnyek így nem a képernyőről olvas- 3900 CASE 2
ták ki, hogy hol van fal és merre lehet menni, hanem a 3910 IF JO=1 THEN LET I1(A)=0:LET I2(A)=1:GOTO 3960
tömbből, ez gyorsabb volt. Így csak azt kellett a képer- 3920 LET I1(A)=0:LET I2(A)=-1
nyőről kiolvasni, hogy az emberkénk hova lép, szóközre, 3930 CASE 3
bogyóra, netalán a szörny karakterére. 3940 IF BA=1 THEN LET I1(A)=0:LET I2(A)=-1:GOTO 3960
3950 LET I1(A)=0:LET I2(A)=1
Addig még csak-csak elvoltam a PRINT #102,AT utasí- 3960 END SELECT
tással, a GET #102:A$-gel, a JOY és az RND függvény-
nyel, viszont a szörnyek mozgása kicsit más volt. A 3970 RETURN
pacman játékokban megfigyelhetjük, hogy a szörnyek
általában egy adott irányba mozognak, amíg kereszte- Addig módosítgattam ezt az eljárást, amíg úgy nem
ződéshez nem érnek, és ott újra felvesznek valamilyen működött, ahogy elképzeltem, utána meg már nem
irányt. Ezt próbáltam én is megvalósítani valahogy. Négy foglalkoztam vele, csak örültem, hogy működik.
szörny volt a pályán, mindegyiknél figyelni kellett, hogy Pedig ez eléggé szedett-vedett, és lehetne rajta szépí-
kereszteződéshez vagy zsákutcához érnek-e, és akkor teni. A 3760-3790-es sorokban megnézi a program,
új irányt kellett nekik meghatározni. Ezt először, kisebb hogy az adott szörny alatt, fölött, tőle jobbra és balra

