people.inf.elte.hu · Web viewA program célja, hogy probléma-középpontosan vezesse végig az...

54
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

Transcript of people.inf.elte.hu · Web viewA program célja, hogy probléma-középpontosan vezesse végig az...

Page 1: people.inf.elte.hu · Web viewA 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.

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

Page 2: people.inf.elte.hu · Web viewA 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.

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

Page 3: people.inf.elte.hu · Web viewA 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.

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

Page 4: people.inf.elte.hu · Web viewA 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.

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

Page 5: people.inf.elte.hu · Web viewA 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.

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

Page 6: people.inf.elte.hu · Web viewA 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.

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

Page 7: people.inf.elte.hu · Web viewA 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.

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

Page 8: people.inf.elte.hu · Web viewA 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.

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

Page 9: people.inf.elte.hu · Web viewA 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.

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

Page 10: people.inf.elte.hu · Web viewA 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.

- 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

Page 11: people.inf.elte.hu · Web viewA 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.

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

Page 12: people.inf.elte.hu · Web viewA 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.

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

Page 13: people.inf.elte.hu · Web viewA 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.

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

Page 14: people.inf.elte.hu · Web viewA 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.

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

Page 15: people.inf.elte.hu · Web viewA 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.

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

Page 16: people.inf.elte.hu · Web viewA 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.

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

Page 17: people.inf.elte.hu · Web viewA 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.

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

Page 18: people.inf.elte.hu · Web viewA 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.

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

Page 19: people.inf.elte.hu · Web viewA 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.

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

Page 20: people.inf.elte.hu · Web viewA 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.

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

Page 21: people.inf.elte.hu · Web viewA 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.

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

Page 22: people.inf.elte.hu · Web viewA 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.

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

Page 23: people.inf.elte.hu · Web viewA 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.

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

Page 24: people.inf.elte.hu · Web viewA 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.

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

Page 25: people.inf.elte.hu · Web viewA 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.

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

Page 26: people.inf.elte.hu · Web viewA 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.

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

Page 27: people.inf.elte.hu · Web viewA 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.

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

Page 28: people.inf.elte.hu · Web viewA 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.

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

Page 29: people.inf.elte.hu · Web viewA 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.

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

Page 30: people.inf.elte.hu · Web viewA 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.

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

Page 31: people.inf.elte.hu · Web viewA 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á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

Page 32: people.inf.elte.hu · Web viewA 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.

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

Page 33: people.inf.elte.hu · Web viewA 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.

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

Page 34: people.inf.elte.hu · Web viewA 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.

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

Page 35: people.inf.elte.hu · Web viewA 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.

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

Page 36: people.inf.elte.hu · Web viewA 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.

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

Page 37: people.inf.elte.hu · Web viewA 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.

- 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

Page 38: people.inf.elte.hu · Web viewA 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.

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

Page 39: people.inf.elte.hu · Web viewA 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.

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

Page 40: people.inf.elte.hu · Web viewA 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.

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

Page 41: people.inf.elte.hu · Web viewA 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.

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

Page 42: people.inf.elte.hu · Web viewA 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.

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

Page 43: people.inf.elte.hu · Web viewA 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.

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

Page 44: people.inf.elte.hu · Web viewA 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.

- 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

Page 45: people.inf.elte.hu · Web viewA 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.

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

Page 46: people.inf.elte.hu · Web viewA 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.

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