A Klickety megvalósítása
tervezés felülről lefelé
Megadjuk a játékprogram fő szerkezetét, majd folyamatosan finomítjuk az eljárásokat. Első
nekifutásra a következő tervet fogalmazhatjuk meg:
Kezdeti állás létrehozása
Ciklus amíg lehet_lépni
Be( következő_lépés )
Lép( következő_lépés )
Ciklus vége
Végeredmény kiírása
A játék tábláját egy 16x10-es tömbben tároljuk, a tömbelemek
értéke az adott pozíción lévő négyzet színe, vagy nulla, ha üres a pozíció.
A
lehet_lépni függvény akkor
ad igaz értéket, ha van két élszomszédos, azonos színű mező a táblán. Ez egy egyszerű
dupla ciklusban ellenőrizhető. A lépés egy (sor,oszlop) párral írható le, tehát ezeket
az adatokat kell beolvasni a
következő_lépés olvasásakor. Következzen tehát
a
Lép(s,o) eljárás finomítása:
Lép(s,o):
Ha tartomány(s,o)
akkor
sz := tábla[s,o]
kijelöl(s,o,sz)
potyogtat
eltol
Elágazás vége
A
tartomány(s,o) függvényben megnézzük, hogy a "klikkelt" mezőnek van-e
azonos színű szomszédja. Ha igen, akkor egy rekurzív eljárás segítségével "kinullázzuk"
az eltűnő négyzetek helyét. Ezután a
potyogtat eljárás
minden oszlopra lefele potyogtatja a négyzeteket, ha keletkeztek üres mezők, végül
az
eltol balra tolja az oszlopokat, ha vannak üres oszlopok. Lássuk a részleteket:
kijelöl(s,o,sz):
tábla[s,o] := ÜRES
Ha s + 1 <= 16 és tábla[s + 1, o] = sz
akkor kijelöl(s+1,o,sz)
Elágazás vége
Ha s - 1 >= 1 és tábla[s - 1, o] = sz
akkor kijelöl(s-1,o,sz)
Elágazás vége
Ha o + 1 <= 10 és tábla[s, o + 1] = sz
akkor kijelöl(s,o+1,sz)
Elágazás vége
Ha o - 1 >= 1 és tábla[s, o - 1] = sz
akkor kijelöl(s,o-1,sz)
Elágazás vége
Miután megjelöltük az eltűnő négyzeteket (
ÜRES-re állítva értéküket), lefelé léptetjük a "lepotyogó"
elemeket. A
potyogtat eljárás minden oszlopra meghívja a
le eljárást. Ennek lényege az, hogy egy
oszlop aljától indul, és egyesével haladva felfelé, számolja az üres helyeket. Ha nemüres mezőhöz ér, lefele lépteti annyival, amennyi az eddig megtalált üres mezők száma, és "kinullázza" ezt a mezőt. ((c) Treszkai László)
le(oszlop):
darab := 0
Ciklus j := 16-tól 1-ig
Ha tábla[j,oszlop] <> ÜRES akkor
Ha darab > 0 akkor
tábla[j + darab, oszlop] := tábla[j, oszlop]
tábla[j, oszlop] := ÜRES
Elágazás vége
különben
darab := darab + 1
Elágazás vége
Ciklus vége
Az eltol eljárás teljesen hasonló elv alapján működik. A legalsó sorban
ÜRES mezőket keresünk balról jobbra haladva, számoljuk az üres helyeket, és
a nemüres oszlopokat balra léptetjük annyival, ahány üres oszlopunk volt eddig.
Megoldások
További megoldások