|
2. Talán a lehetséges legrövidebb progi: suli01.zrf
Egy 5x4-es játékmezőre felrakott kezdőálláshoz, két játékos felváltva rakja le egy-egy bábuját, az nyer, akinek 3 bábuja vonalban egymás mellé kerül.
(Mint játéknak, nincs sok értelme, hiszen a kezdőállásból mindkét játékos azonnal nyerhet.)
CD-ről telepített Birodalmadban lásd itt a:
munka-2 könyvtároldal-t (
Hálón nem nyílik, de letölthető: munka2.zip)
|
FIGYELEM! Az alábbi programlista a suli02.zrf.
(A suli01.zrf csak a piros/kék
sorokból áll!) Első értelmezéskor ugorjuk át a feketével és a zölddel írt programsorokat !
A piros/kék sorokban csak az van benne, ami feltétlen szükséges ahhoz, hogy működjön
a progi, éppúgy, mintha valakinek elmagyaráznánk a játékszabályt:
Tisztázzuk az általános jellegzetességeket, pl: kétszemélyes a játék, ki kezd, van-e lépéskényszer, megengedett-e a passzolás...
Lerajzoljuk a táblát és megmutatjuk, hogy általában hogyan megengedett közlekedni rajta, ill. azt, hogy egy mezőnek mely másikak lesznek a szomszédjai, megegyezünk a mezőszámozásban, ill. annak jelzéseiben.
Megmutatjuk a bábukat, és azt, hogy melyik bábuval mit csinálhatunk.
Felrakjuk a kezdőállást, ill. a lerakosgatósnál megadjuk hány bábunk van.
Közöljük a verseny célját, a nyerési, döntetlen, vesztési helyzeteket.
|
;*** ELSO JATEK
;*** V1.0
;*** Invented by #####jatekfejleszto neve######
;*** Implemented by #####progizo neve##### 2000.
;***
; You need to purchase Zillions of Games to load this rules file
; Visit the Zillions web site at http://www.zillions-of-games.com
|
Minden pontosvessző után, egészen a sor végéig tetszőleges megjegyzések írhatók, amiket
a Zilli nem fog értelmezni.A programlistában (különösen, ha el kívánjuk majd küldeni az
angol honlapra) érdemes feltüntetni a szerzők nevét, készítés dátumát, utalást a
Zilli-WEB-SITE-ra, stb.A pontosvesszős elválasztással magyarázó szövegeket is írhatunk
a progiba… |
(define def1 ( (verify empty?) add) )
(define def2 ( $1 (verify not-friend?) add) )
|
A DEF1 arra a mezőre enged lépni, amelyik üres, a DEF2 arra szomszédos mezőre, amelyiken
nem saját bábu áll... (itt $1 = a define behívásakor megadott irányú szomszédos mező)
|
( game
|
Így kezdődik a "vezérlő" rész, ez a suli1.zrf eleje.
|
( title " ELSO JATEK " )
(description "a HELP/description alatti leiras elso sora
\......masodik sora
\......harmadik sora " )
(history "a HELP-history alatti leiras elso sora ")
(strategy "a HELP-strategy alatti leiras elso sora ")
(win-sound "Audio\Orchestra_CF.wav ")
(music " Audio\mymusic.mid ")
|
A Zilli.legördülő HELP-jébe írja ki a megfelelő játékszabályt (DESCRIPTION), a történet-forrást
(HISTORY), a követésre javasolt stratégiai hivatkozásokat (STRATEGY). Hangeffektusok (SOUND) aktivizálhatók csaknem tucatnyi eseményre, pl. itt a játékos győzelmekor(WIN), illetve folyamatos háttér zene (MUSIC) hívható az Audio könyvtárból.
|
(board
(image "images\Chess\Chess4x5.bmp" )
(grid
(start-rectangle 5 5 53 53 )
(dimensions
( " a/b/c/d " ( 49 0
) )
( " 5/4/3/2/1 "
( 0 49 ) )
)
( directions ( n 0 -1 ) (
w -1 0 ) )
)
|
A tábla(BOARD)-kép(IMAGE) mindig BMP-file és persze meg kell adni az elérési útját is.
Csak a körvonal-méretét használja a Zilli, (férjenek el rajta a mezők). A rajzolata tetszőleges.
A rácsozat(GRID) bal felső mezőjének (bal-felső és jobb-alsó koordinátáit és a vízszintes és
függőleges osztást kell megadni, pixelben. A mezőszámozást sor/oszlop párosítással fogja a Zilli ráírni a táblaképre.Nagyon fontos még a mezők "általános lépés-szomszédjainak" definiálása: (Itt most csak az északi (Nord) és a nyugati (West) irányokat fogja ismerni a Zilli. Pl.: a w azt jelenti, hogy a felfelé nulla, balra egy elmozdulással szomszédos mezőre jut a bábu.
|
( players P1 P2 )
( turn-order P2 P1 )
|
A játékosok (PLAYERS) neve most P1 és P2 lesz, úgy, hogy az egymásra következés sorrendje: P2 kezdi a partit...
|
(piece
(name Ball )
(image P1 "images
\TicTacToe\bballs.bmp"
P2 "images\TicTacToe\rballs.bmp
" )
(drops ( add ) )
)
|
A bábuk(PIECE) mindegyike azonos nevű, tehát "relatíve" ugyanúgy fognak lépni. Relatív alatt értsd: ha pl. a P1 játékos lép, akkor az RBALLS.BMP képű bábut tekinti ellenfélnek(ENEMY) és megfordítva -szerepcserével- ugyanígy...DROPS-lerakás, a játékosok fent megadott sorrendjében. Az ADD (sokszor előfordul majd, fordítsuk úgy, hogy) végrehajtás: itt az eredmény egy bábu, bárhova. Ha ott bábu van, akkor azt felülírja. |
(win-condition (P2 P1)
(or (relative-config Ball n Ball n Ball)
(relative-config Ball w Ball w Ball ) ))
|
Mindkét játékos arra törekszik, hogy 3 bábuja vonalban (vízszintesen, vagy függőlegesen) egymás mellé kerüljön
|
(board-setup
( P1 (
Ball off 2 a1 c1 b5 d5 ) )
( P2 ( Ball off 1 b1 d1 a5 c5 ) )
)
|
A kezdőállás (SETUP) beállításakor meg kell adni, hogy melyik bábuból hány van a táblán kívül. Ez alapértelmezésben nulla. Tehát, ha lerakosgatóst(DROPS) akarunk játszani és nem adjuk meg bábuk számát, akkor nincs mivel lépni, hibajelzést kapunk.
|
)
|
Minden zárójelet le kell zárni! (Ez a GAME-é.)
|
(variant (title "-"))
|
A Zilli-menu/Variant legördülőjébe húz vonalat |
(variant
(title "Variant 1")
(piece
(name Ball)
(image P1 "images\TicTacToe\bballs.bmp"
P2 "images\TicTacToe\rballs.bmp")
(drops (def1)) (moves (def2 n)(def2 w))))
|
A lerakásoknál (DROPS) lásd a define-t fenn.
A mozgatásoknál(MOVES): itt ad értéket $1-nek a def2-be, előbb n, majd w irányban nézi (a táblánál definiált) szomszédos mezőt.
A define úgy működik, mint a szubrutinok, elkerülhetők vele az ismétlések.
Írhattuk volna a PIECE-blokkba is:
(drops (verify empty?) add) Lerakhat, ha üres.
(moves ( n (verify not-friend?) add) ( w (verify not-friend?) add))
N, vagy W irányban léphet a szomszédos mezőre akkor, ha ott nem a saját bábuja áll. (Az ellenfél bábuját sajátjára cseréli.) |
(variant
(title "Variant 2")
(win-condition (P2 P1)
(or (relative-config Ball n Ball n Ball)
(relative-config Ball w Ball w Ball)
(pieces-remaining 2) )))
|
Szemléletes és a Zilli működését is jól jelzi, hogy a progi törzsét képező alap nem változott.
Ebből minden olyan utasítás végrehajtódik, ami az adott variánsban nem lett felülírva.
Új utasítás a (pieces-remaining 2). Jegyezzük meg azt is, hogy az (OR) nem a tényezők között,
hanem előttük és csak egyszer szerepel. Ugyanilyen formát követ az (AND) is.
Megjegyzem: Próbálkoztam a "variáns-variánsával" is úgy, hogy az 1. Vari bezárása előtt írom be
a 2. Varit. Ez nem tetszett a Zillinek. Ezért született a 3. Vari.
|
(variant
(title "Variant 3")
(piece
(name Ball)
(image P1 "images\TicTacToe\bballs.bmp"
P2 "images\TicTacToe\rballs.bmp")
(drops (def1)) (moves (def2 n)(def2 w)))
(win-condition (P2 P1)
(or (relative-config Ball n Ball n Ball)
(relative-config Ball w Ball w Ball)
(pieces-remaining 2))))
|
Ehhez megismételtem mindkettő tartalmát. Nem próbáltam ki, de talán működne a DEFINE
használatával is, amibe egy DEF3 címkével betehető az ismétlődő rész.
(define def3 ( (name Ball) (image P1 "images\TicTacToe\bballs.bmp" P2 "images\TicTacToe\rballs.bmp") (drops (def1))(moves (def2 n)(def2 w))
Ezt ugyanis úgy értelmezi a Zilli, hogy az adott define-t azonosító címke leírásakor,
mintegy szubrutinként "végrehajtja" a define tartalmát és visszatérve a folytatja a "futást".
(variant (title "Variant 3") (piece def3)… Kiemelés (a Zilli lelkivilága):
Az utasítások "végrehajtása", ill. a progifutás a Zillions.exe progiban történik (lépésvezérlés,
képernyőkezelés, komfortszolgáltatások, ellenlépés, stb.) Az adott zrf egyes blokkjainak
tartalma a Zillions.exe különböző moduljait fogja aktivizálni.
|
|
A fenti "program"-listában igyekeztem pirossal kiemelni a (minden programban előforduló) minimális standardokat,
különös tekintettel a nyitó és zárójelekre.
(Tapasztalni fogod, ezekkel lesz talán a legtöbb problémád. Nekem úgy tűnt nem következetes a zárójelezés
-mármint, hogy hova kell, hova nem-, a többleteket pedig nem viseli el a Zilli.)
A Zillis ZRF-ek mindegyikében ott van ez az öt "alapblokk":
1. általános pl.: a játék neve, kétszemélyes, lépéskényszeres, játékosok sorrendje,
hanghatások, leírások, helpek, stb.
2. táblakép, mezőszámozás, mezők "szomszédjai"...
3. bábuk neve, képe, lépéslehetőségei
4. kezdőállás
5. nyerő-, ill. vesztő (döntetlen) helyzetek
Ezt az öt blokkot vezeti fel a (game
megnyitás, az öt blokk végét pedig a megnyitott zárójel )
bezárása jelzi.
Ez ötös "főcsoport" előtt a többször használt programsorokat
(define ... )
formába zárva, az ötös egység
után pedig a változatokat jellemző eltéréseket (variant ... )
formába zárva szokás rendszerezni.
|
|
Értelemszerűen, a kékkel írt aktualizálások kicserélésével más-más (persze nem túl bonyolult) játékra máris módosítható
ez az induló progi. Apróbb változtatásokkal megismerhető egy-egy új utasítás használata és persze a formai
követelményei stb.
A teljes lista (suli02.zrf) már olyan, hogy:
(1) Csak üres mezőre szabad lerakni,
(2) Lehet lépni a már táblán lévő bábuval is, vagy az északi, vagy a nyugati szomszédos mezőre
(3) Ha már csak 2 db bábuja van valakinek, akkor vesztett.
(4) és ha már piszkáltuk, akkor betettük a játék nevét, leírását és helpjeit, hangeffekteket...
A fekete és zöld színű bővítményekkel együtt újra tekintsük át a fenti progit:
A fekete sorok az egyértelműek, de most kezdetben, talán kevésbé fontosak. (lásd a negyedik célkitűzést.)
Zölddel az első és második célkitűzés: mint 1. variant, a harmadik célkitűzés
pedig: a 2., ill. a 3.
variant-ban teljesül.
|
|
|