HTRIS - Part 2

HTRIS - Part 2

Sep 08, 2023

Strukturált programozás a Z80-as assembly nyelvben.

Ebben a részben a fő program, s annak működése kerül ismertetésre. Meghatározásra kerülnek a főbb alprogramok, azok fontosabb kapcsolódási módjai.

A Fő program

A fő program a fontosabb teendőket, logikai feladatokat oldja meg, döntéseket hoz, emellett, minden kisebb feleadatot alprogramokkal végeztet el, ezért ezek irányításával is foglalkozik.

A fő program, egy-egy alprogramot akár többször is meghívhat egy ciklus alatt. Ha nem készítünk a programból való kilépéshez algoritmust, akkor a fő program végtelen ciklusba kerül és csak fizikai reset-tel, vagy a gép kikapcsolásával állíthatjuk meg.

A végtelen ciklus, illetve a ciklus (hurok - LOOP) szükségessége.
A végtelen ciklus, angolul INFINITE LOOP, nem minden programnál szükséges, de nagyon kevés ilyen van. Azok a programok ilyenek, amik elindításuk után, feladatukat elvégezve visszatérnek az operációs rendszerbe. Például: konvertáló, másoló, diagnosztikai program. Az indításkor kapott bemeneti paraméterek után, azokat feldolgozva, létrehozva a kimeneti adatokat, leáll és visszatér. Egy játéknál ez nem jó.
Milyen lenne, ha így működne a játék: Beállítjuk a kezdő pályát, teszünk egy lépést, a gép értékeli (nyerés/vesztés/egyik sem), majd kilép. Ha tovább szeretnénk játszani, bekellene állítani az aktuális állást, lépünk, kiértékel, leáll. Majd ezt addig ismételjük, amíg nem győzünk, vagy vesztünk, vagy meg nem unjuk. Ugye milyen macerás lenne a játék? Nos, sokkal egyszerűbb egy ugrás (JP vagy JR) utasítást kiadni, hogy oda ugorjunk vissza, ahol a program a mi lépésünkre vár.
És miért végtelen, miért nincs kilépési lehetőség? Mert szükségtelen. Ezeknél a mikroszámítógépeknél egy RESET gomb megnyomásával, vagy ki-be kapcsolással másodpercek alatt alapállapotba hozhatjuk a gépet. Nem kell perceket várni az oprendszer bebootolására, ráadásul nincs multitaszking sem, így más programok sem futnak a háttérben, és semmilyen adatvesztésünk sem lesz.

A fő program struktúrája.
Általánosságban három részből tevődik össze:

  • Inicializálás (Kezdőképernyő, kezdő állások, menü...)

  • Feldolgozás (Akár folyamatosan ismétlődve, amíg szükséges - LOOP)

  • Kiértékelés (Eseményfüggő folytatás, vagy befejezés. Pl.: nyerés, vesztés)

Most pedig nézzük meg ezek alapján, az első részben tárgyalt játékmotor szerint, hogyan épül fel a fő programunk. Ezt egy folyamatábrán tudjuk jól szemléltetni.

Az inicializálás

Az első három feladat látja el ezt a részt. Az assembly forrása a következő képen látható.
Itt kezdődik a játék legnagyobb terjedelmű, egyben a legritkábban lefutó ciklusa, NewGame nevű címkével. Az első két feladatra alprogram van írva, de a nehézségi szint beállítása, és a SPACE figyelése olyan egyszerű, hogy ez bőven elfér itt anélkül, hogy nehezítené a könnyű átláthatóságot. Az algoritmusok nevei elég beszédesek.

A feldolgozás

Ez a rész a játék meghatározó blokkja, egyben a második, NewShape nevű címkét viselő ciklusa. Az alakzat kezdőpozíciójának beállítása itt is csak pár kódsor. Ezután jön az alakzat kiválasztása (véletlen szerűen), majd a számlálójának növelése. Ezek szintén alprogramba ágyazva.
Végül, elértünk a játék magjához, a legpörgősebb ciklushoz, aminek egyszerűen csak Loop nevű címkét adtam. Ennek a magnak a feladata az X és Y irányú mozgások lekezelése. Ezek a folyamatábrán is láthatóan, több rész feladatból állnak. Itt is elég beszédesek az alprogramok nevei.
Lényegében, itt történik a játék lebonyolítása.
- A program figyeli a billentyűzetet, ha kell változtat az alakzat pozícióján.
- Kirajzolja az alakzatot a munkaterületre.
- Megnézi, hogy ütközött-e oldalirányban másik, már letett alakzattal.
- Ellenőrzi, hogy leért-e a kupac bármely pontjára.

A kiértékelés

A folyamatábrán lévő utolsó három páros a kiértékelés. Jól látható, hogy nincs sehol befejezés (STOP), azaz a programból való kilépés.
A párosok egy feltétel vizsgálatból és egy teljesüléskor végrehajtandó feladat(csopot)ból állnak.

A három ellenőrzés a következő:
- Az alakzat elérte-e a talajt, vagy bármely lerakott alakzat tetejét?
- A torony elérte-e a legnagyobb magasságot? (A játékos vesztett.)
- A játékos teljesítette-e a legnehezebb szintet is? (A játékos győz.)

A három feladat:
- Az alakzat berajzolása a háttérre, a pálya kirajzolása a képernyőre, teli sor(ok) ellenőrzése.
- Győzelem kiírása.
- Vesztés kiírása.

Végül, a NEW LINE gomb megnyomására felszólító felirat kiírása, és a gomb figyelése.

Zárszó

A fenti, kb. 70 utasítás képezi a fő programot, ami tizede, a közel 700 utasítást tartalmazó algoritmusoknak. Képzeljük el, milyen nehéz lenne ezt átlátni, s még nagyobb is lenne a programunk, ha a többször hívott algoritmusok annyiszor lennének megírva a programban, ahányszor szükség van rájuk.
Érdekességként, itt van a program teljes forráskódja. Ez még nem is tartalmazza a változókat, és az adatbázist sem. A képen egy A3-as lapra, 8-as betű mérettel, 7 hasábban tördelve készült el a lista.

Letöltés

A programot az ENTARY GAMES oldalamról lehet letölteni.

Előzetes

A következő részben az algoritmusok kerülnek ismertetésre.

Köszönetnyilvánítás

Köszönet Képes Gábornak, a játék névadójának grafikai ötletéért, hogy a címlapon a Magyar Parlament épületének sziluettje szerepeljen, és azért, hogy a programot tesztelte.

Szerzői jogok

Az ismertetett programból, csak a bemutatott részleteket lehet szabadon felhasználni.

Köszönöm a figyelmet!

Ha tetszett a cikkem, és meghívsz egy kávéra, bátorítasz, hogy írjak még hasonló érdekességeket számodra.

Enjoy this post?

Buy NICKMANN Studio a coffee

More from NICKMANN Studio