TÁBLAJÁTÉKOS:

Zillions progi-suli
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.

  • (folyt.)