people.inf.elte.hu · Web viewA program célja, hogy probléma-középpontosan vezesse végig az...
Transcript of people.inf.elte.hu · Web viewA program célja, hogy probléma-középpontosan vezesse végig az...
Tartalomjegyzék
Bevezetés........................................................................................................2
Felhasználói dokumentáció..............................................................................3
Telepítési útmutató...........................................................................................3
Hardware/Software környezet..........................................................................3
Játékok.............................................................................................................3
Fejlesztői dokumentáció.................................................................................16
Megoldási terv................................................................................................16
Visual Basic for Applications szintaktika........................................................16
Microsoft Office Excel specifikus objektumok, függvények............................19
Játékok...........................................................................................................22
Eljárások........................................................................................................29
Játékállás osztály...........................................................................................36
Tesztelés........................................................................................................37
Fejlesztési lehetőségek..................................................................................45
Irodalomjegyzék.............................................................................................46
Mellékletek.....................................................................................................47
1
BevezetésA program célja, hogy probléma-középpontosan vezesse végig az olvasót a
játék-programozás lépésein Microsoft Office Excel Visual Basic környezetében.
Először különböző jellegű játékokat programoztam le, illetve valósítottam meg
Excel-be (tic-tac-toe, connect4, amőba, aknakereső, menekülj, sakk, dáma, ló-
lépésben, társasjáték, monopoly, tili-toli). A kétszemélyes játékok csak
asszisztálnak az élő játékosoknak. A játékokban lévő hasonló, egyező
eljárásokat, függvényeket egybegyűjtöttem, így tud az olvasó/fejlesztő
könnyebben létrehozni a későbbiekben újabb játékokat. Ilyenek a programozási
tételek (összegzés, számlálás, maximum-kiválasztás, feltételes maximum-
keresés, lineáris keresés, logaritmikus keresés), a grafikai eljárások (különböző
típusú játéktáblák létrehozása/kirajzolása, figura mozgatása a pályán), illetve
egyéb eljárások (van-e üres hely a kijelölt mezőn, hány azonos tartalmú cella
van egymás mellett, cellák tartalmának kicserélése). A programnak tanítást
segítő célzata is van, hiszen az iskolákban lévő gyerekek/tanulók ez által
könnyebben, élvezetesebben tudják elsajátítani a táblázatkezelőben való
programozás alapjait.
2
Felhasználói dokumentációA felhasználói dokumentációba bemutatom a játékok szabályait, illetve, hogy
hogyan is tud/tudnak a felhasználó/felhasználók velük játszani. Minden egyes
játék egy-egy külön Excel fájlba vannak a játékok mappában, azon belül is egy-
egy munkalapon (a Monopoly kivételével, amelynek van egy segéd munkalapja
is). A dokumentáció elején megtalálható a telepítési útmutató, a hardware-s és
a software-s követelmények, ezen játékokhoz.
Telepítési útmutatóA játékok elérését a ’játékok.xlsm’-ből biztosítottam, így elég csak azt elindítani,
hogy elérhessük az összes játékot. A ’játékok.xlsm’-t és a ’játékok’ mappát
másoljuk fel a számítógép tárhelyére, egymás mellé. Arra figyeljünk, hogy a
játékok használata előtt engedélyezzük a makrók futtatását. Illetve szükséges
telepíteni az „Alpha Chess” nevű betűtípust, hogy a sakktábla figurái helyesen
jelenjenek meg, melyet a következő helyről töltöttem le:
http://www.enpassant.dk/chess/fonteng.htm (a CD-n a következő helyen
található meg: „alpha chess/Alpha.ttf).
Hardware/Software környezetA következő software-s és hardware-s követelmények szükségesek a program
futtatásához:
- Hardware:
o Processzor – 500 MHz
o Memória: 256 MB
o Tárhely: 100 MB
- Software:
o Microsoft Office Excel 2007 / Microsoft Office Excel 2010
3
JátékokA játékoknál mindig „Új játék”-ot kell kezdeni, hogy inicializálja a változókat,
kirajzolja a játék pályáját, stb. Mint már írtam az összes játék elérhető a
„játékok.xlsm”-ből, amely a következőképpen néz ki:
1. ábra Játékok
Amőba
2. ábra Amőba
Játék szabályaiAz amőba egy két személyes játék. Az egyik játékos az O a másik pedig a X
szimbólummal játszik. A játékosok felváltva rajzolnak egy-egy szimbólumot, és
akinek átlósan, függőlegesen vagy vízszintesen összegyűlik egymás mellett az
öt darab, az nyer.[1] Ha elfogytak az üres mezők, akkor a játék döntetlen.
Hogyan játszunk?Dupla kattintásra a kijelölt mezőbe X-et, vagy O-t tehetünk, annak megfelelően,
hogy ki következik. Ha az egyik játékosnak összegyűlik az öt darab egymás
4
mellett, akkor a játék kiírja, hogy ki nyert. Ha nem tudunk több jelet lerakni,
akkor a játék kiírja, hogy döntetlen.
Tic-Tac-Toe
3. ábra Tic-tac-toe
Játék szabályaiSzabályai hasonlók az amőbához, csak ez egy 3x3-as pályán játszódik, ahol
csak három darab azonos szimbólumnak kell összegyűlnie. Ha elfogytak az
üres mezők, akkor a játék döntetlen.
Hogyan játszunk?Dupla kattintásra a kijelölt mezőbe X-et, vagy O-t tehetünk, annak megfelelően,
hogy ki következik. Ha az egyik játékosnak összegyűlik az három darab
egymás mellett, akkor a játék kiírja, hogy ki nyert. Ha nem tudunk több jelet
lerakni, akkor a játék kiírja, hogy döntetlen.
5
Connect4
4. ábra Connect4
Játék szabályaiA Connect4 szabályai hasonlóak a sima amőbáéhoz, azzal a különbséggel,
hogy itt négynek kell egymás mellett lennie, illetve a következő szimbólumot
csak az oszlop alulról első üres mezőjére lehet tenni. Ha elfogytak az üres
mezők, akkor a játék döntetlen.
Hogyan játszunk?Dupla kattintásra a kijelölt mezőbe X-et, vagy O-t tehetünk, annak megfelelően,
hogy ki következik. A szimbólumok, mindig az oszlop alulról első üres mezőjébe
„esnek”. Ha az egyik játékosnak összegyűlik az négy darab egymás mellett,
akkor a játék kiírja, hogy ki nyert. Ha nem tudunk több jelet lerakni, akkor a játék
kiírja, hogy döntetlen.
6
Aknakereső
5. ábra Aknakereső
Játék szabályaiA játék célja, hogy a mezőn lévő összes aknát megtaláljuk, illetve azokra ne
lépjünk rá. Olyan mezőre lépve ahol nincs bomba, ott megjelenik a körülötte
lévő bombák száma, így tervezve előre, hogy hogyan, merre tegyük meg a
következő lépést. A játék addig folytatódik, amíg meg nem találjuk az összes
nem aknamezőt, vagy ha aknára lépünk.
Hogyan játszunk?Ctrl+X-szel tudunk egy mezőre lépni. Ha olyan mezőre lépünk, amely nem
akna, akkor kiírja a mezőbe a mellette lévő aknák számát, ha egy aknára
lépünk, akkor viszont vége a játéknak és új játék kezdődik. Ctrl+C-vel pedig be
tudjuk jelölni az aknák helyeit. A játék akkor ér véget, hogy ha az összes nem
akna mezőre rálépünk.
7
Menekülj
6. ábra Menekülj
Játék szabályaiA játék célja, hogy az ellenfeleket a csapdákba tereljük, úgy hogy mindeközben
mi nem lépünk azokba. Az ellenfelek minden általunk megtett lépés után úgy
mozognak, hogy közeledjenek felénk.
Hogyan játszunk?A nyilakkal tudjuk irányítani a játékosunkat, amely annak megfelelően mozog a
pályán. A játék véget ér, hogy ha a játékosunk csapdába esik, elkapják az
ellenfelek, valamint ha az ellenfelek csapdába esnek.
Tili-toli
7. ábra Tili-toli
8
Játék szabályaiA játék célja, hogy a játékmezőn balról jobbra, illetve fentről lefelé sorban
legyen a számok. A játék kezdeténél a számok össze vannak keverve és csak
az üres mező vízszintes vagy függőleges szomszédságába lévő számokat
tolhatjuk abba bele.
Hogyan játszunk?Dupla kattintásra tolhatunk bele számokat az üres mezőbe. Ha sikerül sorba
állítanunk, akkor nyertünk.
Sakk
8. ábra Sakk
Játék szabályaiA sakkjátékot két játékos játssza egymás ellen a négyzet alakú, nyolc sorra és
nyolc oszlopra felosztott sakktáblán, összesen 32 bábuval. A két játékos bábui
határozottan eltérő színűek. A színek elnevezése világos, illetve sötét. A
játékosok felváltva lépnek, mindkettejük célja, hogy a másik fél király figuráját a
játékszabályok szerint mattba állítsa (azaz megtámadják, mégpedig úgy, hogy a
támadást elhárítani se tudja és előle el se tudjon lépni szabályosan).
A figurák a következőképpen léphetnek:
- király: Bármely irányban (vízszintesen, függőlegesen, átlósan) léphet, de
csak egy mezőt, vagyis csak közvetlen szomszédos mezőre léphet.
9
- királynő: Bármely irányban léphet, bármennyi mezőt, mindaddig, amíg a
tábla széléhez nem ér, vagy egy másik figura nem kerül az útjába. Tehát
a mozgása olyan mintha egyesítettünk volna egy futót egy bástyával.
- bástya: Bármennyi mezőt léphet, de csak függőleges és vízszintes
irányban, az átlókon nem.
- futó: Átlós irányban léphet, bármennyi mezőt. Mindkét játékosnak az
egyik futója csak a sötét, a másik futója csak a világos mezőkön
közlekedik.
- huszár: A róla elnevezett „lóugrásban” lép: vízszintesen két mezőt, majd
függőlegesen egyet (vagy fordítva).
- gyalog: Kizárólag előre léphet. A kiindulási helyéről mind a nyolc gyalog
tetszés szerint egy vagy két mezőt léphet előre, a továbbiakban azonban
lépésenként mindig csak egy mezőt haladhat előre. Ütni azonban csak
átlósan tud, szintén csak egy mezőnyi távolságra. Ha a gyalog áthaladt
az egész táblán és eljutott az ellenfél alapsorába, átváltozik tisztté. Ez
úgy történik, hogy a gyalogot levesszük a tábláról, és a helyére állítunk
egy vezért, bástyát, futót vagy huszárt, tetszés szerint.[2]
Hogyan játszunk?Ctrl+Q-val kijelöljük azt a figurát, amit mozgatni szeretnénk, majd Ctrl+W-vel a
kívánt helyre tehetjük. Ha a szabályoknak nem megfelelő lépést próbálunk
tenni, akkor azt a program nem hajtja végre és még mindig ugyanaz a játékos
folytathatja a játékot. A játék mindaddig folytatódik, míg az egyik játékos mattot
nem ad a másiknak, vagy amíg patthelyzet nem fordul elő.
10
Dáma
9. ábra Dáma
Játék szabályaiA hagyományos dámajátékban a sakkal ellentétben a sötét kezd, a játékosok itt
is felváltva lépnek. Az egyszerű dámabábu mindig csak egyet léphet előre az
ellenfél felé, és csakis átlósan, azonos színű mezőre (úgy tehát, ahogy a gyalog
üt a sakkban). Ha azon a mezőn, ahová a bábu léphetne, az ellenfél egy bábuja
áll, és azonos irányban még egy mezőt tovább haladva üres mező van, akkor
ütni lehet: az ellenfél bábuját átugorva a mögötte lévő üres mezőre lépünk, az
ellenfél bábuját pedig levesszük. Ha az ütés után a bábu ismét ütéshelyzetbe
kerül, azt az ütést végre kell hajtani, így ütéssorozat jön létre. Az ütéssorozat
addig folytatható, amíg leüthető bábu van. Az a bábu, amelyik eléri a tábla
szemközti sorát, dámává változik. A dámák szabadabban mozoghatnak, mint
az egyszerű bábuk: minden dáma léphet és üthet hátrafelé is. Az nyeri meg a
játékot, aki lépésképtelen helyzetbe szorítja ellenfelét (ez az is, hogy az
ellenfélnek már nincsen bábuja, mindet leütöttük.).[3]
Hogyan játszunk?Ctrl+Q-val kijelöljük azt a figurát, amit mozgatni szeretnénk, majd Ctrl+W-vel a
kívánt helyre tehetjük. Ha a szabályoknak nem megfelelő lépést próbálunk
tenni, akkor azt a program nem hajtja végre és még mindig ugyanaz a játékos
11
folytathatja a játékot. A játék mindaddig folytatódik, míg az egyik játékosnak el
nem fogynak a játékosai, vagy pedig azokkal nem tud lépni.
Ló-lépésben
10. ábra Ló-lépésben
Játék szabályaiA játék célja, hogy egy figurával (huszárral) bejárjuk az egész sakktáblát úgy,
hogy csak ló lépésben tudunk mozogni.
Hogyan játszunk?Dupla-kattintással tudjuk letenni az első figurát, illetve mozgatni azt a
kiválasztott cellába. Ha nem tudunk már hova lépni, akkor veszítettünk, ha
minden mezőbe léptünk, akkor nyertünk. Amikor vége a játéknak új kezdődik.
12
Társas játék
11. ábra Társas játék
Játék szabályaiA játék célja, hogy minél előbb körbeérjünk a pályán, megelőzve a többi
játékost.
Hogyan játszunk?A „Dobás”-ra kattintással tudunk dobni és a szerint haladunk a pályán. Bizonyos
mezők utasításokat tartalmaznak, amelyek más mezőre irányítják a játékost.
Monopoly
12. ábra Monopoly (egy részlettel kinagyítva)
13
Játék szabályaiA tábla keretén húzódik a játékmező, mely négyzetekből áll, és ingó és ingatlan
vagyontárgyak, vasútállomások, üres mezők sorakoznak rajta. A játékosokat
egy-egy figura jelképezi, amelyet kockadobásokkal mozgatnak a táblán. Attól
függően, hogy milyen mezőre érkeznek, a szabályok engedélyezhetik, hogy
ingatlant vagy ingóságokat vásároljanak, vagy kötelezhetik a játékosokat arra,
hogy bérleti díjat vagy adót fizessenek, szerencsekártyát vagy jótékonysági
kártyát húzzanak. A játékosok vagyontárgyakat vásárolva, eladva és bérelve
arra törekszenek, hogy ők legyenek a leggazdagabbak a táblán, és csődbe
hajszolják a vetélytársakat.[4]
Hogyan játszunk?A „Dobás”-ra kattintva tudunk kockadobást szimulálni, amely szerint a bábuk
lépkednek a táblán. Ha tudunk vásárolni, akkor megjelenik egy ablak, amelyben
eldönthetjük, hogy meg szeretnék e venni azt az ingatlant, amelyen éppen
állunk. Ha összegyűjtjük az összes ugyanolyan színű ingatlant, akkor házat
építhetünk rá, ezáltal több bérleti díjat tudunk beszedni az ellenfél játékosoktól,
mikor rálépnek. A kör végén megpróbálhatunk ingatlant vásárolni
játékostársainktól. Az „Ingatlanok” munkalapon megnézhetjük, hogy melyik
ingatlan kié, illetve hány ház áll rajta. Ha egy játékos 15000-nél több pénzre
tesz szert, akkor automatikusan nyer, ha pedig valakinek elfogy a pénze, akkor
kiesik a játékból.
14
Fejlesztői dokumentáció
Megoldási tervA program megírását úgy kezdtem, hogy különböző típusú és jellegű játékokat
összegyűjtöttem, majd azokat az Excel Visual Basic for Applications
környezetében megvalósítottam. Majd átvizsgálva e programokat egybe
gyűjtöttem azokat az eljárásokat, függvényeket, amelyek többször is
előkerültek, illetve összeírtam még olyanokat is, amelyeket habár én nem
használtam a későbbiekben más fejlesztőknek segítségül lehetnek. Végül
ezeket felhasználva átírtam az előzőleg megírt játékokat, amelyek így
áttekinthetőbbek, kódolási szempontból pedig rövidebbek lettek. A végén pedig
létrehoztam egy Játékállás nevezetű osztályt, amely eltárolja a játékok során
megtett lépéseket majd a játék végén kiírja azt egy fájlba.
Visual Basic for Applications szintaktikaAhhoz, hogy Visual Basic for Applications nyelvben (VBA) tudjunk programozni
elengedhetetlen, hogy ismerjünk a nyelv szintaktikáját, sajátosságait. Ezért egy
rövid ismertetővel kezdem a fejlesztőknek szánt részt.
Alapvető kódolási szabályokUtasításokat külön sorba írjuk, azonban van lehetőség egy sorba több utasítást
is írni, ha azokat kettősponttal választjuk el. A megjegyzéseket aposztróffal
tudjuk elkezdeni. A számokat tízes (pl.: 42), nyolcas (pl.: &O52) és tizenhatos
(pl.: &H2A) számrendszerben is megadhatjuk.
VáltozókFontosabb típusok: Boolean, Byte, Date, Double, Integer, Long, String,
Variant. Változók deklarálása: Dim név As típus. A VBA deklarálás nélkül is
ad típust a változóknak, azonban ha használjuk az „Option Explicit”
kifejezést, akkor az kényszerít minket, hogy még használat előtt deklaráljuk
azokat. Beállíthatjuk a változók hatókörét, Private előtaggal csak az aktuális
egységre terjed ki (pl.: modul), a Public kulcsszóval, viszont azon kívül is
használható lesz. Néhány helyen Public változókat használtam, hogy a
15
különböző modulba lévő teszteseteknél meg tudjam változtatni az értékét, így
tesztelve a játékokat.
Összetett adattípusLehetőségünk van új összetett adattípusok létrehozására.
Type típus_nevenev1 As típus….End Type
Tömbök
Dim tömb_neve( tömb_hossza ) As típus
Például: Dim tomb(5) As Integer
A tömb_hossza csak egész szám lehet. Alapból 0-val kezdve indexeli a tömb
elemeit, de i To j formában akár másféle indexelési módszert is adhatunk
neki. Illetve a program elején „Option Base érték”-kel megváltoztathatjuk a
tömbök kezdőindexét. A tömböt a program futása közben átméretezhetjük:
ReDim tömb_neve( tömb_hossza ) As típus
KonstansokLehetőségünk van konstans változók létrehozására, melyeknek az értékét nem
lehet megváltoztatni. Deklarálása:
Const név As típus = érték
Például: Const PI As Integer = 3.14
ElágazásokVBA-ban a következőképpen néz ki a hagyományos kétágú elágazás:
If feltétel1 Then utasításokElse utasításokEnd If
A kétágú elágazásból ered a többágú:
If feltétel1 Then utasításokElseIf feltétel2 Then utasításokElse utasításokEnd If
16
Egy speciális elágazás féle, mikor egy változó értéke szerint hajtunk végre
utasításokat.
Select Case kifejezésCase értékek utasításokCase Else utasítások
End Select
Ciklusok
SzámlálósSzámlálós ciklus szintaktikája:
For számláló = kezdőérték To végértékutasítások
Next számláló
Feltételes
Előltesztelős
Előltesztelős ciklus szintaktikája:
While feltételutasítások
Wend
Hátultesztelős
Hátultesztelős ciklus szintaktikája:
Doutasítások
Loop While/Until feltétel
Gyűjtemény minden eleméreEgy csoport elemein is végig tudunk menni, még ha nem is tudjuk annak az
elemszámát. Ennek a következő a szintaktikája:
For Each elem In csoportutasítások
Next elem
17
EljárásParamétereket lehet érték szerint ( ByVal ) és referencia szerint ( ByRef ) is
továbbadni eljárásnak/függvénynek. Eljárásokat „Call eljárás_név”-vel
tudunk meghívni.
Sub név ( paraméterek )utasítások
End Sub
FüggvényFüggvény értékét eltárolhatjuk egy változóba (érték =
név(paraméterek)), vagy logikai értékként ciklus, elágazás feltételébe
tehetjük. Függvényt a következőképpen tudunk létrehozni:
Function név(paraméterek) As típusnév = kifejezés
End Function
[5]
Microsoft Office Excel specifikus objektumok, függvényekAz Excel applikációban rengeteg eljárás és függvény van, amiket használni is
fogok a későbbiekben. A fontosabbakat lentebb csoportosítva összegyűjtöttem
rövid ismertetővel.
Üzenetablak használata
MsgBox "szöveg"
Egy ablakba kiírja a „szöveg”-et. vbNewLine-nal sortörést tudunk tenni. & jellel
tudunk a szöveghez hozzáfűzni újabb szöveget, vagy változó értékét. _ jellel a
következő sorba folytathatjuk a kódot a VBA attól még ugyanabba a sorba
számítja.
valtozo = InputBox (szöveg, cím, alapértelmezés)
A beviteli mező értékét a változónak adja. A cím az ablak címét adja meg. Az
alapértelmezés, hogy OK és Cancel gombok vannak az ablakba.
18
Cellákra vonatkozó eljárások, függvények
WorkBooks( fájl_neve ).WorkSheets( munkalap_száma ).Cells( sor, oszlop )
Le tudunk kérdezni egy cella értékét ( Value ), sorszámát ( Row ),
oszlopszámát ( Column ), betűtípus, betűszínre vonatkozó tulajdonságait (
Font.Name - betűtípus, Font.Color – betűszín, Font.Size - betűméret ).
Az aktuálisan kijelölt cella az ActiveCell, amelyen ugyanígy lekérdezhetjük
ezen adatait.
Cells(sor, oszlop).Font.ColorIndex
A cella színét tudjuk megadni vele.
Cells(sor,oszlop).Interior.Colorindex
A cella háttérszínét tudjuk megadni vele.
Cells(sor,oszlop).Borders(xlEdgeLeft).LineStyle
A cella bal keretét állíthatjuk be.
Cells(sor,oszlop).Borders(xlEdgeTop).LineStyle
A cella felső keretét állíthatjuk be.
Cells(sor,oszlop).Borders(xlEdgeRight).LineStyle
A cella jobb keretét állíthatjuk be.
Cells(sor,oszlop).Borders(xlEdgeBottom).LineStyle
A cella alsó keretét állíthatjuk be.
Cells(sor,oszlop).VerticalAlignment
A cellák tartalmának függőleges elhelyezését tudjuk beállítani vele.
Cells(sor,oszlop).HorizontalAlignment
A cellák tartalmának vízszintes elhelyezését tudjuk beállítani vele.
19
Application.GoTo Sheets( munkalap_száma ).Cells( sor, oszlop )
Az adott munkalap, adott cellájára lép.
Események után történő eljárások, függvények
Application.OnKey billentyű, utasítás
A billentyű lenyomására végrehajtja az utasítás-t.
Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Beállíthatunk parancsokat ebbe az eljárásba, amelyek a munkalapon történő
duplakattintáskor hajtódnak végre. Target jelzi a mező helyét, Cancel pedig
egy logikai változó, amellyel be tudjuk állítani, hogy a duplakattintás után
szeretnénk-e változtatni a mező tartalmán.
Workbook_Open()
Beállíthatunk parancsokat ebbe az eljárásba, amelyek a fájl megnyitásakor
hajtódnak végre.
Stringekre, Integerekre vonatkozó eljárások, függvények
MyString = Str(szám)
A szám-ot Stringgé konvertálja.
Új_Szöveg = Replace(szöveg, miről, mire)
A szövegben tudunk lecserélni szövegrészleteket egy megadott Stringre.
InStr([kezdet],szöveg,részlet)
Kikeresi a szövegből a részletet és visszaadja annak helyét. Ha nincs benne,
akkor nullát ad vissza.
IsNumeric(szöveg)
Visszaadja, hogy szám e.
CInt(szöveg), CDbl(szöveg)
String-et Integer-re, illetve Double-re konverátlja.
20
Egyéb eljárások, függvények
application.run "'munkafüzet.xlsm'!module1.eljárás_neve" ,argumentumok
Egy másik fájl moduljából tudunk meghívni eljárásokat vele. Funkciókat viszont
nem.
ActiveSheet.Protect
Le tudjuk védeni a munkalap celláit, hogy azokba ne lehessen írni. UnProtect-
tel pedig fel tudjuk oldani azt.
ActiveSheet.UsedRange.Value
Az aktív munkalap összes cellájának tudunk értéket adni. Ez főleg akkor jó, ha
ki akarjuk üríteni azt.
ActiveWindow.Zoom
Az ablak arányát tudjuk beállítani vele.
WorksheetFunction.Sum( terület )
Kiszámolja a terület összegét.
WorksheetFuncion.Max( terület )
Kiszámolja a terület maximumát.
Rows( sorok ).RowHeight
Beállítja a sorok magasságát.
Columns( oszlopok ).ColumnWidth
Beállítja az oszlopok szélességét.
Rnd()
Véletlenszerű 0 és 1 közötti számot ad vissza. Az intervallum 1-nél nyitott.
JátékokA következőkben bemutatom az egyes játékokban lévő eljárásokat,
függvényeket. A kódban találhatók megjegyzések, melyekkel jobban
21
megérthetőek, hogy mit, miért és hogyan használtam. Minden játékban
használtam az „Option Explicit” kifejezést, így minden egyes változót
használat előtt definiálni kellett, ezzel elkerülve a típus-eltérésbeli hibákat. A
játékok védettek (ActiveSheet.Protect), így a felhasználó a cellákba nem
tud beleírni, ha csak nem oldja fel a védelmet. A modulok és az azon lévő
eljárások nincsenek elrejtve, azok bármikor meghívhatóak, mivel a program
célja az is, hogy az olvasó elsajátítsa a játékfejlesztést a táblázatkelőben.
Tic-Tac-Toe
Sub ujjatek()
Beállítja X-et az első játékosnak, és ki is írja azt. Illetve kirajzolja a 3x3-as
táblát.
Private Sub Worksheet_BeforeDoubleClick( ByVal Target As Range, Cancel As Boolean)
Dupla kattintásra a következő játékos jelét teszi a kijelölt mezőre, ha ott eddig
még nem volt jel, illetve a pályán van az a mező. Ha megvan a három egymás
mellett lévő azonos jel, akkor kiírja, hogy ki nyert, és új játékot lehet kezdeni. Ha
megtelt a játéktér, akkor kiírja, hogy döntetlen.
Connect4
Sub ujjatek()
Beállítja X-et az első játékosnak és ki is írja azt. Illetve kirajzolja a 6x7-es táblát.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dupla kattintásra a következő játékos jelét teszi a kijelölt mező legalsó sorában,
ahol még nincs jel, ha a pályán van az a mező. Ha megvan a négy egymás
mellett lévő azonos jel, akkor kiírja, hogy ki nyert és új játékot lehet kezdeni. Ha
megtelt a játéktér, akkor meg azt, hogy döntetlen.
Amőba
Sub ujjatek()
Beállítja X-et az első játékosnak és ki is írja azt. Illetve kirajzolja a 6x7-es táblát.
22
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dupla kattintásra a következő játékos jelét teszi a kijelölt mezőre, ha ott eddig
még nem volt jel, illetve a pályán van az a mező. Ha megvan az öt egymás
mellett lévő azonos szimbólum, akkor kiírja, hogy ki nyert és új játékot lehet
kezdeni. Ha megtelt a játéktér, akkor meg azt, hogy döntetlen.
Aknakereső
Function AknakSzama(sor As Integer, oszlop As Integer) As Integer
Kiszámolja, hogy az adott mező körül hány akna van.
Function CellaErteke(sor As Integer, oszlop As Integer) As Integer
Ha mező, akkor visszaadja, hogy van e rajta akna, vagy sem.
Sub HaNulla(sor As Integer, oszlop As Integer)
Ha nullára kattintunk, akkor a körülötte lévőkre is rálépünk, hiszen ott biztos,
hogy nincsenek bombák. Rekurzívan addig fut az eljárás, amíg talál nullás
mezőt.
Sub ujjatek()
Kirajzolja a táblát. Kiírja a munkalapra a szükséges információkat. Létrehozza a
mezok mátrixot melyekbe eltároljuk, hogy hol van akna.
Sub Macro1()
Ctrl+X-re rálépünk egy mezőre, ha az egy akna, akkor vége a játéknak, ha nem
akkor kiírja, mennyi akna van körülötte. Ezután kiírja a szükséges információkat
a munkalapra.
Sub Macro2()
Ctrl+C-re bejelölünk egy mezőt, mint egy lehetséges akna helyét. Ezután kiírja
a szükséges információkat a munkalapra.
23
Menekülj
Function lehetEAkna(i As Integer, k As Integer) As Boolean
Megvizsgálja, hogy lehet-e akna a mezőn. Akkor lehet, hogy ha nem a játékos,
nem az ellenfél helye, illetve, hogy ha nincs ott már akna.
Sub ujjatek()
Kirajzolja a táblát. Beállítja a játékos és az ellenfelek koordinátáit. Random
helyekre leteszi az aknákat, ha oda lehet tenni.
Sub ellenfelLep()
Az ellenfél a mi helyzetünk szerint lép.
Sub kirajzol()
Kirajzolja a táblán lévő játékosokat. Ha az ellenfelek csapdába estek, vagy a
játékost elkapták az ellenfelek, vagy a játékos csapdába esett, akkor vége a
játéknak és azt az eljárás ki is írja.
Az irány eljárások, adott irányba mozgatják a játékost, aszerint az ellenfeleket
is, majd a figurákat kirajzolja a táblára.
Tili-toli
Sub ujjatek()
Kirajzolja a táblát a számokkal. Beállítja az üres mező koordinátáit.
Sub keveres()
Összekeveri a játékmezőn lévő számokat.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dupla kattintásra, ha azt a játékszabályok megengedik, akkor kicseréli az üres
cellát a kiválasztott cellával. Ha sorban vannak a számok, akkor vége a
játéknak és új kezdődik.
24
Dáma
Sub ujjatek()
Kirajzolja a táblát a figurákkal. Beállítja kezdő játékosnak a feketét.
Function lephetefelfele(honnanx As Integer, honnany As Integer, hovax As Integer, hovay As Integer, szin As String) As Boolean
Megnézi, hogy az adott figura léphet-e oda (felfelé).
Function lephetelefele(honnanx As Integer, honnany As Integer, hovax As Integer, hovay As Integer, szin As String) As Boolean
Megnézi, hogy az adott figura léphet-e oda (lefelé).
Function tudeutni(x As Integer, y As Integer, szin As String) As Boolean
Megnézi, hogy az adott figura tud-e ütni.
Sub lepes(honnanx As Integer, honnany As Integer, hovax As Integer, hovay As Integer, szin As String)
Elvégzi a figura lépéséhez szükséges műveleteket.
Sub Innen()
Ctrl+Q-val tudjuk kiválasztani a figurát, ha a színe megegyezik a következő
játékos színével.
Sub Ide()
Ctrl+W-vel a kiválasztott figurát mozgatja a kijelölt helyre, ha az a szabályok
szerint lehetséges.
Function vane(szin As String) As Boolean
Megnézi, hogy van e figura az adott színből.
Function tudemozognifigura(x As Integer, y As Integer) As Boolean
Megnézi, hogy az adott figura tud-e mozogni.
25
Function tudemozognijatekos(szin As String) As Boolean
Megnézi, hogy az adott játékos tud-e mozogni.
SakkMinden figurára van egy függvény, illetve egy eljárás. A függvény megnézi,
hogy az a figura tud-e a kijelölt mezőre lépni. Az eljárás pedig el is végzi azt a
mozgást.
Sub ujjatek()
Kirajzolja a táblát a figurákkal. Beállítja kezdő játékosnak a fehéret.
Sub Macro1()
Ctrl+Q-val tudjuk kiválasztani a figurát, ha a kiválasztott figura színe
megegyezik a következő játékos színével.
Sub Macro2()
Ctrl+W-vel a kiválasztott figurát mozgatja a kijelölt helyre, ha az a szabályok
szerint lehetséges. A végén pedig kiírja, ha sakk/matt/patt van, illetve ha vége a
játéknak újat kezd.
Function utesbenvane(x As Integer, y As Integer, szin As String) As Boolean
Megnézi, hogy az adott figura, ütésben van-e.
Function sakkmatt(x As Integer, y As Integer, szin As String) As Boolean
Megnézi, hogy mattban van-e a bemeneti figura (király).
Function atteveutesbenvane(a As Integer, b As Integer, c As Integer, d As Integer) As Boolean
Megnézi, hogy az (a,b) koordinátájú figurát a (c,d)-be rakva ütésben van e.
Function attevesakke(a As Integer, b As Integer, kiralyx As Integer, kiralyy As Integer) As Boolean
Megnézi, hogy az (a,b) koordinátájú figurát átrakva sakkban van e az
ugyanolyan színű király.
26
Function mozgatasutansakke(a As Integer, b As Integer, i As Integer, j As Integer, kiralyx As Integer, kiralyy As Integer) As Boolean
Megnézi, hogy az (a,b) koordinátájú figurát a (c,d)-be rakva sakkban van e a
király.
Ló-lépésben
Sub ujjatek()
Kirajzolja a sakktáblát. Illetve beállítja, hogy még nincs figura a táblán.
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dupla kattintásra tudjuk letenni a figurát, majd mozgatni azt a kiválasztott
cellába, ha az a ló lépés szabályainak megfelel. Ha már mindenhová léptünk,
akkor nyert a játékos, ha már nem lehet hová lépni, akkor pedig veszített. Ha
vége a játéknak, akkor újat kezd.
Társas játék
Sub ujjatek()
Kirajzolja a táblát a figurákkal és a mezőkiírásokkal. Beállítja az első játékost
kezdőnek és a munkalapra is kiírja azt.
Sub mezokkirajzolasa()
Kirajzolja a figurákat és a mezőkiírásokat.
Sub lepes(jatekos As Integer, mennyit As Integer)
Ha a jatekos egy speciális mezőre lép, akkor azt mennyit-tel arrébb lépteti, és
ha az is speciális mező, akkor megismétli ugyanazt addig, míg nem speciális
mezőre lép, vagy vége a játéknak (tehát célba ér). Ha valamelyik játékos célba
ér, akkor kiírja, hogy ki nyert és új játékot kezd.
Sub dobas()
Kockadobást szimulál, ha speciális mezőre lép, akkor a lepes eljárást hívja
meg. Ha körbe ér a következő játékos, akkor vége a játénak és kiírja, hogy ki
nyert és új játékot kezd.
27
Monopoly
Sub ujjatek()
Létrehozza a táblát. Inicializálja az ingatlanok, illetve a játékosok paramétereit.
Beállítja az első játékost.
Sub tablakiirasokkirajzolasa()
Kirajzolja a figurákat és a mezőkiírásokat.
Sub dobas()
Kockadobást szimulál. A rálépett mező tulajdonságai alapján hatást fejt ki. Majd
a végén léptet a következő játékosra. Ha már csak egy embernek van pénze,
akkor vége a játéknak, kiírja, hogy ki nyert és új játékot kezd.
Sub meglepeteskartya(jatekosszam As Integer)
A játékos pénzét növeli egy random számmal.
Sub szerencsekartya(jatekosszam As Integer)
A játékos pénzét növeli/csökkenti egy random számmal.
Function megvanemindaszinbol(jatekosszam As Integer, szin As Integer) As Boolean
Megvizsgálja, hogy az adott játékos birtokolja-e az összes ingatlant az adott
színből.
Sub penztranzakcio(kitol As Integer, kinek As Integer, mennyivel As Integer)
Két játékos között végez pénz tranzakciót a megadott mennyiséggel.
Function vanemarvalakinekingatlana() As Boolean
Megnézi, hogy van-e már valakinek ingatlana.
EljárásokEzek azok az eljárások/függvények, melyeket akár az eddig írt játékokban, akár
a későbbiekben írandó játékoknál hasznosnak találtam, megkönnyítve a
fejlesztő munkáját, vagy akár ötleteket adva neki a következő játékok
28
elkészítésében. Az eljárásokat egy „eljárások.bas” nevezetű fájlba tároltam,
melyet használat előtt egy modulként be kell importálni abba az Excel fájlba,
ahol használni szeretnénk. A VBA nyelvi akadályai miatt ezen eljárások
típushoz vannak kényszerítve, így újrafelhasználhatóságról nem, vagy csak kis
mértékben tudunk beszélni a program során.
Programozási tételekA programozási tételekben szereplő tömböket mindig 0-val kezdődő
indexeléssel használjuk. Erre a felhasználásuk során figyeljünk.
Function osszegzes(tomb() As Integer, hossz As Integer) As Integer
A tömb elemeit összegzi, és visszatérési értékként visszaadja.
Specifikáció:
A = (hossz:ℤ, osszegzes: ℤ)
Ef = (hossz = hossz’)
Uf = (Ef osszegzes= ∑i=0
hossz−1
tomb (i) )
Algoritmus:
osszegzes:=0Ciklus i:=0-tól hossz-1-ig
osszegzes:=osszegzes+tomb(i)Ciklus vége
Function szamlalas(tomb() As Integer, hossz As Integer, relacio As String, szam As Integer) As Integer
Megszámolja, hogy a tömb hány elemére igaz az adott feltétel.
Specifikáció:
A = (hossz:ℤ, szamlalas:ℕ)
Ef = (hossz = hossz’)
Uf = (Ef szamlalas= ∑i=0β ( i)
hossz−1
1 )
29
Algoritmus:
szamlalas:=0Ciklus i:=0-tól hossz-1-ig
Ha β(i) akkor szamlalas:=szamlalas+1Ciklus vége
Function lineariskereses(tomb() As Integer, hossz As Integer, k As Integer) As Integer
A tömb elemeibe megnézi, hogy van-e olyan elem, ami egyenlő a k változóval,
ha igen akkor visszaadja annak indexét, ha nincs akkor -1-et ad vissza.
Specifikáció:
A = (hossz:ℤ, l:𝕃, ind:ℤ)
Ef= (hossz = hossz’)
Uf= (Ef (l, ind)=SEARCH i=0i=hossz−1 (i))
Algoritmus:
i,l:=0,falseCiklus amíg nem l és i<hossz-1
l:=β(i)i:=i+1
Ciklus vége
Function logaritmikuskereses(tomb() As Integer, hossz As Integer, k As Integer) As Integer
Rendezett tömbben megnézi, hogy van-e olyan elem, ami egyenlő a k
változóval, ha igen akkor visszaadja annak indexét, ha nincs akkor -1-et ad
vissza.
Specifikáció:
A = (hossz:ℤ, k: ℤ, l:𝕃, ind:ℤ)
Ef = (hossz = hossz’ k = k’ tomb monoton nő)
Uf = (Ef (l = i[0..hossz-1]: tomb(i)=k) (l ind[0..hossz-1] tomb(ind)=k )
Algoritmus:
l,ah,fh:=false,0,hossz-1Ciklus amíg nem l és ah<=fh
i:=(ah+fh)/2
30
Elágazástomb(i)=k esetén l:=truetomb(i)>k esetén fh:=fh-1tomb(i)<k esetén ah:=ah+1
Elágazás végeCiklus vége
Function maximumkivalasztas(tomb() As Integer, hossz As Integer) As Integer
Kikeresi a tömb legnagyobb értékű elemét és visszaadja annak indexét.
Specifikáció:
A = (hossz:ℤ, ind:ℤ, max: ℤ)
Ef = (hossz = hossz’ 0hossz)
Uf = (Ef (max,ind)=MAX i=0i=hossz−1 tomb(i))
Algoritmus:
max,ind:=tomb(0),0Ciklus i:=1-tól hossz-1-ig
Ha tomb(i) > max akkor max,ind:=tomb(i),iCiklus vége
Function feltetelesmaximumkereses(tomb() As Integer, hossz As Integer, relacio As String, k As Integer) As Integer
Kikeresi azt a legnagyobb elemet, amelyre igaz a feltétel, ha létezik ilyen, akkor
visszaadja annak indexét, ha nincs akkor -1-et ad vissza.
Specifikáció:
A = (hossz: ,l:ℤ 𝕃, ind: , max: )ℤ ℤEf= (hossz = hossz’)
Uf= ( Ef (l,max, ind) MAX i=0hossz−1 tomb(i) )
Algoritmus:
l:=falseCiklus i:=0-tól hossz-1-ig
Elágazásnem l és β(i) esetén l,max,ind:=true,tomb(i),il és β(i) és tomb(i)>max esetén max,ind:=tomb(i),i
Elágazás végeCiklus vége
31
Rendezések
Sub buborekrendezes(ByRef tomb() As Integer, hossz As Integer)
A buborékrendezés elve, hogy egy „buborékkal” haladva a tömbben, több
menetben elölről hátra a buborékban szereplő két elemet felcseréljük, ha azok
rossz sorrendben vannak.
Algoritmus
i:=hossz-1Ciklus amíg nem i=0
Ciklus j:=0-tól i-1-igHa tomb(j)>tomb(j + 1)
akkor cseretombben(tomb, j, j + 1)Elágazás vége
Ciklus végei:=i-1
Ciklus vége
Eljárások
Function mezoe(sor As Integer, oszlop As Integer, n As Integer, m As Integer) As Boolean
Megvizsgál egy cellát, hogy az beletartozik-e a kiválasztott tartományba, majd
visszaadja az eredményt.
Specifikáció:
A = (n: ,m: , sor: , oszlop: , mezoe:ℤ ℤ ℤ ℤ 𝕃)
Ef= (sor = sor’ oszlop = oszlop’ n = n’ m = m’)
Uf = (Ef mezoe = (sor, oszlop) ∈ ([1..n],[1..m]))
Function randomszam(n As Integer, m As Integer) As Integer
Visszaad egy n és m közötti egész számot.
Function mindenholvane(x As Integer, y As Integer) As Boolean
Megvizsgálja, hogy a munkalapon az adott tartományba van-e elem (üres mező
nem számít elemnek) és visszaadja az eredményt.
32
Specifikáció:
A = (x: , y: , mindenholvane:ℤ ℤ 𝕃)
Ef = (x=x’ y=y’)
Uf = (Ef mindenholvane = ∀(i∈[1..x] j∈[1..y]): (i, j)≠””)
Function tartalmaze(x As Integer, y As Integer, a As Integer, b As Integer, sz As String) As Boolean
Megnézi, hogy az adott cellát tartalmazza-e a kiválasztott tartomány, illetve
hogy az inputként megadott Stringet tartalmazza-e.
Specifikáció:
A = (x: , y: ,ℤ ℤ a: , b: ,ℤ ℤ tartalmaze: 𝕃, sz:String)
Ef = (x = x’ y = y’ a = a’ b = b’ sz = sz’)
Uf = (Ef tartalmaze = mezoe(x,y,a,b) (x,y) = sz)
Function hanyvanegymasmellett(x As Integer, y As Integer, a As Integer, b As Integer, sz As String) As Integer
Kiszámítja, hogy hány egymás mellett lévő sz Stringet tartalmazó cella van
egymás mellett vízszintesen, függőlegesen, illetve az átlókban, majd azok
maximumát visszaadja.
Sub cseretombben(ByRef tomb() As Integer, a As Integer, b As Integer)
A tomb-ben cseréli ki az a, illetve b indexű elemét.
Specifikáció:
A = (a: , b: )ℤ ℤEf= ( a = a’ b = b’ )
Uf= ( tomb(a) = tomb(b)’ tomb(b) = tomb(a)’ )
Sub cellacsere(a As Integer, b As Integer, x As Integer, y As Integer)
Kicseréli két cella értékét.
33
Specifikáció:
A Cells(i,j) az adott munkalap i. sor j. elem értékét jelöli.
A = (a: , b: , x: , y: )ℤ ℤ ℤ ℤEf= ( Cells(a, b) = Cells(a, b)’ Cells(x, y) = Cells(x, y)’ )
Uf= ( Cells(a, b) = Cells(x, y)’ Cells(x, y) = Cells(a, b)’ )
Grafikai eljárások
Sub tablakirajzolasa(n As Integer, m As Integer)
Először kiüríti az egész munkalapot. Majd egy n×m-es tartományban a cellák
keretét kirajzolja, így jelölve ki a ténylegesen létező táblát a játéknak. Beállítja a
tábla sorainak a magasságát és az oszlopainak a szélességét. A végén pedig a
táblától 10 cellára, vagy annál messzebb lévő sorokat, oszlopokat kitörli.
Sub sakktablakirajzolasa()
Bekeretezi a 8x8-as sakktáblát, kiszínezi a megfelelő négyzeteket fehérre,
illetve feketére. A sakktábla oldalán kiírja a sorszámokat, alján pedig az
oszlopokra vonatkozó betűjelzéseket.
Sub figurakkirajzolasa(tabla() As String, tablaszinek() As String, sakkfigurake As Boolean)
Három bemeneti tömb paramétere van. Az első a figurák nevei, amelyeket
elhelyez a táblán. A második a figurák színeit, ha W-t tartalmaz, akkor fehér
lesz az adott cella, ha B-t, akkor pedig fekete. Ha a sakkfigurake igaz, akkor a
sakktábla betűtípusát átállítja „Chess Alpha”-ra (mellékelve van a betűtípus),
mely jobb illusztrációt ad az egyes sakkfigurákhoz.
Sub tarsasjatekkirajzolasa(tabla() As String, n As Integer, m As Integer)
Először kiüríti a munkalapot, majd kirajzol egy n×m-es téglalap alakú pályát és
annak a mezőit eltárolja a bemenetnél megadott tömbbe, így később azzal
tudunk dolgozni.
34
Sub mozgatas(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, k As String)
Egy k Stringet mozgat x cellától y celláig. Tud vízszintesen, függőlegesen,
illetve átlósan is mozgatni.
Sub mozgataspalyan(tabla() As String, x As Integer, y As Integer, figura As String)
Egy k Stringet mozgat egy társasjáték tábláján előre, illetve hátra, mindeközben
meghagyva a cella szövegét.
Játékállás osztályA Játékállás nevezetű osztály eltárolja a játékok során megtett lépést majd a
játék végén kiírja azt egy fájlba. A „Játékállás.cls”-t egy modulként be kell
importálni abba az Excel fájlba, ahol használni szeretnénk.
Osztálydiagram
Játékállás
allasok: String()
hossz: Integer
public Hozzafuzes(jatekosszam: Integer, hovax:
Integer, hovay: Integer, mivel: String)
public Nyert(jatekosszam: Integer)
public Veszit(jatekosszam: Integer)
public Dontetlen(jatekosszam: Integer)
public Fajlbairatas()1. táblázat
Eljárásai
Private Sub Class_Initialize()
Inicializálja az osztályt. Létrehozza az allas tömböt és hosszát egyre állítja. Első
eleme, hogy „Játék kezdése”.
Sub Hozzafuzes(jatekosszam As Integer, hovax As Integer, hovay As Integer, mivel As String)
Hozzáfűzi az allas tömbhöz az adott lépés paramétereit.
35
Sub Nyert(jatekosszam As Integer)
Győzelem esetén beteszi az allas tömbbe a végeredményt, majd kiírja azt az
„allas.txt”-be.
Sub Veszit(jatekosszam As Integer)
Vereség esetén beteszi az allas tömbbe a végeredményt, majd kiírja azt az
„allas.txt”-be.
Sub Dontetlen()
Döntetlen esetén beteszi az allas tömbbe a végeredményt, majd kiírja azt az
„allas.txt”-be.
Sub Fajlbairatas()
Kiírja az allas tömb elemeit az „allas.txt”-be. Arra figyeljünk, hogy a fájlt a játék
mellé menti le.
TesztelésA teszteseteket a játékok mellé egy „teszt” nevezetű modulba helyeztem,
amiket egyből ki is lehet próbálni. Némely esetben képet is csatoltam a
dokumentációban az egyes tesztesetekhez.
Programozási tételekEljárások_Teszt1:
- Összegzés, számlálás, lineáris keresés, logaritmikus keresés, maximum
kiválasztás, feltételes maximum kiválasztás működését ellenőrizhetjük.
RendezésekEljárások_Teszt2:
- Minimum kiválasztásos rendezés, buborékos rendezés működését
ellenőrizhetjük.
Grafikus eljárásokMivel ezeket az eljárásokat különböző játékokban használom, ezért csak az
eljáráshoz tartozó játékok egy-egy tesztesetét jelölöm meg.
- tablakirajzolasa: Aknakereső_Teszt1
36
- sakktablakirajzolasa: Sakk_Teszt1
- figurakkirajzolasa: Sakk_Teszt1
- tarsasjatekkirajzolasa: Társasjáték_Teszt1
- mozgatas: Sakk_Teszt1
- mozgataspalyan: Monopoly_Teszt1
Egyéb eljárások- mezoe: Aknakereső_Teszt1
- randomszam: Aknakereső_Teszt1
- mindenholvane: Tic-Tac-Toe_Teszt1
- hanyvanegymasmellett: Tic-Tac-Toe_Teszt1
- cellacsere: Ló-lépésben_Teszt1
A játékok tesztjei a játékot egy adott állapotba állítják, ahonnan könnyebben
tesztelhetjük, ellenőrizhetjük a program sajátosságait/eljárásait. A játékok védve
vannak a beleírástól, így csak az előre megadott lépéstechnikákat használják a
játékosok.
Tic-Tac-Toe
13. ábra Tic-tac-toe_Teszt1
Tic-Tac-Toe_Teszt1:
- (2,1) mezőre X-et téve az X nyer.
- (1,2) mezőre O-t téve az O nyer.
- (1,2) mezőre X-et, (2,1) mezőre O-t, majd (2,3) mezőre X-et téve
döntetlen lesz.
37
Connect4
14. ábra Connect4_Teszt1
Connect4_Teszt1:
- 4. oszlopba már nem lehet tenni több jelet.
- 5.-be még éppen lehet.
- Ha a 4.-be vagy a 7.-be „O”-t teszünk, akkor nyer az a játékos, és vége
lesz a játéknak.
- Ha bármelyik üres oszlopba teszünk, akkor megnézhetjük, ahogyan
lemegy a jel az alsó sorba.
- Ha megtelik döntetlen.
- A táblán kívül nem tehetünk jelet.
AmőbaAmőba_Teszt1:
- Átlós, vízszintes, függőleges győzelem vizsgálata.
- Ha megtelik döntetlen.
- A táblán kívül nem tehetünk jelet.
38
Aknakereső
15. ábra Aknakereső_Teszt1
Aknakereső_Teszt1:
- Ha a bal felső 8x8-as mezőbe lépünk egy mezőre (ami biztosan egy
olyan mező lesz, ami mellett nincs akna), akkor minden olyan mezőt
felfed, ami mellett ugyancsak nincs akna, illetve a szomszédos mezőket
is felfedi (amiket jól számol ki a mellette lévő aknák összegeként).
- Innen már könnyen tesztelhetjük, hogy mi van, ha aknára lépünk.
- Illetve mi van, ha minden nem aknamezőt felfedünk, megnyerve ezzel a
játékot.
39
Menekülj
16. ábra Menekülj_Teszt1
Menekülj_Teszt1:
- Csak arra léphetünk, amerre van mező.
- Első lépés után az ellenfelek kiesnek és vége a játéknak.
Menekülj_Teszt2:
- Ha csapdába lépünk, akkor kiesünk és vége a játéknak.
Tili-toliTili-toli_Teszt1:
- Csak a megfelelő számokat tehetjük az üres cellába.
- Ha sorba vannak a számok, kiírja, hogy nyertünk és új játék kezdődik.
40
Dáma
17. ábra Dáma_Teszt1
Dáma_Teszt1:
- Ha a fehérrel beérünk az első sorba, akkor duplakarakter lesz, ami
bármerre léphet.
- A fekete nem tud mozogni, így a fehér nyer és vége a játéknak.
Dáma_Teszt2:
- Egymás utáni ütés.
- Ha a fekete figurák elfogynak, akkor a fehér nyer és vége a játéknak.
41
Sakk
18. ábra Sakk_Teszt1
Sakk_Teszt1:
- A bástyák és királyok nem tudnak szabálytalanul mozogni.
- Ha a fehér paraszttal belépünk a felső sorba, akkor megválaszthatjuk,
hogy mi legyen belőle.
- A fehér király nem tud lépni, mivel bárhová lépne ütésben lenne.
- A többi figurával sem tudunk lépni akárhová, hiszen „sakk” van, csak a
bástyával védhetjük be a királyunkat.
- A fehér bástya kiütésével elérhetjük, hogy a fehér király mattba legyen és
vége legyen a játéknak.
- Ha csak a két király marad, akkor patthelyzet van és vége a játéknak.
42
Ló-lépésben
19. ábra Ló-lépésben_Teszt1
Ló-lépésben_Teszt1:
- Csak ló lépésben lehet közlekedni, különben nem engedi és ezt ki is írja.
- Ha bejártuk az egész táblát, akkor nyertünk és azt ki is írja.
Ló-lépésben_Teszt2:
- Ha belépünk az (1,1) koordinátájú mezőre, akkor nem tudunk mozogni
tovább és vége a játéknak.
TársasjátékTársasjáték_Teszt1:
- Dobás során léphetünk speciális mezőre, amellyel még előrébb
léphetünk x mezőt.
- Vagy célba érhetünk, amellyel a célba érkező játékos nyer, vége a
játéknak és új játék kezdődik.
MonopolyMonopoly_Teszt1:
- Új ingatlan vétele.
- Mástól való ingatlan megvásárlása.
43
- Játékos1 rendelkezik a sötétkék színű ingatlanokkal, így ha vele
rálépünk az egyik ilyen színűre, akkor tudunk rá házat venni.
- Ha az egyik ellenfél rálép a Játékos1 ingatlanjára, akkor fizet neki.
- Ha a Játékos2 lép rá, akkor neki elfogy a pénze, kiesik a játékból és
eltűnik a pályáról a figurája.
Monopoly_Teszt2:
Játékos4 kiesett a játékból, így ő a további körökből kimarad.
Fejlesztési lehetőségekVégezetül felsorolok pár olyan dolgot, amelyekkel fejleszteni, bővíteni lehetne a
programot:
- Mesterséges intelligencia beépítése a kétszemélyes játékoknál.
- Még több, olyan eljárás/függvény írása, amelyek a későbbiekben segítik
a játékfejlesztést táblázatkezelőre.
44
Irodalomjegyzék[1] Wiki, Amőba - http://hu.wikipedia.org/wiki/Amőba - 2013.04.29.
[2] Wiki, Sakk - http://hu.wikipedia.org/wiki/Sakk - 2013.04.29.
[3] Wiki, Dáma - http://hu.wikipedia.org/wiki/Dámajáték - 2013.04.29.
[4] Wiki, Monopoly - http://hu.wikipedia.org/wiki/Monopoly - 2013.04.29.
[5] BME Általános és Felsőgeodézia Tanszék, VBA szintaktika -
http://www.agt.bme.hu/szakm/oop/vba.htm - 2013.05.05
45
MellékletekA mellékelt CD-n a következő fájlok találhatók:
- játékok.xlsm
- eljárások.xslm
- eljárások.bas
- Játékállás.cls
- alpha chess/Alpha.ttf
- játékok/aknakereso.xlsm
- játékok/amoba.xlsm
- játékok/connect4.xlsm
- játékok/dama.xlsm
- játékok/lolepesben.xlsm
- játékok/menekulj.xlsm
- játékok/monopoly.xlsm
- játékok/sakk.xlsm
- játékok/tarsasjatek.xlsm
- játékok/tictactoe.xlsm
- játékok/tilitoli.xlsm
46