MODERN SZÁMÍTÓGÉPES JÁTÉKOK SZKRIPTELÉSE DIPLOMAMUNKA

Méret: px
Mutatás kezdődik a ... oldaltól:

Download "MODERN SZÁMÍTÓGÉPES JÁTÉKOK SZKRIPTELÉSE DIPLOMAMUNKA"

Átírás

1 GÉPÉSZMÉRNÖKI ÉS INFORMATIKAI KAR INFORMATIKAI INTÉZET ÁLTALÁNOS INFORMATIKAI INTÉZETI TANSZÉK MODERN SZÁMÍTÓGÉPES JÁTÉKOK SZKRIPTELÉSE DIPLOMAMUNKA KÉSZÍTETTE: Sándor Balázs NK: BE46EI KONZULENS: Dr. Mileff Péter egyetemi adjuktus Miskolc, 2015

2 Köszönetnyilvánítás Köszönöm Dr. Mileff Péter konzulensemnek a diplomamunka során nyújtott alapos, lényegre törő segítségét, útmutatását és hogy még a hétvégéken sem felejtkezett meg rólam. Tanácsadása nélkül ez a diplomamunka nem jöhetett volna létre ilyen formában. Tiszta szívből köszönöm szüsleimnek, nagyszüleimnek és testvéreimnek, hogy bizonyos időközönként ellenőrizték az életfunkcióimat, néha elláttak étellel-itallal, és morális támaszt nyújtottak, amikor leginkább szükségem volt rá. Külön köszönettel tartozok páromnak, Szűcs Melindának, hogy elviselt akkor is, amikor a fáradtság, a túlterheltség, vagy a kezdeti sikertelenség miatt nem voltam önmagam. 2

3 Tartalomjegyzék 1. Bevezetés Videojáték-ipar Egy kis történelem PC Master Race Modern számítógépes játékok Szkriptnyelvek Mi fán terem? Típusok [13] Illesztő (glue) nyelvek Feladatvezérlő (job control) nyelvek GUI scriptnyelvek Alkalmazás-specifikus scriptnyelvek Kiegészíthető, és beágyazgató nyelvek A szkript nyelvek osztályozása A Játékfejlesztés szkript nyelvei Sajátosságok Szerepek Összefoglalás: Elterjedt szkriptnyelvek a játékiparban Javascript Squirrel AngelScript LUA Néhány nyelv összevetése Szkript nyelvek akcióban Lua Telepítés Ismerkedés a szintaxissal A Lua és a Unity rendszer közös használatának előkészítése A Unity-ről és jelentőségéről röviden Unity tapasztalatok Spawnolt és megölt mob kiírása Pontozási rendszer megoldása Lua-val

4 Töltényszámlálás és újratöltés a Lua segítségével Összefoglalás Summary Irodalomjegyzék:

5 1. Bevezetés 1.1. Videojáték-ipar A videojáték-ipar, mint neve mutatja, a videojátékok fejlesztésével, marketingjével, és eladásával foglalkozó gazdasági szektor. Önmagában véve is számtalan munkakört foglal magába, és emberek ezreinek ad munkát világszerte. A videojáték fejlesztés és eladás, mint a szórakoztatóipar bármelyik más formája, gyakran több tudományágat is magába foglaló terület. Az ipar az évek során közel minden szakterületre kiterjedt, mely a mozifilm, vagy televíziós programok készítésével kapcsolatos. Hangmérnökök, zenészek dolgoznak együtt játékfejlesztőkkel, tervezőkkel, ezeket a csoportokat pedig producerek vezetik. Az ipar születésekor ezek a feladatok gyakran egyetlen egy emberre hárultak, ám a platformok fejlődésekor létrejött komplexitás megkövetelte az ágak tagolódását. Ez a tagoltság az egyre növekvő iparban, és egyre növekvő felhasználói elvárások révén az egyes csoportok növekedésében fontos szerepet játszott. 1. ábra: A modern játékipar bevételei [1] Az ipar és a fejlesztői gárda növekedésével azonban megnövekedett a játékfejlesztés költsége is. Így válhatott az iparág egy markáns ágazattá, mely a többi szórakoztató-ipari ágazattal is versenyre kelhet. 5

6 Miután a technológia folyamatosan fejlődik, egyre több és több játék jelenik meg a piacon, és az aktuális generáció zöme számítógép-felhasználó, egyre többen és többen vásárolnak videojátékokat. A videojáték-ipar ma már évi 65 milliárd dolláros üzlet, ezzel megelőzi a szórakoztató-ipar két másik nagyját, a zeneipart és a mozit is, és a világ egyik legdinamikusabban fejlődő ágazatává nőtte ki magát. Érdemes megjegyezni, hogy az ágazat 2008-as világválság idején is képes volt ütemes növekedést produkálni Egy kis történelem Természetesen az iparág nem csak bevételben fejlődött. Hosszú utat tett meg például az egyik elsőként számon tartott, 1947-es születésű Cathode Ray Tube Amusement Device-hoz (magyar fordításban: Katódsugárcső szórakoztató-eszközhöz) képest, amelyet a II. Világháborúban használatos radar kijelzők ihlettek. A játékosok gombok segítségével változtathatják a fénysugarak (rakéták) röppályáját, arra törekedve, hogy eltalálják a világos képernyőre átfedéssel megjelenített célpontokat. Mivel a játék pusztán mechanikán alapszik, és nem használ sem számítógép-generált grafikát, sem programot, illetve a létrehozásához sem volt szükség számító- vagy memóriaegységre, az első helyezés erőteljesen kétségbe vonható. Versenyzik a helyért például az Alexander Sandy Douglas által megteremtett mesterséges intelligencián alapuló OXO játék, amely lényegében az amőba játék megfelelője. Kicsivel később kezdetét vette a korai árkád konzolok generációja, amelyet a intervallum foglalja magába. A Pong volt az első játék, amely megnyitotta ezt a kaput. Ezzel szinte egyidejűleg zajlott a nagyszámítógépek korszaka (mainframe computer) 1971-től 1980-ig. Legnagyobb sikert elért játékai a teljesség igénye nélkül - a Star Trek, Maze War, Adventure től máris újabb időszámítás következett, eljött ugyanis a második generációs konzolok ideje. Ezek a konzolok az általános célú mikroprocesszor, és a játékkazetta fogalmát hozták be a játékos közösség tudatába. Az ekkori három fő konzol az Atari 2600 (VCS), az Intellivision, és a ColecoVision voltak. 6

7 A konzolok mellett természetesen az árkád gépek is fejlődtek, a közötti intervallum ugyanis az árkád videojátékok aranykora néven vált emlékezetessé. Egyik legjellegzetesebb korai játék, a Space Invaders sikere ugyanis játékok lavináját indította meg. A játék sikerén felbuzdulva jöhetett létre az Asteroids, a Pac-Man, a Donkey Kong, a Frogger, és még sorolhatnánk. 2. ábra: A híres Space Invaders játék karakterei A korszak 1980 körül érte el az abszolút csúcsot, ami rengeteg technikailag innovatív, és műfajokat meghatározó játékok fejlesztése és kiadásának egyik kezdő időpontja. Az ekkor kialakult műfajok közé sorolhatjuk az alábbiakat: Kalandjátékok Szerepjátékok Verekedős játékok Hack & slash Interaktív filmek Útvesztők Verseny játékok Valósidejű stratégia Run & gun shooter-ek Ritmuson alapuló játékok Lopakodó/settenkedő játékok Túlélő horror játékok Szimulátorok Talán jól látható, hogy a korábbi generációkhoz képest jóval szerteágazóbbá vált a játékipar. A hardverek fejlődése itt két főbb részre szakad. Megjelennek ugyanis a személyi számítógépek, amelyek egészen más ütemben fejlődnek, mint a konzolok. 7

8 A harmadik generációs konzolok ( ) dobogósai a kimagasló sikerű Nintendo Entertainment System (NES), a Sega Master System, és az Atari A NES hatalmas sikerei árnyákot vetettek konkurenseire, de ez sem volt 3. ábra: Nintendo Entertainment System (NES) elég, hogy eltűnjenek. Ez a korszak olyan legendás 8-bites játékok életre kelését jelentette, mint például a Dragon Quest, a Final Fantasy, a Super Mario Bros., a Mega Man 2, a Metal Gear, illetve a Legend of Zelda. Címek, amik a mai napig jelen vannak a játékiparban, és amik nélkül talán nem lenne keveredés: Zelda a lány, akit meg kell menteni. A kis zöld ruhás figurát Linknek hívják. A negyedik generációs konzolok megjelenésével hivatalosan is beköszöntött a 16-bites játékok érája ( ). Kezdetéül a PC Engine/TurboGrafx- 16/TurboGrafx piacra kerülése szolgált, és sorra 4. ábra: A játékvilág egyik legnagyobb félreértése Link és Zelda összekeverése követték a vetélytársak: a Neo Geo AES, illetve személyes kedvenceim, a Super Nintendo Entertainment System, illetve a Sega Mega Drive /Genesis. A generáció további érdekessége, hogy ekkor jelentek meg az első sikeres hordozható játékgépek. Természetesen mindjárt négy fő konzol is az élen találta magát, eső helyen az akkori nagy újító, a Nintendo. A millió eladott példányú Game Boy révén joggal érezhette magát az abszolút első helyen. További említésre méltó kütyük: Atari Lynx, Sega Game Gear, TurboExpress. 8

9 Ez a korszak szintén nagy neveket hozott napvilágra, mint például: Mortal Kombat Super Metroid Sonic the Hedgehog Street Fighter II Streets of Rage 2 Super Mario World 2: Yoshi's Island Donkey Kong Country Chrono Trigger 5. ábra: A Mortal Kombat ikonikus logója A következő (ötödik) generációt gyakran nevezzük 32-bit, 64-bit, illetve 3D éráknak. Megközelítőleg az időszakot értjük alatta. Ekkor jelent meg a 3D-s poligon grafika textúra leképezéssel, a CD-ROM, mint tárolóeszköz, a CD minőségű hanganyagok, a 24-bites színmélység, illetve a 3D-s grafikai képességek, mint például a fényeffektusok, Guraud árnyékolás, anti-aliasing, és textúra szűrés. Az ötödik generációs konzolok eladott példányait az 1. táblázat mutatja. Konzol Eladott darabszám PlayStation millió Nintendo millió Sega Saturn 9.5 millió 3DO 2 millió Atari Jaguar 250,000 Amiga CD32 100,000 PC-FX < 100,000 FM Towns Marty 45,000 Apple Bandai Pippin 42,000 Természetesen ez az éra is termett hordozható konzolokat is, mint például: Sega Nomad R-Zone Virtual Boy Game Boy Pocket Game Boy Light Game Boy Color Neo Geo Pocket / Neo Geo Pocket Color Az ekkor megjelent sikerjátékok felsorolása számukból adódóan szinte lehetetlen, ezért a teljesség igénye nélkül: Pokémon Red és Blue, Crash Bandicoot, FIFA International Soccer, Gran Turismo, GoldenEye 007, The Need for Speed, Resident Evil, Super Mario 64, Super Smash Bros., Spyro the Dragon, Star Fox 64, Tekken 3, Time Crisis, Tomb Raider, House of the Dead. 9

10 A hatodik konzol éra a jól bevált kettes szorzóval lép tovább, a 128-bites érának nevezett korszak újabb otthoni készülékeket hozott a játékos közösségnek. Ezt a konzolháborút a Sony PlayStation 2 nyerte vetélytársaival, a Dreamcasttal, a GameCube-bal, és az Xboxszal szemben. A hordozható rendszerek harca lényegében a Nintendo, a Nokia, és a Tapwave harcából állt, melyet a Nintendo nyert meg Game Boy Advance / Advance SP / Micro triójával, a Nokia N-Gage/ N-Gage QD duójával, és a Tapwave Zodiac konzoljával szemben. Ez a korszak sok jelenség miatt vált érdekessé. Ez volt az első korszak, amikor cross-platform stratégiát vezettek be. Ebben a korszakban csúcsosodtak ki a játékvilággal kapcsolatos legélesebb vitatémák legyen szó szexről, drogokról, rock n roll-ról, politikáról, vallásról, vagy feminizmusról. Végre megjelent az online gaming a konzolokra is, melynek a PC tört utat. A nagy játékkészítők sorra borultak egymás kardjára, vagy éppen ölébe így születhettek meg olyan cégek, mint a Namco Banda vagy a Square Enix. Természetesen ez a korszak is hozott nagy neveket és nagy újítókat egyaránt. Egyebek között a God of War, Halo: Combat Evolved, Soul Calibur, valamint a korábbi címek folytatásai: Resident Evil 4, Super Smash Bros. Melee, Tekken Tag Tournament. A hetedik konzol generáció is nagy kihívók háborújáról szólt Xbox 360, PlayStation 3 és a Nintendo Wii mérettettek meg -, itt azonban igen erős minőségi ugrás is történt, kiszélesedett ugyanis a konzolokhoz kapcsolódó szolgáltatások, és nem utolsó sorban hardver eszközök serege. Megjelentek a vezeték nélküli vezérlők, lehetőség adódott a konzolok memóriabővítésére, a Wii mozgásérzékelőjével még interaktívabb játékokat hoztak létre, mellyel később az Xbox Kinect-je is versenybe szállt. Az internettel való szoros összekapcsolódás magával hozta például az online áruházak, a globális játékos profilok, és az online szórakoztatóipar többi ágazatának beolvadását. Ez nagymértékben hozzájárult a konzolok soha nem látott elterjedéséhez. Természetesen tovább fejlődtek az alap hardverek is. Minden szebb, nagyobb, gyorsabb lett. Említésre méltó játékcímek közé tartozik az Assassin s Creed II, a legendás Batman: Arkham Asylum, a sokak kedvencévé vált BioShock, az egyértelműen konzolokra szánt 10

11 Grand Theft Auto IV és V, a kasszasiker Gears of War. Ekkor jelent meg külön hardverekkel - a Guitar Hero és a Rock Band, a kizárólag konzolra készült, a hatalmas világot felölelő The Elder Scrolls V: Skyrim, az állandó Call of Duty ez esetben a Modern Warfare alcímmel, és akkor még nem is említettem a sok-sok, mozgásérzékelős hardverekhez készült interaktív játékcsodákat. A máig virágzó éra legsikeresebb játékai végül a három konzolra (különálló programként eladva): Xbox 360: Grand Theft Auto V, millió eladott példánnyal PlayStation 3: Grand Theft Auto V, millió eladott példánnyal Wii: Mario Kart Wii, millió eladott példánnyal A konzolok nyolcadik generációjával pedig el is érkeztünk a jelenkor legújabb csodáihoz. A jelenlegi hármas a Nintendo Wii U, a PlayStation 4 és a Microsoft Xbox One. Nyertest sem a konzoleladások, sem pedig az eladott játékok terén nem érdemes hirdetni, 6. ábra: A nagy sikereket elért GTA V borítója hiszen ez egy aktív küzdelem, és csak most érkeznek az igazi NextGen játékok. Ami biztos, hogy a szolgáltatások még inkább letisztulttá váltak, a hardverek pedig újabb minőségi ugráson estek túl. [2] [3][4] 11

12 PC Master Race A konzolos korszakok kivesézése után szeretnék visszaugrani a PC szféra fejlődésére, ami sok szempontból különbözik a korábban felsoroltaktól. Természetesen a csúcstechnológiás személyi számítógépek mindvégig úttörő szerepet játszottak a konzolok életében, például a 3D-re történő átállást is a PC-s hardverek megerősödése tette lehetővé. A korai 3D játékok a flat-shading technikával, később pedig a Wolfenstein 3D-ben megjelenő textúraleképzéssel törtek előre. Felépítésükből kifolyólag nehéz volna generációkra bontani a személyi számítógépek fejlődését, miután az egyes alkatrészek egymástól függetlenül, folyamatosan fejlődtek. Megfigyelhetünk azonban trendeket és technológiai szemléletváltozásokat, melyek kihatnak napjaink rendszereire és játékaira egyaránt. Míg a konzoloknál csak az utóbbi generációkban vált egyértelművé az állandó internetkapcsolat, a PC játékokban már az 1980-as években is szóba jöttek online játékok, kétségtelenül csak alap szinten. Ez a szemléletmód azonban később azt tette lehetővé, hogy MMORPG-k (Massively Multiplayer Online RolePlaying Game), azaz sokszereplős online szerepjátékok születhessenek, és virágozhassanak. Ennek a műfajnak az első jelentős megtestesítői közé sorolhatjuk az EverQuestet és az Ultime Online-t. Az ide tartozó aktuális játékok felsorolása évekig telne, de személyes kedvencemként a World of Warcraft-ot említeném meg, mely nemrégiben töltötte be tízedik születésnapját, és mai napig aktívan fejlődik. Ez a műfaj a mai napig zömmel PC exkluzív játékokat jelent, csakúgy ahogy az RTS (RealTime Strategy), valósidejű stratégia játékok esetén. Ez utóbbi műfajt az 1992-es Dune II tette elterjedtté, s egyben megihlette a későbbi Warcraft: Orcs & Humans, Command & Conquer, és StarCraft játékok létrejöttét. Az FPS műfaj is rengeteg ráncfelvarráson esett túl, talán ennél a műfajnál vált leginkább nyilvánvalóvá, hogy a számítógépes játékok nagyon hasonlóak a filmekhez. A folyamatosan fejlődő grafika mellett a szkriptelt, moziszerű bejátszások hangulata örökre testvérekké avatta a mozi- és a játékvilág ágait. [5] [6] 12

13 Ahogy a konzolvilág esetén láthattuk a mozgásérzékelő eszközök elterjedését, úgy a PC szféra a 3D-s játékok, és az utóbbi időben a VR- Virtual Reality terén lépett előre. A legfrissebb virtuális valóság eszközök a tökéletes jelzői a számítógépes játékok ipari húzóerejének. A játékcégek évtizedeken át licitáltak egymásra a legújabb játékmotorjaikkal, a legnagyobb grafikai, fizikai és élménybeli sikereket hajhászva, ezzel motiválva a hardveripart erősebb és erősebb termékek kifejlesztésére, és elterjesztésére. A mai játékfejlesztő cégek legfőbb célkitűzése AAA (vagy tripla-a) játékok létrehozása. 7. ábra:kevin Spacey bedigitalizált megfelelője is igazolja a mozi- és a játékvilág egybefonódását 1.3. Modern számítógépes játékok A számítógépes játékok besorolását két fő módon osztjuk el. Az első természetesen a műfaj (genre) szerinti megkülönböztetés. A másik azonban egy minőségi osztályozás, melynek a csúcsán az AAA játékok állnak. Az AAA nem rövidítés, egyszerűen azt jelenti, hogy az ebbe a kategóriába tartozó játékok az iparágon belül a legnagyobb büdzsével dolgoznak, és legalább akkora marketinges háttérrel rendelkeznek, mint egy mai csúcskategóriás film. Egy AAA besorolású játék tehát egy kiváló minőségű játékot jelent, amelyek gyakran az adott év bestsellerei közt foglal helyet. A három A elméletileg egyegy szempont szerint osztható ki. A szempontok a következők: 13

14 Sikeresség osztályzása: Egy A -t akkor érdemel ki a játék, ha a kritikusok összesített véleménye szerint tökéletes, vagy közel tökéletes osztályozást szerzett. Innovatív játékmenet: A játék valami olyan új, egyedi (természetesen pozitív) elemet hoz az iparba, amely tisztán kiemeli vetélytársai közül. Financiális siker: Hatalmas profitot elért játék esetén jár a harmadik A. Röviden összefoglalva, egy tripla A játék egy mozis kasszasiker videojáték verziója. Természetesen a AAA cím megszerzése egyrészt hatalmas eredmény, másrészt presztízskérdés a nagy játékszoftver-fejlesztő cégek számára, ezért az a bizonyos léc az évek során újra és újra magasabbra emelkedik. Ez a verseny a mai hardveres és szoftvertechnológiai fejlődés egyik legerősebb mozgatórugója. Ezt többek között az is igazolja, hogy teljes szoftverhálózatok, illetve online áruházak ezrei jöttek létre az iparág eladásainak kiszolgálására. A videojáték-ipar ily módon az informatikai ágazat egyik legfontosabb ágazata, bármilyen furcsán is hangzik. A mai helyzet kialakulásához vegyük példának a Valve cég történetét nagy vonalakban. A Valve Corporation-t 1996-ban alapította két Microsoft munkavállaló, Gabe Newell és Mike Harrington. Első dolguk volt, hogy megvásárolták a Quake játékmotorjának licenszét, és elkezdték megvalósítani saját játék-elképzelésüket, a Half-Life nevű FPS játékot, amelyet november 19.-én adtak ki. A játék 8. ábra: Gabe Newell elismertségét a róla alkotott meme-ek is igazolják azóta legendává nőtte ki magát, sok szempontból számít korszakalkotónak. A következő lépcső az eredetileg Quake-hez készült Team Fortress mód megszerzése, és átalakítása, majd kiadása volt, amelyet 1999-re sikerült meglépniük. Ez után újabb Half- Life játékok következtek kiegészítésként. A Valve csapat a nagy sikereken felbuzdulva saját motor fejlesztésébe kezdett, amelyet Source game engine névre kereszteltek. A játékmotor nagy érdekessége, hogy az azóta létrehozott összes Valve játék erre épül. A létrejött hat játéksorozat a következő: Half-Life, 14

15 Team Fortress, Portal, Counter-Strike, Left 4 Dead és a Day of Defeat. Ezek a játékok egytől egyig sikeresek lettek, és egy részük a rajongói moddolások eredményei. Azt hinnénk, hogy itt véget ér a Valve zsenialitása, de valójában csak itt kezdődik. Miután egyetlen motorra építettek hat befutott franchise-t, egy saját játékplatformot hoztak létre Steam néven. Ennek funkciója eredetileg csak a játékfrissítések hatékony alkalmazása volt, ám csakhamar webes áruházzá is alakult. A 2002-es indulása óta nem csak hogy néhány havonta frissítik a legnépszerűbb játékaikat, de új modokat, pályákat, achievementeket hoznak létre, melyet központilag kezelnek. Mi több, lehetővé teszik a játékosok hozzájárulását, ahogyan korábban is. Ettől lesz életképes, és a közönség igényeihez idomuló rendszer. Miután a saját játékaikat sikeresen árulták, más fejlesztők játékait is elkezdték forgalmazni, és bevezették mikro-tranzakciók rendszerét, aminek segítségével aprónak tűnő pénzösszegekért vásárolhat a mezei játékos a kedvenc játékához különleges tartalmakat. A Valve évente többször is tart általános játék-leárazást, ami tovább növeli népszerűségüket. A Valve folyamatban lévő fejlesztései között szerepel egy saját konzol (Steam Machine) piacra tétele, a Virtual Relity Headset terjesztése és integrálása, egy saját operációs rendszer életre hozása (SteamOS), és a Source Engine 2 kiadása, amely ingyenes fejlesztőeszközként is alkalmazható lesz. A cég 2012-es bevétele egy megközelítő becslés alapján 2.5 milliárd amerikai dollár. A sikerük azonban nem csak pénzben mérhető. Ez a cég önmagában is hatalmas mértékben segítette elő az informatikai világ fejlődését, rengeteg fejlesztő céget emelt ki a névtelenségből, és rengeteg embernek tette elérhetővé a játékipar adta lehetőségeket és termékeket. Mindez egyetlen cég, egy csapat lelkes informatikus, akik pizzából, sörből és kávéból programkódot varázsolnak. [8][9][10][11] 15

16 Hasonlóan nagy játékfejlesztő cégek például az Activision-Blizzard, amely csak a havi előfizetéses World of Warcraft-jával körülbelül tízmillió aktív játékost tart számon, vagy a Microsoft és az Electronic Arts, akik évente dobnak piacra autós- és sportjátékokat. [12] 9. ábra: World of Warcraft előfizetők számainak változása (millió felhasználó) [12] Sajnos az iparágnak tulajdonított jelentőség Magyarországon eléggé alacsony. Mindez annak ellenére, hogy több magyar fejlesztőcsapat is ért el kisebb-nagyobb sikereket, és rengeteg lelkes informatikus ugrana az első adandó lehetőségre, hogy játékszoftvert fejleszthessen. A diplomamunkám gyakorlati részében a modern videojáték-ipar leginkább elterjedt szkript nyelveit fogom vizsgálni, illetve bemutatni, továbbá dokumentálom és bemutatom az általam készített minta-demókat. 16

17 2. Szkriptnyelvek 2.1. Mi fán terem? A hosszú bevezető után térjünk a tárgyhoz. A diplomamunkám címe Modern számítógépes játékok szkriptelése. De mi is az a szkriptelés? Szkriptnyelvnek nevezzük azokat a programnyelveket, amelyek szkripteket támogatnak. A szkriptek pedig olyan programok, amelyek különleges futtatási környezetre íródtak, melyek feladatok végrehajtását képesek automatizálni, vagy egy operátor segítségével, egyesével meghívni azok függvényeit. Másik definíció szerint a 10. ábra: Egy egyszerű, saját szkriptnyelvvel (EezeeScipt) készített játékprogram szkriptnyelvek definiálhatóak programnyelvekként, amelyeknek a fő célja az, hogy felhasználói számára biztosítsa szoftverek vagy applikációk irányítását, vagy viselkedésének beállítását. Például a Visual Basic nyelvet a Microsoft Excel viselkedésének beállítására használhatjuk, a Python nyelvet pedig a Maya beállítására. Ez a környezet lehet szoftveralkalmazás, egy böngészőben megnyitott weboldal, egy operációs rendszer shell-je, vagy beágyazott rendszer. A szkriptnyelvre tekinthetünk az adott környezet domain specifikus nyelveként is. Egy alkalmazás szkriptelése esetén kiegészítő nyelvként (extension language) felfoghatjuk. Esetenként pedig nagyon magas szintű programozó nyelvként tartják számon, amely képes magas szintű absztrakcióra, esetleg kontrollnyelvként, például egy mainframe feladatokat irányító kódok esetén. A játékfejlesztés világában a szkriptnyelvet egy magas szintű, relatíve könnyen használható programnyelvként tekintjük, amely felhasználói számára egy kényelmes hozzáférést nyújt a motor leggyakrabban használt elemeihez. Ily módon programozók és 17

18 nem programozók egyaránt képesek lesznek új játékok fejlesztésére, vagy egy meglévő játék testreszabására, vagy moddolására. A szkriptnyelv kifejezés tágabb fogalomként használható dinamikus, magas szintű, általános célú nyelvek meghatározásánál is, mint amilyen például a Perl, a Tcl, vagy a Python. Ekkor a szkript kifejezést az ilyen nyelven megírt kis (néhány ezer soros kódú) programokra használjuk. E nyelvek gyakran egy adott környezetben történő felhasználásra készültek elsősorban, és később fejlődtek tovább hordozható, domain specifikus, vagy általános célú nyelvekké. A szkriptnyelvek spektruma a nagyon kicsi, és nagyon domain specifikus nyelvektől a teljesen általánosan felhasználható nyelvekig terjed. Alapvető szkriptnyelv példaként a következőket szokás megemlíteni: Bash: az Unix és Unixhoz hasonló operációs rendszerekhez ECMAScript (JavaScript): a böngészőkhöz, esetenként kiegészítő nyelvként is Visual Basic: alkalmazásokhoz, például Microsoft Office alkalmazásokhoz Lua: kiegészítő nyelvként Python: általános célú nyelv, kiegészítő nyelvként is használatos 2.2. Típusok [13] A szkriptnyelveket több szempont szerint is csoportosíthatjuk, ám a legáltalánosabb csoportok a következők: Illesztő (glue) nyelvek Ezek a nyelvek az egyes rendszerkomponensek összekötésével foglalkoznak. A csővezeték és shell szkriptelés az illesztő nyelvek leginkább kézenfekvő példái, többek között a Perl nyelv erre a célra készült. Bizonyos szempontból a webes nyelveket is ide sorolhatjuk, hiszen az adatbázis és a web szerver közötti interfészt valósítja meg. Az illesztő nyelvek tehát külön szoftverkomponensként is felfoghatóak. 18

19 Amik miatt hasznos megírni és karbantartani: Egyéni parancsokat hozhatunk létre egy parancssor számára Kisebb programokra bonthatjuk a kódokat, és külső kódból hívhatjuk meg a szkript függvényeit Előnyös, ha a szkript változhat, hiszen csak egy helyen kell változtatnunk Néhány elterjedt illesztő nyelv: Unix Shell Scriptek Windows PowerShell VBScript JScript és JavaScript Python Ruby Lua PHP Ezeken kívül az operációs rendszerhez, vagy valamilyen alkalmazás komponenshez kapcsolódó makró nyelveket is ide sorolhatunk Feladatvezérlő (job control) nyelvek A szkriptnyelvek egy nagy osztálya a feladatkezelés automatizálásából nőtte ki magát, a rendszer programjainak indítása és irányítása céljából GUI scriptnyelvek Mivel ma már a legtöbb alkalmazás és szoftver grafikus felületet használ, így felmerült a számítógép irányításának grafikus megközelítésének ötlete. Ezek a nyelvek ugyanazokat a grafikus ablakokat és gombokat használják, mint bármelyik felhasználó, és jellemzően a felhasználó viselkedését automatizálják. Ezeket a nyelveket gyakran makróként is nevezik, amikor az irányítás gombnyomást, vagy egérkattintást szimulál. Ezek a nyelvek elméletben bármely grafikus alkalmazást képesek lennének irányítani, de gyakorlatban a felhasználásuk erősen korlátozott, amelyet az alkalmazások és operációs rendszerek támogatásának hiánya adja. Ez a korlát nagyon kevés kivétellel valamennyi 19

20 GUI szkriptnyelvre elmondható. Néhány ilyen szkriptnyelv ugyanis nem függ az operációs rendszertől, vagy alkalmazástól, mivel a grafikai objektumok megjelenített pixeleiből olvasnak Alkalmazás-specifikus scriptnyelvek Több nagyméretű alkalmazásnál is jellemzővé vált, hogy nem általános szkriptnyelvet, hanem saját, személyre szabott szkriptnyelvvel dolgoznak. Ilyen lehet például egyes számítógépes játékokban a nem játékos karakterek mesterséges intelligenciájának, vagy a játék környezetének megalkotásához használatos egyéni kód. Ezek a nyelvek általában csak egy kifejezett alkalmazáshoz készülnek, és bár kívülről általános célú nyelvnek tűnhetnek (mint a QuakeC, amely a C nyelv egyik leképzése), rendelkeznek egyéni elemekkel, amelyek miatt elkülönülnek. Egy alkalmazás-specifikus szkriptnyelvet tekinthetünk domain specifikus programnyelvként is, amely egyetlen alkalmazásra specializált Kiegészíthető, és beágyazgató nyelvek Néhány nyelvet a célból hoztak létre, hogy az alkalmazás specifikus szkriptnyelveket helyettesítsék, méghozzá az alkalmazás programjába történő beágyazás útján. Az alkalmazásfejlesztő úgynevezett horgokat (hook) helyeznek el a kódba, ahol a szkriptnyelv irányítja az alkalmazást. Ezek a nyelvek technikai értelemben véve megegyeznek az alkalmazás specifikus nyelvekkel, de amikor az alkalmazás egy általános nyelvet ágyaz be, a felhasználó képessé válik arra, hogy alkalmazásról alkalmazásra továbbítsa a szakértelmét. Egy ennél általánosabb alternatívát jelent, ha egy egyszerű könyvtárat nyújtunk - ez általában C nyelvű. Ez esetben ugyanis egy általános célú nyelv irányítja az alkalmazást, átalakítás nélkül. A szkriptnyelvek az idő haladtával gyakran váltottak csoportot. A JavaScript például azért készült, hogy a webes böngészők legfőbb beépített szkript nyelve legyen. Ezt a pozíciót máig tartja, bár manapság elterjedt az ECMAScript és más nyelvek is. 20

21 A Tcl kiegészítő nyelvként született, ám a Python, Perl és Ruby nyelvekhez hasonlóan általános célú nyelvvé alakult. A Rexx azonban feladatkezelőként kezdte, ma viszont egyaránt használják általános célú, vagy kiegészítő nyelvként A szkript nyelvek osztályozása [14] A játékvilág szkript nyelvei rendszerint kétfelé oszlanak: Adatdefiníciós nyelv: Az adatdefiníciós nyelv fő célja, hogy a felhasználó létrehozhasson adatstruktúrákat, amelyeket később a motor feldolgoz. Az efféle nyelvek gyakran deklaratívak, és vagy futási időben, vagy azon kívül töltik be az adatokat a memóriába. Futásidejű szkriptnyelvek: A futásidejű szkriptnyelvek kódjait rendeltetésszerűen a motor futásidőben fordítja és futtatja. Ezek a nyelvek általában vagy kiegészítik, vagy személyre szabják a motor játékobjektum modelljének, vagy más motor beégetett kódját. A programnyelvek karakterisztikája szempontjából ugyancsak több részre oszthatjuk a szkriptnyelveket. Vehetjük például az értelmező nyelvek és a lefordított nyelvek ellentétét. Egy lefordított nyelv forráskódját egy fordítóprogram segítségével váltjuk gépi kóddá, amelyet a CPU közvetlenül végrehajthatja. Ezzel szemben egy értelmező nyelvet vagy közvetlenül futásidőben fordítjuk, vagy előfordítjuk platform független byte kóddá, amelyet később egy virtuális gép futta le, szintén futásidőben. A virtuális gép ilyenkor egy képzeletbeli CPU emulációjaként funkcionál, és a byte kód viselkedése egy gépi kód parancsaihoz hasonló módon működik. Egy virtuális gép haszna, hogy kifejezetten könnyen portolható közel bármely hardver platformra, és könnyen beágyazható egy hoszt alkalmazásba, mint egy játékmotor. Ezért a rugalmasságért a futásidő megnövekedésével kell fizetnünk, egy virtuális gép ugyanis a byte kód parancsait jellemzően lassabban hajtja végre, mint ha közvetlenül a natív CPU kapná a gépi parancsokat. Egy másik ellentét az imperatív és deklaratív nyelvek között húzódik. Egy imperatív nyelvnél egy program leírható parancsok soraként, melyek mindegyike egy-egy operációt hajt végre, és/vagy egy memóriában lévő adat állapotát változtatja. Ilyenek például a C illetve C++ nyelvek. 21

22 A deklaratív nyelvek ezzel szemben leírják a kívánt változásokat, de nem adják meg az eredmény megszerzésének módját. A Prolog a deklaratív nyelvek egyik legkézenfekvőbb példája. Hasonlóképpen, a HTML és a TeX is ebbe a csoportba tartoznak. Funkcionális nyelvek: A funkcionális nyelvek bizonyos szempontból a deklaratív nyelvek részhalmazába tartoznak. Egy funkcionális nyelv esetén ugyanis funkciók gyűjteményéből áll egy program. Minden funkció egy eredményt ad, a rendszer megváltoztatása nélkül. Egy programot a funkciók meghívását jelenti bemeneti adatokkal, és addig fut, amíg a végső eredményt meg nem kapjuk. Ide tartoznak az Ocaml, Haskell, és F# nyelvek. Procedurális és objektum-orientált nyelvek: Egy procedurális nyelvben egy program szerkezetének legkisebb eleme az eljárás (vagy funkció). Ezek a procedúrák és funkciók operációkat végeznek, eredményeket számolnak, és/vagy megváltoztatják a különböző adatstruktúrák állapotát a memóriában. Ezzel szemben egy objektumorientált nyelv alapvető szerkezeti eleme az osztály, egy szorosan összetartozó adatstruktúra, az ide tartozó, pontosan meghatározott funkciókkal és eljárásokkal. Reflektív nyelvek: Egy reflektív nyelvben az adattípusok információi, az adattagok szerkezete, funkciói, és hierarchikus kapcsolatai futásidőben lekérdezhetők a rendszerben. Egy nem reflektív nyelvben ezen adatok nagy részének elérése csak fordítási időben érhető el, és csak töredékük adható tovább a futásidejű kód számára. A C# például egy reflektív nyelv, míg a C és a C++ nem reflektív nyelvek A Játékfejlesztés szkript nyelvei A magas szintű szkriptnyelvek egyre gyakrabban veszik fel a beépített kiegészítő szerepet a mögöttes, alsó- vagy középszintű programnyelvek mellett, mint amilyen például a C++ nyelv. Néhány fejlesztőcsoport saját nyelvet hozott létre a játékukhoz, mint például az id Software QuakeC nyelve, vagy az Epic Games UnrealScript-je. Ezek a fejlesztőcsoportok a játékukhoz legközelebb álló nyelvet igyekeznek létrehozni. Más cégek ezzel szemben már létező szkriptnyelveket használnak, mint amilyen például a Lua és a Python. Az ő nézőpontjuk szerint ez egyszerűbb megoldás, egyrészt mert nem kell 22

23 a semmiből egy új nyelvet létrehozniuk, másrészt mert a programozók nincs szükség speciális kiképzésre. Mindkét szkriptnyelv típus célja, hogy a fejlesztett alkalmazásokhoz gyorsabban tudjanak új funkciókat hozzátenni, és a játékmotorok is gyakran alkalmazzák ezeket a nyelveket. A fejlesztés során gyorsabb prototípusgyártás történhet, és a finomhangolás is szabadabbá válik. Mindezt anélkül, hogy a programozónak túlságosan el kelljen merülnie az alacsony szintű programozási részletekbe, vagy minden finomhangolás után újra kelljen build-elnie a kódot (ami meglehetősen időköltséges lehet). Az iparban sokféle nyelvet használnak, a korábban már említett, ismertebb Pythontól és Lua-tól kezdve a kevésbé ismert AngelScripten át a Squirrelig. Ezeket gyakran használják játékmenet szkriptelésre, de jellemzően nem a játék belső kódolására Sajátosságok A játékipar szkript nyelvei rendelkeznek olyan általános tulajdonságokkal, amelyeket a natív programnyelv-testvéreiben nem feltétlenül fedezhetünk fel: Előfordított. A legtöbb szkriptnyelvet egy virtuális gép értelmezi, nem előfordított. Ezt a választást a rugalmasság, hordozhatóság és gyors iteráció érdekében hozták meg. Amikor egy kód platform független byte kód formájában áll elő, akkor a motor könnyen tudja adatként kezelni. Betölthető a memóriába, mint bármelyik másik eszköz, és mindez az operációs rendszer segítsége nélkül történhet. Mivel a kódot a virtuális gép hajtja végre a közvetlen CPU-elérés helyett, így a játékmotor megkapja a rugalmasságot, hogy a szkript kód futtatásának mikéntjéről dönthessen. Könnyű. A legtöbb szkriptnyelv egy beágyazott rendszerben történő felhasználásra készült. Ebből kifolyólag a virtuális gépek egyszerűek, és a memóriahasználatuk meglehetősen kis területre terjed. A gyors iteráció támogatása. Amikor egy natív kód megváltozik, a kódot újra kell fordítani és linkelni, illetve a játékot újra kell indítani a határ érzékeléséhez. Ezzel szemben, ha egy szkript kód változik, a változásokat villámgyorsan észlelhetjük. Néhány játékmotor még azt is engedélyezi, hogy a szkript kód menet közben töltődjön újra a játék újraindítása nélkül. Természetesen ez azt jelenti, hogy létezik olyan is, amelynél újraindítás 23

24 szükséges, de ez az újraindítás a natív kód változtatásához képest még mindig sokkal gyorsabb. Könnyű használhatóság és kényelem. A szkriptnyelvek gyakran testre szabhatóak egy adott játék igényeihez. A nyújtott szolgáltatások, amelyek a fő elemeket tartalmazzák egyszerűek, intuitívek, és hibabiztosak lehetnek. Például egy játék szkriptelési nyelv nyújthat játékobjektum név szerinti megkeresésére, események küldésére és kezelésére, idő megállítására és folyásának változtatására, időzítésre használható elemeket, vagy hálózati segítséget nyújthat a többszereplős játékokhoz Szerepek A script kódok többféle szerepet ölthetnek egy játék motorjában. Temérdek mennyiségű architektúrát építhetünk fel. Kezdve a legkisebb kódfoszlánytól, ami egyszerű funkcionalitást biztosít egy objektum számára, egészen a teljes rendszert átívelő magas szintű szkriptek, amelyek az adott játék teljes operációját menedzselik. Néhány példa a széleskörűség bemutatására: Szkriptelt visszahívások. E szerint a hozzáállás szerint a motor funkcionalitása beégetve található a natív programnyelvben, de néhány kulcsfontosságú funkcionalitás testre szabható. Ezt gyakran valamilyen horog (hook) funkcióként, vagy visszatérésként valósul meg, a felhasználó által létrehozott függvényként, amit a motor a testreszabás érdekében hív meg. Ezek a horog funkciók természetesen megírhatók a natív nyelven is, de egyaránt lehetőségünk van a szkriptelt verzió megírására is. Például a játék ciklusában egy játékobjektum frissítésekor a motor egy opcionális visszahívó függvényt hívhat meg, amelyet szkript nyelven írtak. Ez lehetőséget ad a frissítés módjának beállítására, a játékobjektumra vonatkozóan. Szkriptelt eseménykezelők. Egy eseménykezelő valójában egy speciális horog funkció, aminek célja, hogy a játékobjektum -, vagy maga a motor - valamilyen fontos esemény történése esetén reagálni tudjon. Legyen szó egy játékbeli robbanás eseményéről, vagy egy memóriatúlcsordulásról. Sok játékmotor esetén a saját eseménykezelő horgot létrehozhatjuk a natív kódban és szkriptként egyaránt. Néhány szkriptnyelv keretein belül játékobjektum típusokat hozhatunk létre, vagy már meglévőeket egészíthetünk ki. Néhány szkript nyelvben a már natív nyelvben 24

25 implementált játékobjektum típusokat is kiegészíthetjük szkriptekkel. Ez megoldható öröklődéssel ekkor a natív kódbeli osztályból örököltetünk egy gyereket a szkript részen -, vagy kompozíció illetve aggregáció segítségével például a szkriptelt osztály egy példányát a natív játékobjektumhoz csatoljuk. Szkriptelt komponensek vagy tulajdonságok. Egy komponens-, vagy tulajdonságalapú játékobjektum modellnél jogos igény, hogy új komponenseket vagy tulajdonságokat tudjunk létrehozni akár részlegesen, akár teljesen a szkript oldalon. Szkript vezérelt motor rendszer. A szkript segítségével egy teljes játékrendszert irányíthatunk. Például egy játékobjektum modell megírható teljes egészében szkript oldalon, ami a natív motor kódjait csak akkor hívja meg, amikor alsó szintű motor komponensekre van szüksége. Szkript alapú játék. Néhány játékmotor tulajdonképpen megfordítja a natív kód és a szkriptnyelv szerepét. Ezekben a motorokban a szkript kód futtat mindent, és a natív kód csupán könyvtárként funkcionál, ami néhány nagy sebességű elemet tartalmaz a motor számára. A Panda3D motor egy jó példája ennek az architektúrának. A Panda3D játékok teljes mértékben megírhatók Python nyelven, és a natív, C++ alapú motor könyvtárként működik, amit szkript kóddal hívnak meg. [15][16] [17] 25

26 Összefoglalás [18] Tehát miért is jó egy szkriptnyelv? Kevesebb bug/ hiba. A szkriptnyelvek zömmel segítik a programozó munkáját az átlagos hibák elkövetésétől. Ez kevesebb hibakeresést eredményez a programozó oldaláról. Ez pedig végül ahhoz vezet, hogy a végtermékben kevesebb fel nem fedett hibával fogunk találkozni. Könnyebben tesztelhető. Mivel a szkriptnyelvet nem kell újra és újra lefordítani a kód változása után, így gyorsabban letesztelhetjük az új kódot. Csak átírjuk a hibás kódrész, és futtatjuk az új verziót. Gyorsabb fejlesztési idő. A magas szintű eszközöknek, a rövidebb hibakeresési időnek, és a gyors tesztelhetőségnek hála gyakran kevesebb időbe telik egy helyesen működő kód megalkotása. Egyszerűség. Egy szkriptnyelv rendszerint egyszerűbb, mint egy átlagos programnyelv. Ami még jobb, hogy a szkriptnyelvek általában jól dokumentáltak. Kiterjesztések és módosítások. Ha szkript nyelvekkel dolgozunk, akkor nyitva hagyjuk a lehetőséget a felhasználóink számára is, ha szeretnék kiegészíteni, vagy testre szabni a kódunkat. 26

27 2.5. Elterjedt szkriptnyelvek a játékiparban A játékfejlesztés során aktuálisan legelterjedtebb szkriptnyelvek a következők: Javascript A JavaScript egy dinamikus programnyelv. A nyelv eredetileg az ECMAScript implementációjaként jött létre, és ebből nőtte ki magát. Tehát effektíve a JavaScript ezt a szabványosított nyelvet implementálja. Mint az ismeretes, leginkább webes böngészőkben használatos, implementációja lehetővé teszi az alábbiakat: a kliensoldali szkriptek interakcióját a felhasználókkal a böngésző irányítását az aszinkron kommunikációt a megjelenített tartalmak átalakítását 11. ábra: A JavaScript logója Szintén használatos szerveroldali hálózat programozására a Node.js-hez hasonló futtatási környezetben, PC és mobilos alkalmazások programozására, illetve játékfejlesztésre. Mivel egyes fordítók segítségével C és C++ nyelvű kódokat fordíthatunk JavaScriptre, ami pedig szinte natív sebességű végrehajtást eredményez, ezért a nyelvet többen a web assembly nyelveként nevezik. Ezen kívül olyan környezetekben is használják, mint például a PDF dokumentumokban, oldal-specifikus böngészőkben, és asztali alkalmazásokban. A JavaScript prototípus-alapú szkript nyelvként tartják számon, ami dinamikus típusosságot használ. A felhasználás módjának változatossága miatt multi-paradigma nyelvként tekintünk rá, ami egyaránt támogatja az objektum orientált, imperatív és a funkcionális programozási stílusokat. A megnevezése, szintaxisának és alapvető könyvtárbeli hasonlóságaik ellenére a Java és a JavaScript egymástól teljesen független nyelvek, és nagyon különbözőek szemantikájukban. A JavaScript valójában a C szintaxisához hasonlít, míg a szemantikája és dizájnja a Self and Scheme programnyelveket követi. 27

28 A játékipar szempontjából talán egyik legfrissebb felhasználási módja a HTML5 canvas elemével való összepárosítása, melynek segítségével teljes játékmotorok százát hozták létre. Struktúráját tekintve a C nyelvben megszokott elemeket használja fel (például az if feltételeket, a while ciklusokat, switch struktúrát). Ami azonban eltérő a C nyelvtől, az a változók hatóköre, mivel a JavaScript a funkcionális hatókörök elvét alkalmazza. A C-hez hasonlatosan megkülönböztet kifejezéseket, és utasításokat, viszont szintaxisában eltér a pontosvesszők figyelése terén a kódhoz automatikusan hozzátesz pontosvesszőket ott, ahol a program megbukna emiatt. Ahogy a legtöbb szkript nyelvben, úgy a JavaScriptben is értékeket kezelünk típusokkal, nem változókat. Például egy x változó lehet szám, majd később szöveg is, így dinamikus típusosságról beszélhetünk.[19] A JavaScript szinte teljes mértékben objektum alapú. A JavaScript objektumai asszociatív tömbök, prototípusokkal kiegészítve. Az objektum tulajdonságnevei szövegesek, a megadásuk kétféle módon történik: Pontozott jelölés: objektum.attribútum = érték Szögletes zárójeles megadás: objektum attribútum] = érték 12. ábra: Egy JavaScript objektum megadásénak két módja A tulajdonságok futásidőben hozzáadhatók, módosíthatók és törölhetők. Az objektum tulajdonságai és leszármazott elemei egy for in loop segítségével lekérdezhetők. A 28

29 JavaScript ezen kívül tartalmaz néhány alap objektumot is, mint például a Function és a Date. A JavaScript egy eval funkciót is tartalmaz, amely szöveg formában megadott parancsokat képes lefuttatni futásidőben. Egy JavaScript funkciót first-class-nak (első osztályúnak) nevezünk, ha a funkció maga egy objektum. Ekkor ugyanis tulajdonságai és metódusai is vannak, mint például a.call(), vagy a.bind(). A JavaScriptben léteznek beágyazott funkciók is, ekkor értelemszerűen egy funkcióba ágyazott, másik funkcióról van szó. Ez a funkció annyiszor jön létre, ahányszor a külső (szülő) funkciót meghívják. Ezen kívül minden egyes létrehozott funkció lexikálisan lezárul. Ez azt jelenti, hogy a külső funkció lexikális hatóköre az ide tartozó helyi változók, konstansok, és argumentum értékek - a belső funkciók belső attribútumaivá válnak, és ezek az értékek a külső funkció lefutása után is megmaradnak. A JavaScript hasznosságához hozzájárul továbbá a névtelen funkciók használatának lehetősége is. 13. ábra: A 2048 nevű logikai játék kifejezetten széleskörű játékosbázist gyűjtött viszonylag rövid idő alatt Korábban szó esett a JavaScript prototípus alapú felépítéséről. A nyelv ugyanis prototípusokat használ ott, ahol más nyelvek öröklődést alkalmaznak, ezzel szimulálva hasonló működést. A funkciók meglehetően egyéni módon működnek a nyelvben, mivel a megszokott működés mellett egyben objektum konstruktorként is felfoghatók. Egy függvényhívást a new prefix-szel ellátva ugyanis egy prototípus példány jön létre, ami megörökli a konstruktor tulajdonságait és metódusait, az objektum prototípust is ide értve. A legtöbb objektumorientált nyelvvel ellentétben a JavaScriptben nem teszünk különbséget a metódus, illetve a funkció kifejezések között. A különbség valójában a funkció meghívásakor jelentkezik. Amikor egy funkciót egy objektum metódusaként hívunk meg, akkor a funkció helyi this kulcsszava a meghívás során az adott objektumhoz kötődik. 29

30 A JavaScript natív módon támogatja a szerepek funkcióalapú implementációit, mint a Trait-ek vagy a Mixin-ek. Az efféle funkciók extra viselkedést nyújtanak, amelyek a funkcióhoz kötöttek. Egy szerep ezután explicit módon delegálható, például egy hívás során. Míg az explicit funkció alapú delegáció nem tekinthető kompozíciónak a JavaScriptben, az implicit delegáció minden egyes alkalommal megtörténik, ahányszor a prototípus-láncot bejárjuk. Vegyünk példának egy metódust, amely kapcsolódhat az objektumhoz, de nem szerves része annak. Amint a metódust megtaláljuk, az objektum kontextusából meghívódik. Ily módon a JavaScript öröklődés egy delegáló automatizmus által kerül megvalósításra, amely a prototípus konstruktor funkció tulajdonságához kötött. A JavaScript jellemzően a futásidejű környezetre támaszkodik az objektumok és metódusok szolgáltatását illetően, amelyek segítségével kommunikálhat a környezettel (például egy weboldal és a DOM struktúra esetében). Szintén a futtatási környezetre támaszkodik a scriptek importálása és beágyazása szempontjából is, mint a HTML nyelv <script> jelölője esetén. Ez nem kifejezetten nyelvi funkció, de valamennyi JavaScript implementációra jellemző. Egy funkció végtelen mennyiségű paraméter átadására és feldolgozására képes. A funkciók formális paramétereken keresztül érhetik el, valamint lokális argumentum objektumokként hivatkozva rájuk. Ahogyan sok szkript nyelvben, a tömbök és objektumok (ezeket máshol asszociatív tömbként értelmezzük) egyaránt hozhatók létre tömör, rövidített szintaxissal. Valójában ezek a literálok alkotják a JSON adatformátum alapjait. 14. ábra: A CookieClicker játék is virálisan került a köztudatba A JavaScript ezen kívül támogatja a reguláris kifejezések használatát, méghozzá a Perl nyelv verziójához nagyon hasonló módon, ami egy rövid, tömör, és erőteljes szintaxissal 30

31 dolgozik, ami a beépített szöveges funkciók eszköztáránál jóval kifinomultabb szövegmódosításra ad lehetőséget. A nyelvet hivatalosan a Mozilla Foundation menedzseli, és fejleszti folyamatosan. A korábban említett funkciókon kívül néhány extra képességgel is felruházták a nyelvet, ám ezek csak néhány JavaScript verzióban és engine-ben találhatóak meg: Tulajdonság getter és setter funkciók (WebKit, Gecko, Opera, ActionScript, és a Rhino támogatják) Feltételes catch ág Iterátor protokoll (a Python-ból átemelve) Tömb-értelmező és generáló kifejezések (szintén a Python-ból átemelve) Továbbfejlesztett blokk hatókörök használata a let kulcsszó használatával Tömb és objektum lebontás Tömörebb funkció kifejezések (function(args) expr) [20] A JavaScript főképp a webes játékok világában számít jelenleg elterjedtnek, bár úgy tűnik, hogy kezdi kinőni ezt a szerepét és a weben kívüli alkalmazások körében is egyre inkább terjed. Természetesen ez nem jelenti azt, hogy a web centrikusság itt megszűnik, hiszen a HTML5 óta újabb és újabb elemekkel gazdagodott a JavaScript tárháza, és egyre szélesebb körű eszköztárat nyújt a programozó és a felhasználók számára. Mi több, egyre inkább elterjedtek a készen gyártott játékkészítő tutorialok, programok és alkalmazások. Kezdve a Mozilla Foundation nyílt forráskódú BrowserQuestjénél, egészen a Scirra, ImpactJS, CreateJS és ehhez hasonló JavaScript játékmotorokig. A weboldal például összegyűjtötte a leginkább támogatott és elismert JavaScript játék keretrendszereket, melyek közt fizetős, ingyenes, vagy mindkét típussal rendelkező szoftverek is találhatók. Legtöbben úgy vélik, hogy a HTML5 átveszi a flash helyét, ami az online videót és felhasználói felületet illeti. A nagy kérdés az, hogy az online gaming területén is átveszi-e az uralmat. Az Apple, a Microsoft, a Google és a Mozilla egyaránt nyomják előre elterjedését. Mint a négy legnagyobb technológiai cég és ami még fontosabb: a négy nagy böngésző cég -, valószínűsíthetően sikerre fogják vinni a technológiát. Az Apple csodákat művelt a HTML5-tel és a canvas elemmel a mobilalkalmazásokban. A Windows 8-cal a Microsoft bemutatta a HTML5 iránti elkötelezettségét, amikor 31

32 engedélyezte a fejlesztők számára, hogy natív alkalmazásokat írjanak HTML5-ben és JavaScripttel. A Google V8 Engine-je elképesztő HTML5 játékok létrehozását tette lehetővé, teljesen életképessé téve őket. A Mozilla pedig a Mozilla Marketplace segítségével az appok és játékok böngészős installálásával, a HTML5 alapú mobilos operációs rendszerével vette ki a részüket a küzdelemből. Nem beszélve magáról a BrowserQuest játékról. A HTML5 kapcsán hátrányt jelent, hogy a Microsofton kívül mindegyik cég a WebGL-t látja a böngészős 3D grafika jövőjeként illetve hogy az audio tag nem minden modern böngészőben támogatott elem. Amik viszont a túlélésének további ismertetőjegyei: A mobileszköz-böngészők megokosodtak. Az okostelefonok böngészői egyre erősebbek, ezért egyre erősebb és erősebb HTML5 alapú játékokat tudnak támogatni. Ráadásul egyre több HTML5 specifikus operációs rendszer illetve böngésző kerül a piacra, mint amilyen a Mozilla Firefox, vagy a Tizen. Ez által a böngésző-kompatibilitás nem okoz többé fejtörést a HTML5 fejlesztők számára. Alacsony fejlesztési költségek. Nincs többé szükség sem ios, és Android kódbázisra. A HTML5-tel egyetlen egyszer kell építkezni, és utána használható lesz minden HTML5-öt támogató platformon. Ez hatalmas mértékben lecsökkenti a fejlesztési időt és költséget. Természetesen érdemes egy csomagoló felépítésére, hogy a különféle App Store-okban is meg tudjuk jelentetni a termékünket, de ez a költség legkisebb része. A játékok iránti kereslet egyre inkább nő. Azt hiszem ezt nincs hová ragozni, statisztikák mutatják, hogy egyre nagyobb a játékok iránti kereslet. A nagyobb cégek is belátták, hogy a mini játékok jó reklámokat eredményeznek, és meglehetősen költséghatékonyak. Nincs szükség letöltésekre. Sok felhasználó elkötelezettségnek gondolja egy program letöltését, és ez súrlódással járhat. A HTML5 játékokkal azonban nincs szükség letöltésre, a játékkal rögtön játszhatunk. A megosztás egyszerű. Miután nincs letöltés, sem installálás, a megosztás egy URL átküldését jelenti. Ennél egyszerűbb megosztási lehetőségre nincs is szükség. 32

33 Azonnali frissítések. Ha hibát találunk a kódban, rögtön orvosolható egy update segítségével. Ugyanígy, ha egy játékos betölti a játékot, mindig az aktuális verziót fogja látni. Ez a tesztelés és az iteráció szempontjából is meglehetősen előnyös. Alacsony reklámozási költség. Az online játékokhoz hasonlóan a HTML5 játékok is rengeteg forgalmazó partnerrel rendelkeznek, amik lehetnek játékportálok, vagy más programok, amik lehetővé teszik a reklámozás valamely formáját. Mivel a JavaScript nyelv meglehetősen elterjedt, így az olvasóra való tekintettel kihagyom a szintaxis bemutatását, és a JavaScripttel együttesen használható technológiák bemutatására, és felhasználásuk módjának bemutatására helyezném a hangsúlyt.[21][22][29] BrowserQuest[23][24] Erre a legalkalmasabb eszköz a Mozilla Foundtion és a Little Workshop által közösen elkészített nyílt forráskódú MMORPG, a BrowserQuest, hiszen saját leírásuk szerint is: A Mozilla, ami az internet továbbfejlődésének nagy támogató szervezete, megkért minket, hogy egy csúcstechnikájú 15. ábra: A BrowserQuest játék grafikája demonstráció megalkotására kért fel minket a HTML5 és a webes platform lehetőségeinek bemutatására. [ ] A demónknak egyaránt kellett technikai értelemben érdekesnek lennie, és szórakoztató használatúnak lennie. Ezért döntöttünk végül úgy, hogy egy MMORPG tökéletes módja lenne a websocketek bemutatásának. És meg is érkeztünk az egyik legérdekesebb online technológiához, a websockethez. A websocket ugyanis egy relatíve új technológia, amely lehetővé teszi valós idejű webappok, játékok, és egyéb programok létrehozását. A BrowserQuest valójában több technológia összefonódásaként született meg. A renderelő motor több HTML5 canvas elemet manipulál, egymás fölé, illetve alá helyezve, mint 33

34 grafikai rétegeket. A böngésző hang API kezeli a játék hangjait és zenéit, míg a lokális tároló a karakterek kliens oldali letárolását teszi lehetővé. Ami még ennél is érdekesebb, a játékmotor a korábban is említett WebSocket technológiát használja, ami felruházza a böngészőket egy perzisztens, kétirányú szerverkapcsolat létrehozására. A BrowserQuestben igazából ez az elem teszi lehetővé több játékos valós idejű játékát és társalgását a közös világban megjegyzem plugin nélkül, alacsony késleltetéssel. A back-end oldalon az architektúra a Node.js segítségével működik. Ezért a front-end és a back-end oldalon is JavaScript kód fut, azaz a kódbázis jó része JavaScriptes. Egy ilyen típusú játéknál érdemes jó előre elgondolkozni a csatlakozó játékosok létszámával kapcsolatban, illetve a játékosok elosztásán a terhelés miatt. Ezért születhetett meg a játék terheléselosztó architektúrája. Tekintsük meg a BrowserQuestben található, manapság hasznos, élvonalbeli technológiákat HTML5 - Canvas és Audio A HTML5 elemeként a HTML <canvas> tag grafika rajzolására alkalmazható a JavaScript segítségével, de a WebGL-ben is használható hardveresen gyorsított 3D grafika megvalósítására is. A kódbeli megvalósítása rendkívül egyszerű: HTML oldalról egyetlen sor: <canvas id="canvas"></canvas> JavaScript oldalról pedig mintának egy zöld négyzet rajzolása a következő kóddal valósul meg: var canvas = document.getelementbyid("canvas"); -- felület kijelölése var ctx = canvas.getcontext("2d"); -- kontextus lekérdezése ctx.fillstyle = "green"; -- kitöltés megadása ctx.fillrect(10, 10, 100, 100); -- elhelyezés paramétereinek megadása A BrowserQuest játékban ez a teljes alkalmazás alapja, hiszen ezen a felületen jelenik meg számunkra a játék maga, rétegekre bontva. Később ezeket a rétegeket helyezi egymás fölé a játékmotor. 34

35 A HTML5 másik fontos eleme a hangok lejátszásával kapcsolatos, és ez az <audio> tag. Az <audio> elem segítségével hangtartalmakat adhatunk a dokumentumokhoz, és beágyazhatjuk őket. Több hangforrást is tartalmazhat, a böngésző pedig automatikusan kiválasztja az optimális verziót. Az audio taget nem támogató böngészőkre külön hanganyag állítható be. A Web Audio API segítségével közvetlenül generálhatunk és manipulálhatunk hang streameket a JavaScript kódból. Az alap felhasználás szintaxisa a következő: Egyszerű hanglejátszás (a támogatás hiányával kapcsolatos hibaüzenettel): <audio src="url" autoplay> </audio> Az Ön böngészője nem támogatja az <code>audio</code> elemet. Hanglejátszás felirattal: <audio src="url"> </audio> <track kind="captions" src="foo.en.vtt" srclang="en" label="english"> <track kind="captions" src="foo.hu.vtt" srclang="hu" label="magyar"> Hanglejátszás nem támogatott böngészők esetén kiegészített másik hanganyaggal: <audio controls="controls"> Az Ön böngészője nem támogatja az <code>audio</code> elemet. <source src="foo.wav" type="audio/wav"> </audio> Web workers A Web workerek a webes tartalmak számára egyszerű lehetőséget nyújt a szkriptek háttérben külön szálon történő futtatására. A worker szál úgy képes feladatok 35

36 végrehajtására, hogy a felhasználói felülettel ne kerüljön összetűzésbe. Ezen kívül I/O műveletekre is képes az XMLHttpRequest segítségével. A létrejötte után egy worker üzeneteket tud küldeni a JavaScript kódnak, amely létrehozta, méghozzá egy megadott eseménykezelőn keresztül. A program ezt a nagy világtérkép részeinek tördelt betöltésére használja annak érdekében, hogy a felhasználói felület ne lassuljon be használat közben. Szintaxisa a következő: Új worker létrehozása külső forrással: var myworker = new Worker("worker.js"); Két különálló worker üzenetküldése a postmessage() függvény segítségével: first.onchange = function() { myworker.postmessage([first.value,second.value]); console.log( Üzenet elküldve a workernek ); second.onchange = function() { myworker.postmessage([first.value,second.value]); console.log( Üzenet elküldve a workernek ); Az üzenet elfogásának módja: onmessage = function(e) { console.log( Az üzenet megérkezett a fő scriptből ); var workerresult = Eredmény: ' + (e.data[0] * e.data[1]); console.log( Üzenet visszaküldése a fő szkriptnek ); postmessage(workerresult); Egy workert kívülről az alábbi paranccsal tudjuk megszüntetni: myworker.terminate(); Belülről pedig a bezárás az egyszerű close(); paranccsal teljesül. 36

37 LocalStorage A localstorage egy belső tárhely a böngésző számára, ahol az adatokat és információkat helyileg tudjuk tárolni. A BrowserQuest az adatok lokális mentésére használja ezt az elemet, mint amilyen például a karakterünk neve, felszerelése, stb. A program folyamatos mentéseket készít a játék állapotáról, ezért kilépés vagy meghibásodás után is képes visszaállítani a teljes rendszert CSS3 Média lekérdezések Egy média lekérdezés egy médiatípusból és legalább egy kifejezésből áll, ami a stílus hatáskörét állítja média tulajdonságok segítségével, mint amilyen például a szélesség, hosszúság, vagy a szín. Az elem először a CSS3-ban jelent meg. A BrowserQuest-ben főként az automatikus méretezéseknél használatos, ennek segítségével biztosított, hogy a program minden eszközön ugyanolyan módon jelenjen meg. Szintaxisa a következő: CSS média lekérdezés egy link elemen <link rel="stylesheet" media="(max-width: 800px)" href="example.css" /> CSS média elem egy stíluslapon: (max-width: 600px) {.facet_sidebar { display: none; </style> 37

38 Egyéni bemutató Bemutató jelleggel készítettem egy alapvető JavaScriptes projektet a canvas, az audio és 1 néhány jquery alapú, különálló funkció bemutatására. A minta projekt első része a linken érhető el. A pálya megépítéséhez a Tiled Map Editor nevű programot használtam, amelynek nagy előnye volt, hogy nagyon jól bánik a tile alapú elemekkel, és rendkívül egyszerűen használható. Ez után az elmentett Tiled kódot JSON formátumúra alakítottam, mivel ezt a JavaScripttel és jqueryvel egyszerűbben tudtam használni. A kezdő kód HTML oldalon itt is alapvető volt: <canvas id="canvas" width="800" height="600" background="black"> Sorry... </canvas> A munka nagyobb része ugyanis a JavaScript fájlokban történt. A vizuális rész betöltése több réteg betöltésével történt, az alsó szint a talaj szintje, erre épülnek az épületek, amiknél az ütközés flag aktív, azaz nem lehet raktuk keresztülsétálni. Ez után két tárgy réteg következik, egyiken átsétálhatunk, a másikon nem. Végső soron a legfelső rétegben a karakterek helyezkednek el. 16. ábra: Az Avalore canvas felülete 1 : A kód csupán bemutató jellegű, nem célom teljes játékként bemutatni 38

39 Az ütközésvizsgálat a rétegek koordinátáit felhasználva a következő: function Collide(x1, y1, x2, y2, xchange, ychange){ var xwillbe = x1+xchange, ywillbe = y1+ychange; var xmin=math.max(xwillbe,x2), xmax=math.min(xwillbe+num,x2+num), ymin=math.max(ywillbe,y2), ymax=math.min(ywillbe+num,y2+num); if(xmin>=xmax ymin>=ymax){ return false; else{ return true; A megrajzolásnál pedig meghívjuk ezt a kódrészt: if(items2[i].col){ if(collide(charx, chary, items2[i].x*32, items2[i].y*32, X, Y)){ collision=true; A karakter mozgása egy-egy gombnyomás esetén a következőképpen valósult meg: function onkeydown (e){ if(e.keycode == 87){ -- W gomb kódja currentdirection = 3 * 32; moving = true; movey = -4; 39

40 A többi gombra is hasonlóképpen lehetett beállítani az egyes funkciókat, a későbbiekben ide tervezem beépíteni az inventory (táska) illetve a chest (házban található láda) tartalmának kezelését. A háttérben két hangfájl fut a következő kóddal: audio = new Audio("sounds/campfire.wav"); audio.loop = true; audio.volume = getaudiostr(); -- távolság figyelembe vétele audio.load(); audio.play(); A tűz ropogása például a karakter és a tűz közötti távolságot is figyelembe veszi az alábbi függvény segítségével: function getaudiostr(){ var distance=math.round(math.sqrt(math.abs(((charx-416)*(charx- 416))-((charY-288)*(charY-288)))))/1000; audiostr=.00; audiostr=audiostr+(0.5-distance); return audiostr; A többi hang fix hangerőre van állítva, a lépés hangja csak mozgásra aktiválódik. Három funkciót terveztem bemutatni, ebből az első a hősünknél található tárgyak ablaka. Egyelőre a funkció bemutatása kedvéért csupán egy teszt felületet hoztam létre a következő oldalon: A táskában lévő tárgyak az adatbázisban vannak eltárolva egy JSON objektum formájában. A képen jól látható módon megjelenítjük az adatbázisból lekérdezett tárgyak helyét és számát, jelenleg két gomb szimulálja a betöltés és a mentés funkcióit ezek a játékokban valójában valamilyen trigger eseményre hívódnak meg. Egy tárgyat egyszerűen drag and drop módszerrel mozgathatunk, amit a jquery UI Drag and Drop moduljainak segítségével valósítottam meg. 40

41 Az elemek átrendezése után a mentés gombra kattintva a táska JSON objektuma felülírja az adatbázisban található verziót, így elmentésre kerül. A sikeres mentést egy felirat jelzi számunkra. A jobb felső sarokban lévő X-re kattintva a táska tartalma ismét eltűnik, ekkor viszont nem mentjük el a változásokat. A másik funkció, amit be szeretnék mutatni az aukciós ház leegyszerűsített verziója. Ebben a modulban az előbb bemutatott inventory modul is megtalálható, ennek az átalakított verziója 17. ábra: Az Avalore inventory eleme segítségével tudunk termékeket kirakni az aukciós házba, illetve törölni onnan. Ez a példa leginkább arra alkalmas, hogy bemutassa az egyes elemek összekapcsolásának lehetőségét. A képernyő jobb oldalán ismét megtaláljuk a fenti inventory felületet, míg bal oldalon az aukciók listáját. Egy fülön pedig lehetőségünk nyílik új tárgy aukcióra bocsátására. A listák nem frissülnek automatikusan, így egy Refresh gombot is elhelyeztem a felületen. A két modul ott fonódik össze, amikor az inventory modulból behúzunk egy elemet az aukciós felületre és a táskánk tartalmából aukcióra bocsátjuk. Ugyanezen a felületen lehetőségünk van visszavonni az ajánlatot, ekkor visszakerül a táskánkba. Egy TODO megjegyzésként a túlcsorduló táska problémájára írtam megjegyzést. 18. ábra: Az aukciós ház felülete A harmadik modul az előző kettőtől teljesen független, a hősünk által elfogadott küldetéseket tartja számon. Ennek a játék canvas részében még nincs kiváltója, azaz csak 41

42 teszt jelleggel feltöltött adatokkal dolgoztam. Ez is jelzi, hogy a modul önmagában is megáll a lábán, azaz bárhová beemelhető. A bal oldali oszlopban látható küldetésekre kattintva a jobb oldali táblázatban megjelennek a kiválasztott küldetés adatai, melyeket az adatbázisból kérünk le. Természetesen itt is található a jobb felső sarokban becsukás gomb, és ezen kívül a küldetések mellett is láthatunk egy-egy X gombot. Ezeknek célja, hogy a játékos törölhesse a küldetéseket a listájáról. A modul elérhetősége: ábra: A questlog, azaz a küldetéseket számontartó elem A webes játék előnye, hogy a tárgyakat, képességeket, karaktereket és küldetéseket is kezelhetjük webes felületről, egy adminisztrátori oldal segítségével zavartalanul dolgozhatunk. Az adminisztrátori felület és az oldal többi eleme megtalálhatók a mellékletben JavaScript Játékmotorok összehasonlítása[25][26][27] A JavaScript játékmotorok napjainkban egyre elterjedtebbek, számtalan új motor kerül ki nap, mint nap. Vannak azonban olyanok, amelyek kiállták az idő próbáját, és kiemelkedtek a többi közül. Ezek között egyaránt található fizetős és ingyenes motor egyaránt. Következzen tehát egy bemutatás a legelterjedtebb JavaScript alapú játékmotorokról ImpactJS Az ImpactJS kimagaslóan a legelterjedtebb a fizetős JavaScript játékmotor. A 99$-os költsége ellenére a második legelterjedtebb game engine az összes közül. Főként a 2D-s játékokra specializált. Egyszerű fizikával rendelkezik, platform orientált ütközésdetektálással dolgozik, és beépített játékos- és ellenfél életkezelővel, és ehhez 42

43 hasonló akció funkciókkal segíti elő a fejlesztő munkáját. Felépítéséből adódóan könnyen kiterjeszthető, amely lehet külsős, vagy saját plugin. Az ImpactJS a Weltmeister nevezető csempe alapú pályaszerkesztővel együtt vásárolható meg, amiben külön ütközésdetektáló réteget is felállíthatunk. Ezzel máris egy nagy előnyt élvez az ütközésdetektálás szempontjából a többi motorral szemben. További előnye, hogy az elemek elő-betöltése rendkívül korán, a játék betöltésénél történik, ami által a felhasználó folyamatos, gördülékeny játékmenetet kap. Hátránya, hogy amennyiben nem platformer játékot készítünk, nagyobb nehézségekbe ütközhetünk. Egy másik nagy hátrány, hogy teljesen a Canvacra épül, és nem támogatja a DOM renderelést. Az Impact általánosságban véve egy nagyon jól kiforrt, minőségi motor. Fejleszthetünk vele HTML5 játékokat számítógépre és mobilböngészőkre egyaránt, a mobileszközös támogatása kiemelkedően jónak mondható. A böngészők szempontjából a Firefoxot, a Chrome-ot, a Safarit, az Internet Explorert és az Operát támogatja Construct 2 A legnépszerűbb fizetős motor után következzen a legnépszerűbb nem fizetős motor, a Construct 2. Talán egy programozónak nem a legcsábítóbb dolog, ha a motort úgy reklámozzák, hogy Készíts fejlett játékot egy sor kód megírása nélkül, de kétségtelen, hogy az átlagos felhasználónak nagy könnyűséget okoz. Ez azt jelenti, hogy nem JavaScriptben kell programozni, hanem eseményeket, akciókat, és feltételeket rakunk össze, amelyek JavaScript nyelvre fordulnak. A motor erősen tesztelt, és széles körben használt. Rendkívül aktív közösséggel rendelkezik, és hetente bővül frissítésekkel. Hátránya azonban, hogy főleg kezdőknek készült, kisebb méretű játékok készítésére. A nagyobb projektek esetén átláthatatlanná válhat, és általánosságban nagyon korlátolt. Ez azt jelenti, hogy ha valami komolyabb eseményrendszert, vagy belső logikát szeretnénk, akkor ahhoz saját plugint kell írni, amely viszont jóval időigényesebb, mint egy egyszerű JavaScript kód megírása. 43

44 Crafty A Crafty egy nyílt forráskódú motor, amely 2D játékok létrehozására használható, és csempe-alapú grafikával dolgozik. A legkiemelkedőbb tulajdonsága az erős komponens alapú megközelítése. A legtöbb játékmotorral szemben nem osztályokat és öröklődést használ, hanem komponenseket, melyek jól behatárolt funkcióbázissal rendelkeznek. Ezek az elemek válnak a későbbi kód építőkockáivá. A Crafty az előzetes betöltést manuális módon, a Crafty.load() paranccsal oldja meg, ami az ImpactJS-sel szemben gyengébb megoldást jelent, viszont a renderelés szempontjából jobb nála. Ez azon egyszerű okból kifolyólag igaz, hogy nem csak a Canvas, hanem a DOM támogatását is felvállalta. Az ütközésdetektáláshoz külön komponens áll rendelkezésünkre, ami pozitívum. Ami negatívum, hogy az ütközés során nehézkes funkcionalitás biztosítása. Szintén hátrány az Impact-tal szemben, hogy a mobil eszközös portolása nehézkes, nem teljesen kiforrott. Ezt leszámítva a böngészők közötti átjárás meglehetősen jól megvalósított LimeJS A LimeJS nyílt forráskódú játékmotor, ami a Google Closure könyvtárára épült. Többek között e könyvtár segítségével jött létre a Gmail és a Google Maps, tehát elég széleskörű funkcionalitást tesz lehetővé. A Lime ezen kívül egy kis python segédprogrammal egyben tölthető le, amelyek segítségével például új projekteket hozhatunk létre, valamint JavaScript kódok építésére és kicsinyítésére nyújt lehetőséget. A motor általánosságban véve bármilyen 2D-s játék létrehozásához jó eszköznek mondható, de gyakran túlságosan általános a funkciókészlete egy-egy speciális megoldást igénylő feladatnál. Az elő-betöltéssel kapcsolatban a Lime szemet huny, azaz teljesen önállóan kell megoldanunk ezt a problémát. Az ütközésdetektálás hasonlóan kidolgozatlan, két entitás ütközését manuálisan kell ellenőrizni ez sok entitás esetén szinte teljesen átláthatatlanná válhat, ha az egyéni megoldás nem megfelelő. 44

45 A renderelés szempontjából viszont kifejezetten profi a kínálat. Egyaránt támogat DOM és Canvas renderelést, és a teljes folyamatot elrejti a felhasználó elől. A két renderelés között egyetlen sor kóddal váltatunk. A motor különös figyelmet fordít az érintőképernyős eszközökre, és gyors működésre specializált Programok [28] A teljesség igénye nélkül néhány HTML5-tel és JavaScripttel készült program: 2048 logikai játék Kingdom of Loathing Nothing to Hide Gods will be watching Hex GL Roll it Cookie Clicker The World s Biggest Pac-Man A Dark Room Tag Pro Browser Quest Candy Box Entanglement Treasure Arena Curvy 45

46 Squirrel[30] A Squirrel egy magas szintű, dinamikus típusokkal dolgozó objektumorientált nyelv, amely a C nyelv szintaxisához hasonlatos. A tervezése szerint egy erős szkriptelő eszköz, amely méretében memóriahasználatában és valósidejű működésében egyaránt kielégíti a játék szkript nyelvekkel kapcsolatos igényeket. Annak ellenére, hogy a Squirrel funkciók széles körével szolgál, mint például a 20. ábra: A nyelv névadó állata dinamikus típusosság, delegáció, magas szintű funkciók, generátorok, rekurzió, kivétel kezelés, automatikus memória menedzsment, szálkezelés, a teljes fordító és a virtuális meghajtó elfér körülbelül 6000 sornyi C++ kódban. Fiatal kora ellenére máris használják kereskedelmi alkalmazások fejlesztésénél, és aktív online fórummal is rendelkezik Szintaxis[31] A szintaxist tekintve egy változó neve vagy egy alfabetikus karakterrel, vagy alulvonással kezdődhez, de az első karaktert leszámítva tartalmazhat számokat is. Természetesen, mint minden nyelvben, itt is vannak előre lefoglalt kulcsszavak. A Squirrel nyelv elfogad integer számokat, float számokat, és szöveges literálokat. A kommentálás a következőképpen néz ki: /* Ezeket a sorokat a fordító nem veszi figyelembe. */ 46

47 A következő módszerek szintén a kommentálást jelentik: // Ez a sor is láthatatlan #Ahogyan ez is A Squirrel egy dinamikus típusos nyelv, ahol a változóknak nincs típusuk, viszont hivatkoznak egy értékre, amelyeknek már van típusuk. A Squirrelben létező alaptípusok a következők: integer, float, string, null, table, array, function, generator, class, instance, bool, thread és a userdata. Az integer megadásának többféle módja is lehetséges: local a = 123 //decimális local b = 0x0012 //hexadecimális local c = 075 //oktális A szövegformátuma itt is a string, és a C és C++ nyelvekhez hasonlóan használható: idézőjelek közt megadott szövegről van szó, amely tartalmazhatja a következő vezérlősorokat: (\t,\a,\b,\n,\r,\v,\f,\\,\",\',\0,\xhhhh). A string literálokat megjelölhetjük karakterrel is, amelytől szó szerinti stringgé válik. Ez azt jelenti, hogy a sortörés után is folytatható, valamint a szóköz (whitespace) karaktereket is megjeleníti. local a = "Ez egy string\n" a sor végén sortörést idéz a \n local x egy szó szerinti string \n" a sor végén kiírásra kerül a \n A szó szerinti stringek esetén kivételt alkot a vezérlősor karakterek kiírása szabály alól a dupla idézőjel. local multiline ez egy többsoros string ami beágyazza az összes új sor karaktert " A táblázatokat itt asszociatív tömbként érdemes felfogni, amelyekben kulcs-érték párként tárolunk adatokat, amelyet itt slotnak nevezünk. A táblákat a Squirrel 3.0 óta JSON formátumban is megadhatjuk. 47

48 A tábla szintaxis: local t={ üres tábla local test= { a=10 -- egyszerű érték b=function(a) { return a+1; -- tárolt funkció a.newslot <- 1234; -- létező táblához hozzáadás A tömböket objektumok egyszerű soraként foghatjuk fel, méretük dinamikus, és az index mindig 0-val kezdődik. Itt sem számít az értékek típusa a struktúra szempontjából. local a=["ez","egy","tömb"] local b=[null] b[0]=a[2]; a <- [1,"string!",[],{] formája -- négyelemű tömb létrehozásának másik A Squirrelben kétféle változót különböztetünk meg, lokális változókat, és tábla/tömb slotokat. Mivel a globális változók táblában találhatók, így ezek tábla slotok. Egy egyszerű azonosító egy helyi változóra hivatkozik, vagy egy környezeti objektum slotra. _table["foo"] _array[10] A táblákkal szintén használható a pont hivatkozás: _table.foo A Squirrel az azonosító alapján először egy lokális változót keres ( ide tartoznak a funkciók argumentumai), és csak aztán vizsgálja, hogy környezeti objektum-elemre keresünk-e. function test(arg){ local a=10; print(a); return arg; 48

49 Az előző példa hozzáfér az a értékhez, és kiírja az értékét (10); function test(arg){ local a=10; return arg+foo; Ebben az esetben pedig a foo a következőket jelentheti: 'this.foo', vagy this["foo"]. A globális változókat az úgynevezett gyökér táblában (root table) tároljuk. Általánosságban a környezeti objektum hatálya a gyökér tábláig terjed, de ha egy másik scope-ból szeretnénk explicit módon elérni, akkor a slot nevét a :: prefixszel kell ellátni, azaz a következő formában: function test(arg){ local a=10; return arg+::foo; Bár a Squirrel 2.0 óta, ha egy változó nem lokális, és nem található meg a this objektumban, akkor a Squirrel automatikusan a gyökér táblában keresi tovább. Ezáltal a két következő kód ugyanazt jelenti: function test() { foo = 10; function test() { if("foo" in this) { this.foo = 10; else { ::foo = 10; Egy Squirrel programutasítások egyszerű sorozata. Ezek az utasítások nagyon hasonlóak a C nyelvcsalád (C/C++, Java, C#, stb.) formájához. A kijelölések, függvényhívások, programfolyamot irányító struktúrák, és tömb konstruktorok mind hasonlóan működnek itt is. Az utasításokat új sorral, vagy pontosvesszővel választjuk el (illetve a switch struktúra esetén a case kulcsszóval). A sortörés és pontosvessző karakterek egyaránt elhagyhatóak a kapcsos zárójelek után. A feltételes elágazás megvalósítása az alábbi két formában lehetséges: 49

50 if(a>b) a=b; else b=a; if(a==10){ b=a+b; return a; Létezik boolean érték, ami a true és a false értéket veheti fel, de a C++-hoz hasonlóan a null, 0, 0.0 értékeket hamis, minden más értéket pedig igaznak tekint. A while ciklus működését a következő kódrészlet nagyon jól szemlélteti: function test(n){ local a=0; while(a<n) a+=1; while(1) { -- végtelen ciklus if(a<0) break; a-=1; A hátul tesztelős ciklus szintaxisa a következő: local a=0; do{ print(a+"\n"); a+=1; while(a>100) A korábban is említett switch szerkezet szintén ismerős lehet a C nyelvcsaládból: switch(szám){ case 0: -- meghatározott eset printf("null"); break; default: -- alapeset printf("nem null"); 50

51 A ciklusok szerkezete sem sokban különbözik a megszokottól. A for ciklus a következőképpen néz ki: for(local a=0;a<10;a+=1) print(a+"\n"); for(glob=0;glob<10;glob+=1){ print(glob+"\n"); for(;;){ print( végtelen ciklus \n"); Lehetőségünk adódik azonban kulcs-érték párok szerint egy tömb átfutására is: local a=[10,23,33,41,589,56] foreach(idx,val in a) print("index="+idx+" value="+val+"\n"); foreach(val in a) print("value="+val+"\n"); A funkciók megadása és változóba mentése a nyelvhez méltóan kompakt: local a= function(a,b,c) {return a+b-c; Az alapértelmezett értékek megadása a funkció argumentum részénél lehetséges: function test(a,b,c = 10, d = 20){ A funkció meghívásánál a Squirrel továbbítja a this környezeti változót, ami a hívott funkció egy rejtett paramétereként elérhetővé teszi a funkció indexelésének helyét, mint objektumot. Tehát a következő hívás esetén: table.foo(a) a továbbított környezeti objektum a table lesz. Az egyszerű funkcióhívás pedig automatikusan a this objektumot adja tovább, azaz: foo(x,y) -- megegyezik ezzel: this.foo(x,y) 51

52 A nyelv tartalmaz úgynevezett lambda kifejezéseket, amelyek segítségével a funkciók gyors, kompakt létrehozását teszi lehetővé. Az alábbi két kifejezés jelentése megegyezik: local myexp a + b local myexp = function(a,b) { return a + b; A nyelv egy másik hasznos tulajdonsága, hogy rendkívül jól kezeli a rekurziót. Vegyünk például egy függvényt, ami saját magába tér vissza rekurzívan: function looptest(n){ if(n>0){ return looptest (n-1); -- visszatérünk eggyel kisebb értékkel Korábban említésre került, hogy a nyelv objektumorientált. Ebből következik, hogy osztályok létrehozására is lehetőségünk van, mégpedig az alábbi formában: class Foo { constructor(a) { -- konstruktor test = ["stuff",1,2,3,a]; function subfunction(){ test = null; -- belső funkció -- tulajdonság Ezek után egy osztály példányosítása ugyanúgy működik, mint bármelyik C-alapú nyelvben: local a = Foo(); Az öröklődés is teljesen a C nyelvcsalád mintáját követi: class ChildFoo extends Foo { function DoSomething() { --felülírt függvény base. subfunction (); -- az alapmetódus meghívása 52

53 Az úgynevezett meta metódusok az oparator overloading-hoz hasonló logikával működnek, két osztálybeli tag összeadását például az alábbi kóddal oldhatunk meg egy osztályon belül: function _add(other){ return ::Vektor(x+other.x,y+other.y,z+other.z); Fentebb szót ejtettem a generátorokról. Azokat a funkciókat nevezzük generátornak, amelyek a szál átadásának parancsát, a yield parancsot használják. A yield parancs átadja a vezérlést a program másik részeinek. Amikor egy generátor funkciót meghívunk, az nem a funkciótörzset futtatja le, hanem visszaad egy felfüggesztett generátort. A visszaadott generátor a resume paranccsal visszatérhet, amíg életben van. A generátor a visszatérés után lezárul, ez után nem újranyitható többé. Ezt a nyitási és csukási helyzetet a következő kódban láthatjuk felépítve, amely 0-9-ig számol: function geny(n) { for(local i=0;i<n;i+=1) yield i; return null; local gtor=geny(10); local x; while(x=resume gtor) print(x+ \n ); A Squirrel a kooperatív szálakat, azaz korutinokat is támogatja. Egy kooperatív szál egy olyan szubrutin, amely végrehajtás közben felfüggeszthető, és egy értéket adhat a hívójának a programfolyamból való visszatérés nélkül, s ez után visszatér a végrehajtáshoz. Első ránézésre a szál működése összekeverhető a generátoréval, mivel valóban hasonlít rá. Ám amíg egy generátor a hívó stack-ben fut, és csak lokális rutin stack-et tud felfüggeszteni, úgy a szál saját végrehajtó veremmel, globális táblával és hibakezelővel dolgozik. Ennek köszönhetően egy szál beágyazott hívásokat is felfüggeszthet, és saját hibakezelési eljárásmóddal rendelkezik. 53

54 Egy szál létrehozása a newthread(funkció) paranccsal történik, ahol a paraméter értelemszerűen egy Squirrel függvény. A szál indítása a threadobj.call() paranccsal történik, ahol a threadobj a szál objektum. A felfüggesztés parancsa a suspend(). A szál akkor szűnik 21. ábra: A korutinok bemutatása meg, ha a main függvény visszatér, vagy egy kezeletlen kivétel történik Gyakorlás[32] A Squirrellel való ismerkedés legegyszerűbb módja a legfrissebb verzió letöltése a oldalról. A projekt buildelése után az sq.exe indításával kezdhetjük a szkriptek önálló tesztelését. Érdemes a minta szkripteket a.exe fájl mellé helyezni, így a dofile( file.nut ) paranccsal rögtön lefuttatható a szkript. Miután végigpróbálgattam a korábban felsoroltakat, megvizsgáltam egy kész Squirrel keretrendszert, 22. ábra: Box2D bemutató választásom az emo framework-re esett. Ez a keretrendszer a Box2D fizikai motorján fut, a bemutatóban jól láthatóan bemutatásra kerül az úgynevezett raycasting, azaz sugárvetés működése. A mellékletben található szkript fájl négy szemléltető jellegű funkciót tartalmaz. Az első természetesen a Hello világ! funkció. A második egy egyszerű összeadás, két szám bemeneti paraméterrel. A harmadik egy összeadást tartalmazó ciklus, amely ciklusonként kiírja az összeadás eredményét. Az utolsó funkció pedig két bemeneti paraméter alapján (mennyi ideje ettünk utoljára, mennyire érezzük magunkat éhesnek) megmondja, hogy mit kellene ennünk étvágyunk csillapítására. Ennek leírása a következő: 54

55 function whattoeat(hours, feel) { print("params: "+hours+" "+ feel+" \n"); switch(feel){ case 1: if(hours < 1){ print("i could eat some snacks. \n"); if(hours >= 1){ print ("I could eat a salad. \n"); break; case 5: if(hours < 5){ print("i could eat a hamburger. \n"); if(hours >= 5){ print ("I could eat a pizza. \n"); break; default: print("i think I'll drink a beer. \n"); A kihagyott rész értelemszerűen hasonló felépítésű, így nem célszerű tovább részletezni. A kódban jól látható a két paraméteres funkció felépítésének módja, a kiírás parancsa és formázása, a switch-case struktúra implementációja adott értékkel és alapértelmezett módban. A szkript végén megadott parancsok a következők: print(hello()); add(1,2); looper(); whattoeat(1,1); whattoeat(2,1); whattoeat(1,2); whattoeat(3,3); Ezek természetesen a függvények meghívásai. Látható, hogy az első sort külön ki kell íratni, mivel csak egy stringet ad vissza, ami önmagában nem kerül megjelenítésre. 55

56 Programok[33] A Squirrelben készült játékszoftverek: Vice City Multiplayer A Grand Theft Auto: Vice City játékhoz készült többjátékos kiegészítő mod Left 4 Dead 2 Portal 2 Alien Swarm OpenTTD V-Multiplayer GTA IV- Multiplayer Mafia II - Multiplayer Counter Strike: Global Offensive Shadow Warrior War Thunder SuperTux Liberty Unleashed GTA III mod Sonic Unleashed (PS2/Wii) Contagion (PC) Thimbleweed Park 56

57 AngelScript[34] Az AngelCode Scripting Library, avagy AngelScript egy erőteljesen alkalmazkodó, platform független szkript könyvtár, amelyet alkalmazások funkcionalitásban történő kiterjesztéséhez készítettek. Ezt az AngelScript-ben írt külső szkriptek 23. ábra: Az AngelScript logója teszik lehetővé. A nyelv létrehozásától fogva törekedtek arra, hogy egy könnyen felhasználható komponens lehessen, mind az alkalmazásfejlesztő, mind pedig a szkriptelő szemszögéből. Fontos haszna, hogy C és C++ funkciók meghívásához nincs szüksége proxy funkciókhoz. Erre a legegyszerűbb magyarázat az, hogy a nyelv maga is hasonlatos a C és C++ nyelvekre. Az alkalmazás egyszerűen regisztrálja a funkciókat, objektumokat és metódusokat az AngelScript virtuális gépben, amelyekkel a szkriptnek tudnia kell, és nincs semmi más teendő a kóddal. Ez megkülönbözteti a többi szkriptnyelvtől, amikben jellemzően köztes segédfüggvényekre van szükség a kapcsoláshoz. Ugyanakkor, a natív függvények regisztrálása elengedhetetlenül szükséges a buildeléshez. Ez pedig egy extra lépés bárki számára, aki szeretne előfordított AngelScript byte kódot kiadni a kezei közül. 24. ábra: A klasszikus Jazz Jackrabbit 2 kiegészített verziója AngelScripttel készült A szkript írójának elegendő tudást jelent a C/C++ szintaxisának ismerete, pointerekkel történő babrálás és a memóriarésektől való aggodalmak nélkül. A legtöbb szkriptnyelvvel ellentétben az AngelScript egyszerű C/C++ adattípusokat használ a befoglaló alkalmazással való hatékony kommunikáció érdekében, ezáltal a legjobb natív kapcsolatot teszi lehetővé a 57

58 szkriptnyelvek körében. Az AngelScript nem támogatja a tömbkezelést, de nem is lenne túlságosan hasznos, mivel a nyelv statikus típusokat használ. Ez szintén ritkaság a szkriptnyelvek többségével szemben. A nyelv objektum-orientált, azonban csak az egyszeres öröklődést támogatja, a többszörös öröklődést interfészek segítségével valósíthatjuk meg. Újabb hasonlóságot jelenthet a C++ nyelvvel kapcsolatban az úgynevezett objektum fogantyúk (object handle) használata, amely a C++ pointerjeihez hasonlítanak. A leginkább szembetűnő különbség az, hogy az AngelScriptben a garbage collection referenciaszámlálással történik. Lehetőségünk van az operátorok regisztrálására, illetve felülírására. Az AngelScript minden C++ integrált fejlesztői környezetben használható, mint például a NetBeans-ben, Eclipse-ben, vagy a Geany-ben. Ezen kívül az AngelJuice-ben is, ami kifejezetten erre a nyelvre készült. A nyelvben a metódusok vagy tulajdonságok deklarálása csakis az osztálytörzsben lehetséges, és minden metódus virtuális beleértve a konstruktorokat és destruktorokat is. Hasznos tulajdonsága, hogy nemzetköziséget is támogatja, azaz használhatunk ASCII, vagy UTF-8, illetve UTF-16 kódolást is tetszés szerint. A motor futásidőben fordít, és lehetőséget nyújt a kód soronkénti fordítására a végrehajtás irányítása és hiba keresése érdekében. A futásidő determinisztikus, és nem változik. A debuggolást a kivételek részletes leírásai is elősegítik, így még könnyebben izolálhatjuk a problémás elemeket. Az engine képes továbbá külön szkript sorokat interpretálni az aktuálisan lefordított szkript segítségével. Ez főként játékon belüli konzolok esetén lehet hasznos. Mindemellett az alkalmazás képes a call stack, és a lokális változók vizsgálatára, mialatt a script fut. A line callback funkció segítségével pedig a töréspontokat vizsgálhatjuk, illetve felügyelhetjük a rendszer működését. 25. ábra: A fizikára épülő Puddle is tartalmaz AngelScript elemeket 58

59 A fordított byte kód elmenthető, és igény esetén újra betölthető. Ennek egyik legfőbb haszna, hogy a byte kód platform független. A nyelv maga modulárisan strukturált, azaz a scriptek modulokra fordíthatóak, melyeket dinamikusan összeköthetünk egymással. Lehetőségünk adódik egyes scriptek párhuzamos futtatása is. Ez a párhuzamosság a CPU-kiosztáshoz hasonlóan, a szkriptek váltogatásával szimulálva jön létre. Ennek segítségével könnyen implementálhatunk multi-taskingot használó sémákat, vagy korutinokat. Az integráció szempontjából a közvetlen elérés megközelítést használja, azaz közvetlenül képes elérni nem csak a regisztrált funkciókat, de az objektumokat, és objektum tagokat is, méghozzá proxy funkciók használata nélkül. Maga az interfész C++-os, de olyan C interfész is könnyen írható, amit a C++-szal nem jól illeszkedő nyelvek képesek használni. A Delphi projektek ennek a tökéletes példái, ugyanis itt szebbnél szebb illesztéseket hoztak létre az iparban. Hasznos tudnivaló, hogy a nyelv többszálas környezetben is működőképesen használható. A memóriakezelés szempontjából fontos jellemzője, hogy az objektumokat referenciaszámlálással tároljuk az alkalmazás és szkript közötti kommunikáció egyszerű menedzselése érdekében. Amikor körutas referencia jön létre, egy iteratív garbage collectort használunk. Az alkalmazás e mellett tökéletesen tudja irányítani a könyvtár memóriahasználatát Kompatibilitás A nyelv bizonyítottan működőképes a következő platformokon: Windows, Linux, MacOS X, XBox, XBox 360, XBox One, PS2, PSP, PS3, PS4, PS Vita, Dreamcast, Nintendo DS, Windows Mobile, iphone, BSD, és Android. A nyelv CPU független is egyben, a 32 és 64-bites, kis és nagy endián platformokat egyaránt támogatja. Hivatalosan tesztelt processzorok: x86, amd64, sh4, mips, ppc, ppc64, arm. A nyelv a következő fordítóprogramokat támogatja: MSVC++, GNUC, MinGW, DJGPP, Borland C++ Builder. Más fordítókat hivatalosan nem teszteltek, de elméletben használhatók. 59

60 A nyelv egyébként rendelkezik egy meglehetősen aktív online fórummal, meglehetősen jól dokumentált, és viszonylag gyakran érkeznek frissítései is- a legutóbbi verziója, az AngelScript például én vált elérhetővé Beállítások[35] Az AngelScript használatához először a forrásfájlok letöltésére van szükség. Ez a linken érhető el. A nyelv érdekessége, hogy nem bináris formában terjesztik, mert az AngelScript fejlesztők szerint- a legtöbb fejlesztő statikusan szeret linkelni. Ez azt jelenti, hogy a letöltött projektet először le kell build-elni, amit én a Visual Studio 2013-as verziójával tettem. A legutóbbi verzióban kilencféle mintaprojektet is találhatunk. Ezeket az AngelScript fő projekt buildelése után egyesével le kell buildelnünk, csak ez után jön létre a futtatható állomány Szintaxis [36][37] Tapasztalataim alapján az AngelScript szintaxisa a leginkább hasonló a C nyelvcsaládéhoz. Bár a nyelv maga átfogó dokumentációval rendelkezik, a felhasználói kézikönyv valamivel kevésbé felhasználóbarát struktúrájú, mint a diplomamunkámban megjelenített többi nyelv esetén. De kezdjük az elején. Az AngelScriptben az alapvető, beépített típusok közé tartozik a void, az integer több verziója (int8, int16, uint8, stb.), és a valós számok a float és a double típus formájában, valamint az objektum típus. Az objektum típusnak pedig két verziója van, a referencia- és az érték típus. Ezeken a típusokon kívül, ha szeretnénk úgynevezett add-on, azaz hozzáadott típusokat használni, akkor azt külön regisztrálni kell a támogatását. Ebbe a csoportba tartozik a string, a tömb, a szótár, a referencia, és a gyenge referencia is. Az alaptípusok megadása nagyon egyszerű, a megszokott módon történik: int a = 2; double b = 1.3; 60

61 Az objektum megadása is egyszerűnek mondható: obj o; -- példányosítás o = obj(); -- egy ideiglenes példányt hozunk létre, melynek értékét a változóhoz adjuk Ami az objektumoknál azonban egy korábban nem említett típus is létezik, és ez az objektum fogantyú. Az objektum fogantyúk speciális típusok, amelyek más objektumok referenciáját tárolják. Egy ilyen fogantyú objektum metódusának meghívásánál, vagy értékváltásánál az eredeti objektumot érhetjük el, mint ha csak egy alias lenne. Fontos azonban deklarálni a fogantyú értékét, egyéb esetben ugyanis null értéket vesz fel. obj o; -- objektum létrehozása obj@ a; -- null értéket vesz fel obj@ b -- az o referencia értékét veszi fel b.modifyme(); -- a metódus az eredeti objektumra hívódik meg Nem minden típus esetén használhatunk fogantyút, például az alaptípusok egyike sem használható ily módon. Ami a stringet illeti, szintén kétféle verzióját alkalmazza az AngelScript, az átlagos, idézőjeles stringet, és a dokumentáció stringet, amit heredoc stringnek is nevezünk. A normális string tartalma aposztróf- és idézőjelpár közé egyaránt kerülhet. A stringekhez természetesen tartoznak általános metódusok is, amint például a hosszt (length), vagy ürességet (isempty) vizsgáló, vagy a kereső (findfirst, findlast), illetve a szöveget módosító split, substr) metódusok. A tömbök kezelése során előre meg kell adnunk a tömb elemeinek típusát, méghozzá az alábbi módon: array<int> a, b, c; array<foo@> d; Az értékadás sokszínűségét pedig a következő sorok igazolják: array<int> a; -- nulla hosszúságú integer tömb array<int> b(3); -- integer tömb három elemmel array<int> c(3, 1); -- integer tömb három elemmel, melyek alapértéke 1 array<int> d = {,3,,; -- integer tömb négy elemmel, melynek második eleme adott A többdimenziós tömb megadása egyszerű tömb befoglalása típusként: 61

62 array<array<int>> b = {{1,2,{3,4 értékekkel -- 2x2-es integer tömb adott Az elemeket pedig a jól megszokott a[0] = érték; formában változtathatjuk, vagy adhatjuk meg. Természetesen a tömbkezeléssel kapcsolatban is sokféle funkciót tartalma a nyelv, amit az alábbi kód jól érzékeltet: int main(){ array<int> arr = {1,2,3;-- létrehozás, értékadás arr.insertlast(0); arr.insertat(2,4); arr.removeat(1); arr.sortasc(); -- hozzáfűzés -- adott pozícióba rakás -- adott pozíció törlése -- növekvő sorrend int sum = 0; for( uint n = 0; n < arr.length(); n++ ) -- összegző ciklus sum += arr[n]; return sum; A következő elem a szótár, amely a legtöbb nyelvben asszociatív tömbként ismert. Egy szótár elemei bármilyen típusúak lehetnek, akár fogantyú típusúak is. Az egyetlen kikötés, hogy a kulcs string típusú legyen. Vizsgáljuk meg a működését az alábbi kódban: obj object; dictionary dict = {{'one', 1, {'object', object, -- értékadás if( dict.exists('one') ){ -- létezés ellenőrzése -- típus lekérdezés { dict.delete('object'); -- törlés dict.set('value', 1); -- megadás int val = int(dict['value']); -- érték lekérdezés dict['value'] = val + 1; -- értékmegadás dict.deleteall(); -- összes elem törlése A ref típus működése egy generikus objektum fogantyújaként fogható fel. Míg egy fogantyú csak adott típusokra tud hivatkozni, ennek kiküszöbölésére alkalmazható a referencia típus. 62

63 A működését a következő kód szemlélteti: = aosztaly(); = bosztaly(); funkcio(r); Ez esetben az aosztaly és a bosztaly egymástól független, a funkcio pedig a referenciát oly módon használja, hogy működőképes legyen minkét referált osztállyal. void { = cast< aosztaly >(handle); = cast< bosztaly >(handle); if( a!is null ) print(a osztályú\n'); else if( b!is null ) print(b osztályú\n'); A weakref típus ehhez hasonlóan működik, a legfőbb különbséget az jelenti, hogy amennyiben null értéket állítunk a hivatkozott objektumra, akkor a kapcsolat megszűnik. Szintaktikája: weakref<osztálynév> refobjektum(objektum); A függvények alkotása pedig már ismét a C nyelvcsaládhoz közelállónak mondható: int funkcio(int a, int b) {return a + b; Sok újdonságot az osztályokkal kapcsolatos elemek között sem fogunk találni, az osztály, az osztályfüggvény, a konstruktor és a destruktor mind a C nyelvre épülnek: class MyClass{ MyClass(int a, string b) { ~MyClass(){ -- konstruktor -- destruktor int method() { a++; return a; -- osztályfüggvény 63

64 Az öröklődés hasonlóképpen: class Gyerek : Szulo { int b; Gyerek() { -- alap konstruktor super(10); b = 0; void DoSomething(){ MyBase::DoSomething(); -- szülőfunkció felülírása -- az alaposztálybeli hivatkozás Az AngelScript programfolyamot vezérlő elemei szándékosan nem kerülnek bemutatásra, mivel tökéletesen megegyeznek a C nyelvcsaládban található elemekkel, és diplomamunkám terjedelme a maximális oldalszámhoz közelít Tutorial program A mellékletben található projektben négy szemléltető jellegű funkció felépítése látható. Az első természetesen a Hello világ! funkció. A második egy egyszerű összeadás, két float bemeneti paraméterrel. A harmadik egy összeadást tartalmazó ciklus, amely ciklusonként kiírja az összeadás eredményét. Az utolsó funkció pedig két bemeneti paraméter alapján (mennyi ideje ettünk utoljára, mennyire érezzük magunkat éhesnek) megmondja, hogy mit kellene ennünk étvágyunk csillapítására. A.as kiterjesztésű szkript fájlt nem részletezném, mivel feljebb említésre kerültek az egyes elemei, inkább a C++ részét írnám le és magyaráznám. Először a szkript motorját kell létrehoznunk: asiscriptengine *engine = ascreatescriptengine(angelscript_version); Ez után a szkript konfigurációja és értelmezése történik: ConfigureEngine(engine); r = CompileScript(engine); 64

65 Végül a kontextus létrehozásával fejezzük be az alapállapot megteremtését: asiscriptcontext *ctx = engine->createcontext(); Ez után következik a szkript fájlban létrehozott függvények regisztrációja, ahol jól látható, hogy meg kell adnunk a függvény visszatérési értékét, nevét, és paramétereinek típusát: asiscriptfunction *hello = engine->getmodule(0)- >GetFunctionByDecl("void hello()"); asiscriptfunction *add = engine->getmodule(0)- >GetFunctionByDecl("float add(float, float)"); asiscriptfunction *looper = engine->getmodule(0)- >GetFunctionByDecl("void looper()"); asiscriptfunction *whattoeat = engine->getmodule(0)- >GetFunctionByDecl("void whattoeat(int, int)"); Egy funkciót a regisztrálása után először előkészítenünk kell, majd lefuttatnunk a kontextusban: r = ctx->prepare(hello); r = ctx->execute(); Ez a paramétert tartalmazó függvényhívásoknál a következőképpen nézett ki: r = ctx->prepare(add); ctx->setargfloat(0, 1.0); ctx->setargfloat(1, 2.0); r = ctx->execute(); Végül pedig a kontextus és a motor lezárása következik: ctx->release(); engine->shutdownandrelease(); 65

66 26. ábra: Az AngelScript projekt futtatása és outputja Programok [38] A nyelvet előszeretettel használják játékfejlesztéshez, a teljesség igénye nélkül néhány játék: Amnesia: The Dark Descent Dustforce Gekkeiju Online King Arthur's Gold Legend of the Guardians: The Owls of Ga'Hoole Overgrowth Puddle Warhammer: Mark of Chaos Warsow Az AngelScriptet használják továbbá az Ulmi Egyetem interaktív 3D-s animációs programjában is, valamint a robotika területén például a robot ágensek viselkedési szabályainak programozásánál. Itt a legérdekesebb szerepet a RunApplication() függvény jelenti, a többi valójában előkészítője e függvény futásának. 66

67 LUA[39] A Lua programnyelv elnevezése a portugál hold szóból származik. Létrehozásakor a legfőbb cél az volt, hogy egy olyan szkriptnyelvet alkossanak, amely szemantikai szempontból bővíthető, és mellette könnyűszerkezetes, és több paradigmát is támogat. Mivel maga a nyelv ANSI C-ben íródott, ezért platform független, és relatíve egyszerű C API-val rendelkezik. A nyelv önmagában csak néhány főbb funkciót tartalmaz, amelyeket használva és kibővítve 27. ábra: A Lua szkriptnyelv logója különböző problémakörök és feladatok megoldására válik képessé ahelyett, hogy egy-egy adott paradigmára szolgáltatna komplex, és kötött megoldást. Erre rögtön példaként hozható, hogy a Lua nem támogatja explicit módon az öröklődést, de a meta táblákban lehetőséget nyújt azok implementálására, megvalósítására. Hasonlóképpen engedélyezi a névterek, osztályok, és a hasonló strukturális megoldások és felépítések használatát az egytáblás implementációja segítségével. Az első osztályú funkciók lehetővé teszik a funkcionális programozás során létrehozott funkciók alkalmazását. A Lua általánosságban törekszik arra, hogy rugalmas meta-funkciókat biztosítson, amelyek kiterjeszthetőek szükség esetén. Ennek köszönhetően lesz az alapnyelv könnyű, és kisméretű a teljes fordító körülbelül 180kB lefordítva. Ez a könnyedség további előnyként hordozza magában, hogy széleskörűen alkalmazhatóvá teszi a nyelvet. A Lua dinamikus típusokat használ, és zömmel kiegészítő, vagy szkript nyelvként használatos, a korábban említett kompaktsága miatt platformok széles választékával képes együttműködni. Mindössze néhány gyári típus alkalmaz, mint például a boolean, a szám típusok (alapértelmezetten a két tizedes jegyű lebegőpontos), és a szöveg (string). A más nyelvekben megszokott adatstruktúrákat - mint például a tömbök, a készletek (set), listák és rekordok a Lua egyszerű, natív adatstruktúrájával valósíthatjuk meg, a táblával. Ez valójában egy heterogén asszociatív tömb. További típusok a userdata, function, thread és a nil. A userdata valójában egy egyszerű memóriaterület, aminek segítségével megoldható 67

68 a táblázati struktúra kezelése. Érdekesség, hogy a fordító a funkciók típusát is képes felismerni. A nil a null érték Lua-beli reprezentációja. 28. ábra: A Lua típusai A Lua ezen kívül haladó funkciókat is tartalmaz, mint például az első osztályú (first-class) funkciók, a garbage collection, a lezárások, a futásidőben történő kényszerített konverzió (például szöveg és szám típus között), a kooperatív multitasking, és a dinamikus modul betöltés. Az adattípusok minimum számának tartásával a Lua egyensúlyt nyújt erő és méret között. A későbbi összehasonlító elemzésben ez látszódni is fog. A Lua egyedi szintaxissal rendelkezik, amely a Basic nyelvre emlékeztethet. Rendkívül gyors, és relatív kisméretű byte kódra fordul. Rendkívül dinamikus például a változókat nem kell előre deklarálni a használatukhoz. A funkciók első osztályú változóként értelmezettek, azaz a fordító és az absztrakt gép rendkívül közeli összefűződéssel bír. Ennek segítségével a funkciók változókként is menthetőek. A Luát széles körben használják az iparban, aktív online közösséggel, és nyílt forráskódú projektek armadájával rendelkezik. A Lua önmagában is sok új szkriptnyelv létrejöttét ihlette és készítette elő. Kezdőknek talán túlságosan homályos lehet az API dokumentáció, de ezt ellensúlyozza a rengeteg internetes példa. Összességében egy nagyon elterjedt, és jól használható, multifunkcionális nyelv. A Lua nem csak a játékipar területén, de más szoftverfejlesztés területén is rendkívül kedvelt nyelv. A játékiparban pedig legnagyobb arányban ezt a nyelvet alkalmazzák, ezért a felsorolt szoftverek egy nagyon apró töredékét alkotják az összes Lua-val készült programnak. 68

RETRO Pocket PC-n hbk

RETRO Pocket PC-n hbk RETRO Pocket PC-n hbk Hódít a retro örület! Nemcsak a ruházatunkban vagy a különféle mindennapi eszközeinkben lett ismét úrrá a retro, hanem Pocket PC-n is megtehetjük ugyanezt. A hetvenes-nyolcvanas évek

Részletesebben

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is.

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Pétery Dorottya Szerkesztő: Pétery István

Részletesebben

Mobil készülékek programozása

Mobil készülékek programozása Mobil készülékek Egyre több ember zsebében és táskájában a legkülönfélébb mobileszközök megtalálhatóak Mobiltelefonok, PDA-k, PalmTopok és intelligens multimédiás eszközök (mit pl. ipod-ok) A készülékek

Részletesebben

Windows 8 Consumer Preview

Windows 8 Consumer Preview Windows 8 Consumer Preview Termékismertetõ vállalati ügyfelek részére II Tartalom Innovatív kezelõfelület 4 Üzleti alkalmazások fejlesztése 4 Kezdõképernyõ 5 Érintésre optimalizált felület 5 Változatos

Részletesebben

Korszerű raktározási rendszerek. Szakdolgozat

Korszerű raktározási rendszerek. Szakdolgozat Gépészmérnöki és Informatikai Kar Mérnök Informatikus szak Logisztikai Rendszerek szakirány Korszerű raktározási rendszerek Szakdolgozat Készítette: Buczkó Balázs KOKIOC 3770 Sajószentpéter, Ady Endre

Részletesebben

Annak ellenére, hogy a számítógépes szövegszerkesztés az utóbbi 10 évben általánossá vált, az irodai papírfelhasználás

Annak ellenére, hogy a számítógépes szövegszerkesztés az utóbbi 10 évben általánossá vált, az irodai papírfelhasználás Szövegszerkesztés Dokumentumkezelés Általános ismeretek Annak ellenére, hogy a számítógépes szövegszerkesztés az utóbbi 10 évben általánossá vált, az irodai papírfelhasználás nem csökkent. A képernyőről

Részletesebben

MORTAL KOMBAT. Bevezetés a Mortal Kombat világába. Káli Péter 2009.02.24.

MORTAL KOMBAT. Bevezetés a Mortal Kombat világába. Káli Péter 2009.02.24. MORTAL KOMBAT Bevezetés a Mortal Kombat világába Káli Péter 2009.02.24. Bevezetés 1992-ben jelent meg a játéktermekben a Mortal Kombat verekedős játékautomata, ami nagy csapást mért az addigi sztár: a

Részletesebben

Bevezetés, platformok. Léczfalvy Ádám leczfalvy.adam@nik.bmf.hu

Bevezetés, platformok. Léczfalvy Ádám leczfalvy.adam@nik.bmf.hu Bevezetés, platformok Léczfalvy Ádám leczfalvy.adam@nik.bmf.hu Mobil készülékek és tulajdonságaik A mobil eszközök programozása, kihívások, nehézségek Mobilprogramozási platformok Java Micro Edition.NET

Részletesebben

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is.

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

Szoftverprototípus készítése. Szoftverprototípus készítése. Szoftverprototípus készítése 2011.10.23.

Szoftverprototípus készítése. Szoftverprototípus készítése. Szoftverprototípus készítése 2011.10.23. Szoftverprototípus készítése Dr. Mileff Péter A prototípus fogalma: a szoftverrendszer kezdeti verziója Mi a célja? Arra használják, hogy bemutassák a koncepciókat, kipróbálják a tervezési opciókat, jobban

Részletesebben

Access 2010 Űrlapok és adatelérés

Access 2010 Űrlapok és adatelérés 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

Operációs rendszer ismeretek

Operációs rendszer ismeretek 2015 Operációs rendszer ismeretek A számítógépes munka feltételei Hardver: a számítógépet alkotó mechanikus és elektronikus eszközök összefoglaló neve. Szoftver: a számítógépet működtető programok. Operációs

Részletesebben

Informatika szintmérő-érettségi tételek 2015. február

Informatika szintmérő-érettségi tételek 2015. február 1.oldal (17) Háttértár- és könyvtárkezelés A számítógépes munka során háttértárolókat kezelünk, amin partíciók vannak. Egyegy partíción több ezer állományt tárolnak. A partíciót az áttekinthető felhasználás

Részletesebben

LOGalyze Telepítési és Frissítési Dokumentáció Verzió 3.0

LOGalyze Telepítési és Frissítési Dokumentáció Verzió 3.0 LOGalyze Telepítési és Frissítési Dokumentáció Verzió 3.0 Dokumentum verzió: 3.0/1 Utolsó módosítás: 2009. március 5. 2 LOGalyze Telepítési és Frissítési Dokumentáció LOGalyze 3.0 Telepítési és Frissítési

Részletesebben

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is.

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

Cross platform játékmotor + szerkesztő Támogatott platformok

Cross platform játékmotor + szerkesztő Támogatott platformok Mi az a Unity 3D? Cross platform játékmotor + szerkesztő Támogatott platformok Desktop: Windows, Linux, OSX Böngésző: Unity plugin, Google Native Client, Flash Mobil: ios, Android Konzol: Xbox 360, PS3,

Részletesebben

Ismerkedés a Windows Explorer-rel

Ismerkedés a Windows Explorer-rel Ismerkedés a Windows Explorer-rel A Windows operációs rendszerek egyik legősibb összetevője az ablakkezelőként és fájlmenedzserként is működő Windows Explorer, vagy ahogy a magyar fordításból ismerjük,

Részletesebben

PHD ÉRTEKEZÉS TÉZISEI

PHD ÉRTEKEZÉS TÉZISEI A GENETIKAILAG MÓDOSÍTOTT SZERVEZETEKRE VONATKOZÓ EURÓPAI ÉS MAGYAR JOGI SZABÁLYOZÁSRÓL A KÖRNYEZETJOGI ALAPELVEK, KÜLÖNÖSEN A FENNTARTHATÓ FEJLŐDÉS TÜKRÉBEN PHD ÉRTEKEZÉS TÉZISEI SZERZŐ: TAHYNÉ DR KOVÁCS

Részletesebben

On-line értékelési módszerek II. Lengyelné Molnár Tünde

On-line értékelési módszerek II. Lengyelné Molnár Tünde On-line értékelési módszerek II. Lengyelné Molnár Tünde MÉDIAINFORMATIKAI KIADVÁNYOK On-line értékelési módszerek II. Lengyelné Molnár Tünde Eger, 2013 Korszerű információtechnológiai szakok magyarországi

Részletesebben

Gate Control okostelefon-alkalmazás

Gate Control okostelefon-alkalmazás Gate Control okostelefon-alkalmazás GSM Gate Control Pro 20/1000 modulokhoz HASZNÁLATI ÚTMUTATÓ v1.1.1.0 és újabb alkalmazásverzióhoz Dokumentumverzió: v1.5 2016.05.18 Termék rövid leírása A GSM Gate Control

Részletesebben

SZAKDOLGOZAT. Titkó Szabolcs. Debrecen 2009.

SZAKDOLGOZAT. Titkó Szabolcs. Debrecen 2009. SZAKDOLGOZAT Titkó Szabolcs Debrecen 2009. Debreceni Egyetem Informatikai Kar Diódakatalógus a weben Témavezető: Dr Kuki Attila Egyetemi Adjunktus Készítette: Titkó Szabolcs Mérnök Informatikus Debrecen

Részletesebben

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is.

Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

PARAMÉTERES GÖRBÉK ALKALMAZÁSA VALÓSIDE- JŰ DIGITÁLIS HANGFELDOLGOZÁS SORÁN

PARAMÉTERES GÖRBÉK ALKALMAZÁSA VALÓSIDE- JŰ DIGITÁLIS HANGFELDOLGOZÁS SORÁN Multidiszciplináris tudományok, 3. kötet. (2013) sz. pp. 251-258. PARAMÉTERES GÖRBÉK ALKALMAZÁSA VALÓSIDE- JŰ DIGITÁLIS HANGFELDOLGOZÁS SORÁN Lajos Sándor Mérnöktanár, Miskolci Egyetem,Ábrázoló geometriai

Részletesebben

Tartalomjegyzék 5 TARTALOMJEGYZÉK

Tartalomjegyzék 5 TARTALOMJEGYZÉK Tartalomjegyzék 5 TARTALOMJEGYZÉK Bevezető... 13 1. Általános tudnivalók... 14 1.1. Az operációs rendszer... 14 1.2. Tudnivalók a Windows-ról... 15 1.2.1. Honnan kapta nevét a Windows?... 15 1.2.2. A Windows,

Részletesebben

Internet-hőmérő alapkészlet

Internet-hőmérő alapkészlet IPThermo127 KIT Internet-hőmérő alapkészlet Ethernetre / internetre csatolható digitális hőmérő monitorozó programmal Az IPThermo Simple család tagja. A jól ismert IPThermo126 kit továbbfejlesztett utódja,

Részletesebben

Csoport neve: Kisiskolások Feladat sorszáma: 2. Feladat címe: Oktatási intézmény honlapja, oktatási naplóval. E-Project.

Csoport neve: Kisiskolások Feladat sorszáma: 2. Feladat címe: Oktatási intézmény honlapja, oktatási naplóval. E-Project. Csoport neve: Kisiskolások Feladat sorszáma: 2. Feladat címe: Oktatási intézmény honlapja, oktatási naplóval E-Project Gyakorlatvezető: Krizsán Zoltán Csoport tagok: Koncz Gergely WP21 info@teng.hu Lajtner-Gerán

Részletesebben

Nemzeti Alaptanterv Informatika műveltségterület Munkaanyag. 2011. március

Nemzeti Alaptanterv Informatika műveltségterület Munkaanyag. 2011. március Nemzeti Alaptanterv Informatika műveltségterület Munkaanyag 2011. március 1 Informatika Alapelvek, célok Az információ megszerzése, megértése, feldolgozása és felhasználása, vagyis az információs műveltség

Részletesebben

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31 Web programozás 2011 2012 1 / 31 Áttekintés Mi a web? / A web rövid története Kliens szerver architektúra Néhány alapfogalom Kliens- illetve szerver oldali technológiák áttekintése Miről lesz szó... (kurzus/labor/vizsga)

Részletesebben

Kaspersky Internet Security Felhasználói útmutató

Kaspersky Internet Security Felhasználói útmutató Kaspersky Internet Security Felhasználói útmutató ALKALMAZÁS VERZIÓJA: 16.0 Tisztelt Felhasználó! Köszönjük, hogy termékünket választotta. Reméljük, hogy ez a dokumentum segít a munkájában, és választ

Részletesebben

Dr. Pétery Kristóf: Excel 2003 magyar nyelvű változat

Dr. Pétery Kristóf: Excel 2003 magyar nyelvű változat 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

Informatika-érettségi_emelt 11.-12. évfolyam Informatika

Informatika-érettségi_emelt 11.-12. évfolyam Informatika 11. évfolyam A tanév célja a középszintű érettségire való felkészítés, az emelt szintű érettségire való felkészülésnek a megalapozása. A középszintű érettségi elősegíti az eligazodást és a munkába állást

Részletesebben

A TAKARNET célja és felépítése 1

A TAKARNET célja és felépítése 1 A TAKARNET célja és felépítése 1 A különbözo földhivatali fejlesztések eredményeként kialakulnak, illetve részben már kialakultak a digitális adatbázisok. Ebbol következik, hogy lehetové válik az adatok

Részletesebben

Novell Nterprise Branch Office: a távoli iroda felügyeletének leegyszerűsítése

Novell Nterprise Branch Office: a távoli iroda felügyeletének leegyszerűsítése Novell Nterprise Branch Office: a távoli iroda felügyeletének leegyszerűsítése termékleírás www.novell.hu Bevezetés A mai vállalatok gyakran tartanak fenn irodákat az ország és a világ különböző pontjain.

Részletesebben

Access 2013 Lekérdezéstől testre szabásig TARTALOM 1

Access 2013 Lekérdezéstől testre szabásig TARTALOM 1 TARTALOM 1 2 TARTALOM Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Pétery Tamás Szerkesztő:

Részletesebben

Pathfinder Adventure Card Game

Pathfinder Adventure Card Game A JEM magazin 7. számában írtam egy ismertetőt a szerepjátékról, mint a társasjátékokkal rokon műfajról, amely sokkal szabadabb, a fantáziának nagyobb teret engedő szórakozási forma. Ha valaki járatos

Részletesebben

MUNKAANYAG. Angyal Krisztián. Szövegszerkesztés. A követelménymodul megnevezése: Korszerű munkaszervezés

MUNKAANYAG. Angyal Krisztián. Szövegszerkesztés. A követelménymodul megnevezése: Korszerű munkaszervezés Angyal Krisztián Szövegszerkesztés A követelménymodul megnevezése: Korszerű munkaszervezés A követelménymodul száma: 1180-06 A tartalomelem azonosító száma és célcsoportja: SzT-004-55 SZÖVEGSZERKESZTÉS

Részletesebben

Dr. Pétery Kristóf: AutoCAD LT 2007 Fóliák, tulajdonságok

Dr. Pétery Kristóf: AutoCAD LT 2007 Fóliák, tulajdonságok 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

Emeld új szintre a játékélményt

Emeld új szintre a játékélményt 2016 Tavasz/Nyár Emeld új szintre a játékélményt Érintsd oda, csatlakoztasd, gyűjtsd Játssz kedvenc Nintendo karaktereiddel! Állítsd össze saját, egyedi kollekciód! Használd az amiibo figurákat a legkülönbözőbb

Részletesebben

SEAGUARD. Integrált Biztonság-felügyeleti Rendszer

SEAGUARD. Integrált Biztonság-felügyeleti Rendszer Integrált Biztonság-felügyeleti Rendszer Totális Biztonságtechnika Beléptetõ Rendszer Digitális CCTV Tûzjelzõ Behatolás-védelem Integrált Biztonság-felügyeleti Rendszer Épületek, Épületcsoportok, Országos

Részletesebben

Diplomamunka. Koczka László

Diplomamunka. Koczka László Diplomamunka Koczka László Debrecen 010 Debreceni Egyetem Informatikai Kar Közgazdasági Modellek Számítógépes Szimulációja Témavezető: Dr. Földvári Péter Egyetemi adjunktus Készítette: Koczka László Gazdaságinformatikus

Részletesebben

Az MS Access adatbázis-kezelő program

Az MS Access adatbázis-kezelő program Az adatbázis-kezelő program A tananyagban az alapfogalmak és a tervezési megoldások megismerése után a gyakorlatban is elkészítünk (számítógépes) adatbázisokat. A számítógépes adatbázisok létrehozásához,

Részletesebben

FELMÉRÉS RAJZFILMEK ÉS VIRTUÁLIS VALÓSÁG JÁTÉKOK SZEREPLŐIRŐL MEASURING OF CARTOONS AND VIRTUAL REALITY AVATARS

FELMÉRÉS RAJZFILMEK ÉS VIRTUÁLIS VALÓSÁG JÁTÉKOK SZEREPLŐIRŐL MEASURING OF CARTOONS AND VIRTUAL REALITY AVATARS FELMÉRÉS RAJZFILMEK ÉS VIRTUÁLIS VALÓSÁG JÁTÉKOK SZEREPLŐIRŐL MEASURING OF CARTOONS AND VIRTUAL REALITY AVATARS Sikné Lányi Cecília, lanyi@almos.vein.hu Torma Szilvia, szysz@freemail.hu Veszprémi Egyetem,

Részletesebben

Fogalomtérkép. IHMC CmapTools version 5.03. Felhasználása. Elérhetőség. Rendszerkövetelmény (Windows OS esetén):

Fogalomtérkép. IHMC CmapTools version 5.03. Felhasználása. Elérhetőség. Rendszerkövetelmény (Windows OS esetén): Fogalomtérkép A fogalmak bonyolult szemantikai hálózatban kapcsolódnak egymáshoz, nagyon gyakran elsősorban a használati kontextus határozza meg a szavak jelentését. Ahogyan egy várostérkép segítségével

Részletesebben

Számítógép kártevők. Számítógép vírusok (szűkebb értelemben) Nem rezidens vírusok. Informatika alapjai-13 Számítógép kártevők 1/6

Számítógép kártevők. Számítógép vírusok (szűkebb értelemben) Nem rezidens vírusok. Informatika alapjai-13 Számítógép kártevők 1/6 Informatika alapjai-13 Számítógép kártevők 1/6 Számítógép kártevők Számítógép vírusok (szűkebb értelemben) A vírus önreprodukáló program, amely saját másolatait egy másik végrehajtható file-ba vagy dokumentumba

Részletesebben

TÉRINFORMATIKA AZ INTERNETEN

TÉRINFORMATIKA AZ INTERNETEN Térinformatika tanszék * Keresztmetszet 2004. Nyugat-Magyarországi Egyetem, Geoinformatikai Főiskolai Kar, Székesfehérvár. TÉRINFORMATIKA AZ INTERNETEN Bódis Gábor Sopron és Környéke Víz- és Csatornamű

Részletesebben

Microsoft alapokon az országszerte mintegy 200 telephellyel rendelkező szervezet. hálózata

Microsoft alapokon az országszerte mintegy 200 telephellyel rendelkező szervezet. hálózata Állami Foglalkoztatási Szolgálat: 30 százalékkal csökkentek az informatikai rendszer működtetési költségei a Microsoft Infrastruktúra Optimalizációs Modellje segítségével Microsoft alapokon az országszerte

Részletesebben

Emelt Szintű etanácsadó Képzés

Emelt Szintű etanácsadó Képzés Emelt Szintű etanácsadó Képzés Kulturális innováció az Észak-magyarországi régióban REKÉP Regionális Kultúra Építő Projekt TÁMOP 3.2.3/08/2 Eszterházy Károly Főiskola Nemzeti Fejlesztési Ügynökség www.ujszechenyiterv.gov.hu

Részletesebben

I. Az internet alapjai

I. Az internet alapjai I. Az internet alapjai Az Internet kialakulása, működése Az Internet egy világméretű számítógép-hálózat Ez a különböző rendszerű számítógép-hálózatok ezrei között teremt kapcsolatot. Ahhoz, hogy ez működjön,

Részletesebben

Szoftveripar és üzleti modellek

Szoftveripar és üzleti modellek Szoftveripar és üzleti modellek Irodalom Michael A. Cusumano: The business of software Michael Hiltzik: Dealers of lightning Eric Raymond: A katedrális és a bazár Szoftver technológia Software engineering

Részletesebben

Jármû-elektronika ELEKTRONIKAI-INFORMATIKAI SZAKFOLYÓIRAT. 2003. november. 890 Ft. XII. évfolyam 7. szám

Jármû-elektronika ELEKTRONIKAI-INFORMATIKAI SZAKFOLYÓIRAT. 2003. november. 890 Ft. XII. évfolyam 7. szám XII. évfolyam 7. szám ELEKTRONIKAI-INFORMATIKAI SZAKFOLYÓIRAT 890 Ft 2003. november Jármû-elektronika Gyorsulásszenzorok az autóiparban (2. rész) SZEGEDI ANDRÁS Az elôzô részben bemutatásra került az autóiparban

Részletesebben

VirtualBox, Debian telepítés

VirtualBox, Debian telepítés VirtualBox, Debian telepítés 1 VirtualBox Az Oracle VirtualBox egy x86-alapú (azaz AMD vagy Intel rendszerekre kifejlesztett), több platformon is futtatható virtualizációs program. A segítségével virtuális

Részletesebben

GAMIFIKÁLOK?- avagy játék segítségével tanulok?

GAMIFIKÁLOK?- avagy játék segítségével tanulok? GAMIFIKÁLOK?- avagy játék segítségével tanulok? Gamification mostanában gyakran emlegetett fogalom, mivel a game szó jelentésével tisztában voltam így utána néztem a jelentésének. A különböző megfogalmazásokban,

Részletesebben

Az Orbis adatbáziskezelő

Az Orbis adatbáziskezelő ORBIS ADATBÁZIS WEBRE VITELE KÉSZÍTETTE: SOÓS PÉTER 2001. április 13. Bevezetés Ezen írás a NETWORKSHOP 2001 konferenciára készített előadásom anyagának szerkesztett változata. 1994-95. óta sok jelentős

Részletesebben

A JAVA FUTTATÁSAKOR ELŐFORDULÓ HIBA-

A JAVA FUTTATÁSAKOR ELŐFORDULÓ HIBA- A JAVA FUTTATÁSAKOR ELŐFORDULÓ HIBA- ÜZENETEK ÉS AZOK KIKERÜLÉSE Jelen jegyzet az ÉTDR Java platformon futtatható alkalmazásainak betöltésekor esetlegesen előugró hibaüzenetek kikerülése végett készült.

Részletesebben

BARANGOLÁS AZ E-KÖNYVEK BIRODALMÁBAN Milyen legyen az elektonikus könyv?

BARANGOLÁS AZ E-KÖNYVEK BIRODALMÁBAN Milyen legyen az elektonikus könyv? BARANGOLÁS AZ E-KÖNYVEK BIRODALMÁBAN Milyen legyen az elektonikus könyv? Készítették: Névery Tibor és Széll Ildikó PPKE I. évf. kiadói szerkesztő hallgatók, közösen 1 BEVEZETŐ Az elektronikus könyv valamilyen

Részletesebben

Kiss Krisztina: Közösségi tartalomszolgáltatás a Pécsi Tudományegyetem Benedek Ferenc Jogtudományi és Közgazdaságtudományi Szakkönyvtárában

Kiss Krisztina: Közösségi tartalomszolgáltatás a Pécsi Tudományegyetem Benedek Ferenc Jogtudományi és Közgazdaságtudományi Szakkönyvtárában Kiss Krisztina: Közösségi tartalomszolgáltatás a Pécsi Tudományegyetem Benedek Ferenc Jogtudományi és Közgazdaságtudományi Szakkönyvtárában Az előadás röviden áttekinti a közösségi média elemeit, jellemzőit,

Részletesebben

Hatékony. kliensfelügyelet. Avégfelhasználói rendszerek tekintetében korántsem olyan egyértelmű a kép, mint az

Hatékony. kliensfelügyelet. Avégfelhasználói rendszerek tekintetében korántsem olyan egyértelmű a kép, mint az Hatékony kliensfelügyelet Ma már szerencsére vitán felül áll, hogy a nagy komplexitású, üzleti szempontból kritikus rendszereket csak automatizált és intelligens felügyeleti eszközökkel lehet eredményesen

Részletesebben

Fejlesztési tapasztalatok multifunkciós tananyagok előállításával kapcsolatban Nagy Sándor

Fejlesztési tapasztalatok multifunkciós tananyagok előállításával kapcsolatban Nagy Sándor Fejlesztési tapasztalatok multifunkciós tananyagok előállításával kapcsolatban Nagy Sándor VE GMK Statisztika és Informatika Tanszék nagy-s@georgikon.hu Összefoglaló Világszerte tanúi lehettünk a mobilkommunikációs

Részletesebben

BBS-INFO Kiadó, 2016.

BBS-INFO Kiadó, 2016. BBS-INFO Kiadó, 2016. Bártfai Barnabás, 2016. Minden jog fenntartva! A könyv vagy annak oldalainak másolása, sokszorosítása csak a szerző írásbeli hozzájárulásával történhet. A betűtípus elnevezések, a

Részletesebben

NeoCMS tartalommenedzselő szoftver leírása

NeoCMS tartalommenedzselő szoftver leírása NeoCMS tartalommenedzselő szoftver leírása A NeoSoft Informatika NeoCMS márkanévvel ellátott rendszere könnyen, gyorsan testre szabható tartalommenedzselő rendszer, mely egyedileg átalakítható, és így

Részletesebben

LEGYEN A VÁLTOZÁS- KEZELÉS HŐSE!

LEGYEN A VÁLTOZÁS- KEZELÉS HŐSE! 2011 15. KIADÁS AZ ÜZLETET ELŐMOZDÍTÓ MEGOLDÁSOK A ONE LÉNYEGE BARÁTKOZZON MEG A VÁLTOZÁSOKKAL! Tegyen szert versenyelőnyre! LEGYEN URA A HELYZETNEK! Reagáljon növekvő vállalata igényeire KÉSZÜLJÖN FEL!

Részletesebben

Emeld új szintre a játékélményt

Emeld új szintre a játékélményt Emeld új szintre a játékélményt Érintsd oda, csatlakoztasd, gyűjtsd Játssz kedvenc Nintendo karaktereiddel! Állítsd össze saját, egyedi kollekciód! Használd az amiibo figurákat a legkülönbözőbb módokon

Részletesebben

Szent István körút 10.

Szent István körút 10. Szent István körút 10., Weiss-ház Választott házam a Szent István körút 10-es szám alá esik, a Tátra utca és a körút sarkán, helyrajzi száma: 25105. 1884-től, a körút ezen szakaszán Weiss Manfréd és családja

Részletesebben

JÁTÉKOSLÉT 2014 KÉRDŐÍV eredmények. 2. rész JÁTÉKHASZNÁLATI SZOKÁSOK

JÁTÉKOSLÉT 2014 KÉRDŐÍV eredmények. 2. rész JÁTÉKHASZNÁLATI SZOKÁSOK Eötvös Loránd Tudományegyetem, Társadalomtudományi Kar, Szociológia Doktori Iskola Fromann Richárd JÁTÉKOSLÉT 2014 KÉRDŐÍV eredmények 2. rész JÁTÉKHASZNÁLATI SZOKÁSOK www.jatekkutatas.hu Interdiszciplináris

Részletesebben

ESZTERHÁZY KÁROLY FŐISKOLA, EGER. Beszámoló könyvtári szakmai gyakorlatról

ESZTERHÁZY KÁROLY FŐISKOLA, EGER. Beszámoló könyvtári szakmai gyakorlatról ESZTERHÁZY KÁROLY FŐISKOLA, EGER Beszámoló könyvtári szakmai gyakorlatról Digitálisarchívum-fejlesztő szak Humán Informatika Tanszék Média Informatika Intézet Zádori Zsuzsanna Netpun kód: U5AT4N A szakmai

Részletesebben

Procontrol Clienter ügyfélhívó rendszer általános leírása

Procontrol Clienter ügyfélhívó rendszer általános leírása Procontrol Clienter ügyfélhívó rendszer általános leírása Létrehozás dátuma: 2009.01.26 11:53 1. oldal, összesen: 15 Tartalomjegyzék Tartalomjegyzék... 2 Bevezetés... 3 Rendszerelemek... 3 A rendszer működési

Részletesebben

QEMU beüzemelése és részletes ismertető

QEMU beüzemelése és részletes ismertető QEMU beüzemelése és részletes ismertető Név: Rehó Imre Béla Tárgy neve: Virtualizációs technológiák és alkalmazásaik Tárgy kódja: BMEVIMIAV89 Oktatók: Micskei Zoltán, Tóth Dániel Dátum: 2009. december

Részletesebben

Dr. Pétery Kristóf: Word 2003 magyar nyelvű változat

Dr. Pétery Kristóf: Word 2003 magyar nyelvű változat 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

Az Online levélkiszolgáló

Az Online levélkiszolgáló Az Online levélkiszolgáló A levelezés menedzselése Microsoft Magyarország Kiadás ideje: 2012.03.01. Kivonat: A Microsoft Live@edu szolgáltatás számos olyan újdonságot kínál, mely nem csak a korábban már

Részletesebben

14.2. OpenGL 3D: Mozgás a modellben

14.2. OpenGL 3D: Mozgás a modellben 14. Fotórealisztikus megjelenítés 1019 14.2. OpenGL 3D: Mozgás a modellben A program az OpenGL technika alkalmazásával gyors lehetőséget biztosít a modellben való mozgásra. A mozgás mellett lehetőség van

Részletesebben

Magyarországon a szerzői joggal a 1999. évi LXXVI. törvény foglalkozik.

Magyarországon a szerzői joggal a 1999. évi LXXVI. törvény foglalkozik. 7. Ön részt vesz egy online multimédia adatbázis megvalósításában. A fejlesztés előkészítéseként tekintse az interneten való publikálással kapcsolatos szerzői jogi kérdéseket, és foglalja össze, hogy milyen

Részletesebben

A Szekszárdi I. Béla Gimnázium Helyi Tanterve

A Szekszárdi I. Béla Gimnázium Helyi Tanterve A Szekszárdi I. Béla Gimnázium Helyi Tanterve Négy évfolyamos gimnázium Informatika Készítette: a gimnázium reál munkaközössége 2015. Tartalomjegyzék Alapvetés...3 Egyéb kötelező direktívák:...6 Informatika

Részletesebben

DSI működésre. tervezve. Hogyan fog kinézni a jövő informatikai infrastruktúrája? Egész szoftverrendszerek egy

DSI működésre. tervezve. Hogyan fog kinézni a jövő informatikai infrastruktúrája? Egész szoftverrendszerek egy DSI működésre tervezve A Microsoft Dynamic Systems Initiative (DSI, dinamikus rendszerek kezdeményezése) névre hallgató koncepciójának mottója: Design for Operations. Célja olyan dinamikus, rugalmas rendszerek

Részletesebben

CorelCAD 2015 Megjelenítés

CorelCAD 2015 Megjelenítés 2 Minden jog fenntartva, beleértve bárminemű sokszorosítás, másolás és közlés jogát is. Kiadja a Mercator Stúdió Felelős kiadó a Mercator Stúdió vezetője Lektor: Gál Veronika Szerkesztő: Pétery István

Részletesebben

Útmutató a hálózati és internetes kommunikációhoz

Útmutató a hálózati és internetes kommunikációhoz Útmutató a hálózati és internetes kommunikációhoz Üzleti célú asztali számítógépek Copyright 2006 Hewlett-Packard Development Company, L.P. Az itt közölt információ értesítés nélkül változhat. A Microsoft

Részletesebben

iseries Access for Windows: Adminisztráció

iseries Access for Windows: Adminisztráció IBM Systems - iseries iseries Access for Windows: Adminisztráció V5R4 IBM Systems - iseries iseries Access for Windows: Adminisztráció V5R4 Megjegyzés Mielőtt a jelen leírást és a vonatkozó terméket használná,

Részletesebben

Főbb jellemzők INTELLIO VIDEO SYSTEM 2 ADATLAP

Főbb jellemzők INTELLIO VIDEO SYSTEM 2 ADATLAP IVS2 videomenedzsment-szoftver Főbb jellemzők Munkaállomásonként 2 30 kamera monitorozása Szoftverkulcsos és hardverkulcsos működés Intelligens mozgás- és objektumkeresés DPTZ gyors felismerhetőség Microsoft

Részletesebben

ismerd meg! A PC vagyis a személyi számítógép XIX. rész A szkenner

ismerd meg! A PC vagyis a személyi számítógép XIX. rész A szkenner ismerd meg! A PC vagyis a személyi számítógép A szkenner XIX. rész 1. Bevezetés A digitális képfelvételt és képfeldolgozást a gyakorlatban már az ötvenes évek elejétol kezdték alkalmazni. A számítógépes

Részletesebben

Department of Software Engineering

Department of Software Engineering Tavasz 2016 UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED Department of Software Engineering Számítógép-hálózatok 2. gyakorlat Wireshark Bordé Sándor S z e g e d i T u d o m á n y e g y e t

Részletesebben

Gate Control okostelefon-alkalmazás

Gate Control okostelefon-alkalmazás Gate Control okostelefon-alkalmazás GSM Gate Control Pro 20/1000 modulokhoz HASZNÁLATI ÚTMUTATÓ v1.0.0.0 és újabb alkalmazásverzióhoz Dokumentumverzió: v1.42 2015.09.23 Termék rövid leírása A GSM Gate

Részletesebben

4. BEMENET EGYSÉGEK. 4. Bemenet egységek

4. BEMENET EGYSÉGEK. 4. Bemenet egységek 4. Bemenet egységek A bemeneti perifériákkal a számítógépbe kívülről adatokat, programokat juttathatunk be. Íme röviden felsorolva a legismertebb bemeneti egységek: 1. Billentyűzet 2. Egér és más mutató

Részletesebben

Vizuális nevelés. 3. évfolyam. Célok :

Vizuális nevelés. 3. évfolyam. Célok : Vizuális nevelés Célok : 3. évfolyam - A tanulók hozzásegítse a látható világ jelenségeinek, a vizuális művészeti alkotásoknak mélyebb átéléséhez, értelmezéséhez, környezetünk értő alakításához. - A gondolkodás

Részletesebben

A HOZZÁFÉRÉS NYILVÁNOS ÉS KERESKEDELMI MODELLJEI A DIGITÁLIS KORSZAKBAN

A HOZZÁFÉRÉS NYILVÁNOS ÉS KERESKEDELMI MODELLJEI A DIGITÁLIS KORSZAKBAN BELSŐ POLITIKÁK FŐIGAZGATÓSÁGA B. TEMATIKUS OSZTÁLY: STRUKTURÁLIS ÉS KOHÉZIÓS POLITIKÁK KULTÚRA ÉS OKTATÁS A HOZZÁFÉRÉS NYILVÁNOS ÉS KERESKEDELMI MODELLJEI A DIGITÁLIS KORSZAKBAN ÖSSZEFOGLALÁS Kivonat:

Részletesebben

Bemutatkozás: az Intergraph Co. és a Tekiré Kft. Mi a GeoMedia? A GeoMedia 3D termékről Eszközkészlet, Ábrázolási lehetőségek

Bemutatkozás: az Intergraph Co. és a Tekiré Kft. Mi a GeoMedia? A GeoMedia 3D termékről Eszközkészlet, Ábrázolási lehetőségek A GeoMedia3D bemutatása Miről is lesz szó? Bemutatkozás: az Intergraph Co. és a Tekiré Kft. Mi a GeoMedia? A GeoMedia 3D termékről Eszközkészlet, Ábrázolási lehetőségek Navigációs eszközök A 3D nézet alapfelülete

Részletesebben

Operációs rendszerek

Operációs rendszerek Óravázlat az ECDL oktatócsomaghoz 2. modul Operációs rendszerek Krea Kft. 1034 Budapest, Szőlő u 21. Tel/fax: 250-5570 / 387-2557 E-mail: krea@krea.hu A vázlatot összeállította: Pintyőke László Lektorálta:

Részletesebben

Közbeszerzési Értesítő száma: 2015/108

Közbeszerzési Értesítő száma: 2015/108 Korrigendum - A Nemzeti Filmtörténeti Élménypark - Versenyképes Turisztikai Termék- és Attrakció Fejlesztés című ÉMOP-2.1.1/A-14 projekt keretében Megjelenítő- és egyéb eszközök beszerzése és installációja

Részletesebben

Virtuális szeminárium: E-portfólió elemzés és értékelés. Komló Csaba

Virtuális szeminárium: E-portfólió elemzés és értékelés. Komló Csaba Virtuális szeminárium: E-portfólió elemzés és értékelés Komló Csaba MÉDIAINFORMATIKAI KIADVÁNYOK Virtuális szeminárium: E-portfólió elemzés és értékelés Komló Csaba Eger, 2013 Korszerű információtechnológiai

Részletesebben

Interaktív szimulációs környezet a valószínűségszámítás egyetemi okatásához

Interaktív szimulációs környezet a valószínűségszámítás egyetemi okatásához Interaktív szimulációs környezet a valószínűségszámítás egyetemi okatásához dr. Vetier András és Kátay Bálint Budapesti Műszaki és Gazdaságtudományi Egyetem Munkánk, melynek rövid bemutatását Ön most a

Részletesebben

int azt az elõzõ részbõl megtudtuk, a rétegeknek az a feladatuk, hogy valamiféle feladatot végezzenek

int azt az elõzõ részbõl megtudtuk, a rétegeknek az a feladatuk, hogy valamiféle feladatot végezzenek Hálózatok (2. rész) Sorozatunk e részében szó lesz az entitásokról, a csatolófelületekrõl, a protokollokról, a hivatkozási modellekrõl és sok minden másról. int azt az elõzõ részbõl megtudtuk, a eknek

Részletesebben

erettsegizz.com Érettségi tételek

erettsegizz.com Érettségi tételek erettsegizz.com Érettségi tételek Az informatika fejlődéstörténete, jogi ismeretek Információ és társadalom Az informatika fejlődéstörténete a XX. Században, napjainkban Jogi ismeretek, szerzőjog, szoftver

Részletesebben

Budai Attila. Webalapú multimédiás interaktív oktatóprogramok

Budai Attila. Webalapú multimédiás interaktív oktatóprogramok Budai Attila Webalapú multimédiás interaktív oktatóprogramok 1. A webalapú multimédiás interaktív oktatóprogram fogalma és szerepe a távoktatásban A tudásalapú információs társadalomba való átmenet időszakaiban

Részletesebben

részvétel a kulturális, társadalmi és/vagy szakmai célokat szolgáló közösségekben és hálózatokban. Az informatika tantárgy fejlesztési feladatait a

részvétel a kulturális, társadalmi és/vagy szakmai célokat szolgáló közösségekben és hálózatokban. Az informatika tantárgy fejlesztési feladatait a INFORMATIKA Az informatika tantárgy ismeretkörei, fejlesztési területei hozzájárulnak ahhoz, hogy a szakközépiskolás tanuló az információs társadalom aktív tagjává válhasson. Az informatikai eszközök használata

Részletesebben

Mi az a Scribus? SCRIBUS. Mi az a Scribus? Milyen platformon érhet el? Hasonló feladatra használható programok. Mire használhatjuk a Scribust?

Mi az a Scribus? SCRIBUS. Mi az a Scribus? Milyen platformon érhet el? Hasonló feladatra használható programok. Mire használhatjuk a Scribust? Mi az a Scribus? SCRIBUS Kiadványszerkesztés A Scribus egy nyílt forráskódú kiadványszerkeszt program (DTP). Könny a használata, de a profi funkciók sem hiányoznak bel le. Néhány oldalas újságtól kezdve,

Részletesebben

ÓBUDAI EGYETEM Neumann János Informatikai Kar Informatikai Rendszerek Intézet Témavezető: Bringye Zsolt

ÓBUDAI EGYETEM Neumann János Informatikai Kar Informatikai Rendszerek Intézet Témavezető: Bringye Zsolt Témavezető: Bringye Zsolt Diplomamunka/szakdolgozat címe: X64 szerver virtualizáció technológiai kérdéseinek áttekintése, kereskedelmi termékekben történő megvalósításuk elemzése (funkcionalitás, teljesítmény,

Részletesebben

TANFOLYAMI AJÁNLATUNK

TANFOLYAMI AJÁNLATUNK TANFOLYAMI AJÁNLATUNK Én félek a számítógéptől, inkább hozzá sem nyúlok! Hányszor hallhatjuk ezt a mondatot az örökifjú korú társainktól, pedig nem ördöngösség, bárki megtanulhatja a legalapvetőbb funkciókat.

Részletesebben

Budapesti Műszaki- és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar MIT. Nagyteljesítményű mikrovezérlők tantárgy [vimim342]

Budapesti Műszaki- és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar MIT. Nagyteljesítményű mikrovezérlők tantárgy [vimim342] Budapesti Műszaki- és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar MIT Nagyteljesítményű mikrovezérlők tantárgy [vimim342] 8x8x8 LED Cube Készítette: Szikra István URLJRN Tartalomjegyzék

Részletesebben

INFORMÁCIÓS- ÉS VEZÉRLŐSZOFTVER A SZÁMÍTÓGÉP-KOMPATIBILIS FUNKCIÓVAL BÍRÓ VÉRNYOMÁSMÉRŐKHÖZ

INFORMÁCIÓS- ÉS VEZÉRLŐSZOFTVER A SZÁMÍTÓGÉP-KOMPATIBILIS FUNKCIÓVAL BÍRÓ VÉRNYOMÁSMÉRŐKHÖZ HASZNÁLATI ÚTMUTATÓ INFORMÁCIÓS- ÉS VEZÉRLŐSZOFTVER A SZÁMÍTÓGÉP-KOMPATIBILIS FUNKCIÓVAL BÍRÓ VÉRNYOMÁSMÉRŐKHÖZ TÍPUSOK: BP-410R/U, BP-600R/U(J), BP-600RB/UB(J), BP-700 sorozat, AK-3000T, AK-4000T/TU,

Részletesebben

Szövegszerkesztő programok: Jegyzettömb, WordPad, Microsoft Word

Szövegszerkesztő programok: Jegyzettömb, WordPad, Microsoft Word Szövegszerkesztő programok: Jegyzettömb, WordPad, Microsoft Word A szövegszerkesztők közül az elkészítendő szöveg jellegétől függően választunk programot, és nem feltétlenül azt, amelyiket alapértelmezésben

Részletesebben

Super Sports 3X Microsoft Xbox 360, Sony PS3 és PC platformra

Super Sports 3X Microsoft Xbox 360, Sony PS3 és PC platformra Super Sports 3X Microsoft Xbox 360, Sony PS3 és PC platformra Használati utasítás v1.0 A magyar nyelvű útmutatót a www.konzoluzlet.hu készítette. Minden jog fenntartva! 1 Bemutatás Köszönjük, hogy megvásárolta

Részletesebben

MUNKAANYAG. Földy Erika. A szakmai önéletrajztól a művészeti kritikáig (Az. alkotói tevékenység komplex megjelenítése,

MUNKAANYAG. Földy Erika. A szakmai önéletrajztól a művészeti kritikáig (Az. alkotói tevékenység komplex megjelenítése, Földy Erika A szakmai önéletrajztól a művészeti kritikáig (Az alkotói tevékenység komplex megjelenítése, önértékelés, és szakmai kommunikáció) A követelménymodul megnevezése: Művészetelméleti alapozás

Részletesebben