Tervminták a valósidejű gyakorlatban

Hasonló dokumentumok
Felhasználó által definiált adattípus

A C# programozási nyelv alapjai

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

117. AA Megoldó Alfréd AA 117.

Algoritmusok és adatszerkezetek II.

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Konkurens TCP Szerver

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

ZH mintapélda. Feladat. Felület

Programozás II gyakorlat. 4. Öröklődés

Szoftvertechnológia alapjai Java előadások

Informatika terméktervezőknek

Objektumorientált programozás C# nyelven III.

OOP: Java 8.Gy: Abstract osztályok, interfészek

BME MOGI Gépészeti informatika 7.

Java és web programozás

INFORMATIKAI ALAPISMERETEK

Programozás II. ATM példa Dr. Iványi Péter

INFORMATIKAI ALAPISMERETEK

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

A C# PROGRAMOZÁSI NYELV

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

és az instanceof operátor

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Programozás I. Első ZH segédlet

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

C# feladatok gyűjteménye

Java és web programozás

Szoftvertervezés és -fejlesztés I.

1. Alapok. Programozás II

FELÜLET...13 PROJEKTTERV...14

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Internet technológiák

Java II. I A Java programozási nyelv alapelemei

Stack Vezérlés szerkezet Adat 2.

bool _freehand = false; QPoint _lastpoint; // ebben a pontban volt az utolsó rajzolásnál az egérmutató

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

3. Osztályok II. Programozás II

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

Tartalomjegyzék. Bevezetés...2

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

C++ Standard Template Library (STL)

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Internet programozása. 3. előadás

ISA szimulátor objektum-orientált modell (C++)

Kalapácsvetés 2016 szöveges

Java Programozás 11. Ea: MVC modell

osztályok kapcsolata Származtatatás C++ Izsó Tamás március 19. Izsó Tamás Származtatatás/ 1

6. fejezet: Ciklusok

Programozás II gyakorlat. 6. Polimorfizmus

Programozási nyelvek JAVA EA+GY 1. gyakolat

main int main(int argc, char* argv[]) { return 0; } main return 0; (int argc, char* argv[]) main int int int main main main

Játékfejlesztés. Szirmay-Kalos László

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

.AA Megoldó Alfréd AA.

Eseménykezelés. Aszinkron kommunikáció

Farkas Gyula Szakkollégium Bit- és számtologatók. DirectX9 felhasználása számítógépes grafikában (bevezető egy primitív keretrendszer)

Java II. I A Java programozási nyelv alapelemei

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

STL. Algoritmus. Iterátor. Tároló. Elsődleges komponensek: Tárolók Algoritmusok Bejárók

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Programozási nyelvek és módszerek Java Thread-ek

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

OOP: Java 7.Gy: Öröklődés, referenciák

INFORMATIKA javítókulcs 2016

4. Öröklődés. Programozás II

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

BME MOGI Gépészeti informatika 4.

Bevezetés a programozásba I.

Java programozási nyelv 5. rész Osztályok III.

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

A PROGAMOZÁS ALAPJAI 1. Függvény mint függvény paramétere. Függvény mint függvény paramétere. Függvény mint függvény paramétere

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

C#, OOP. Osztályok tervezése C#-ban

C# osztályok. Krizsán Zoltán

3D-s technológiák a játékfejlesztésben UDK bevezetés

Az emelt szintű. informatika érettségi. programozási feladatainak. megoldása Java nyelven. NetBeans IDE 8.1 környezetben

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Szoftvertechnológia alapjai Java előadások

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Java Programozás 1. Gy: Java alapok. Ismétlés ++

OOP: Java 4.Gy: Java osztályok

Programozási nyelvek Java

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

BEÁGYAZOTT RENDSZEREK ALAPJAI. Grafikus benchmark alkalmazás

Elemi Alkalmazások Fejlesztése II.

A jobboldalon a pnlright egy Stacked Widget Állítsuk be az első lapot és nevezzük el pnldraw-ra:

128. AA Megoldó Alfréd AA 128.

Átírás:

Tervminták a valósidejű gyakorlatban

Forrás Ezeknek a diáknak a forrása a Game Programming Patterns című könyv Online elérhető a szerző oldaláról: http://gameprogrammingpatterns.com/contents.htm

Game Loop http://gameprogrammingpatterns.com/game-loop.htm

Célja Az alkalmazás előrehaladásának leválasztása a felhasználói inputról és a processzorok sebességéről

A minta A game loop a program működése alatt folyamatosan fut. Minden iteráció során blokkolás nélkül feldolgozza a felhasználói inputot, frissíti az alkalmazás állapotát és kirajzolja az aktuális állapotot. Az eltelt idő számontartásával a program futásának sebességét is vezérli.

A minta while (true) processinput(); update(); render();

Megvalósítás processinput update render wait

A minta cél FPS while (true) double start = getcurrenttime(); processinput(); update(); render(); sleep(start + MS_PER_FRAME - getcurrenttime());

A minta változó idő double lasttime = getcurrenttime(); while (true) double current = getcurrenttime(); double elapsed = current - lasttime; processinput(); update(elapsed); render(); lasttime = current;

A minta változó update double previous = getcurrenttime(); double lag = 0.0; while (true) double current = getcurrenttime(); double elapsed = current - previous; previous = current; lag += elapsed; processinput(); while (lag >= MS_PER_UPDATE) update(); lag -= MS_PER_UPDATE; render();

A minta változó update Figyeljünk arra, hogy a render két update közé érkezik Azaz magának a rendernek is képesnek kell válnia extrapolálni az aktuális állapotból (optimális esetben a következő irányában) Gyors tárgyaknál ez különösen fontos

Update http://gameprogrammingpatterns.com/update-method

Célja Független objektumok szimulálása azáltal, hogy a viselkedésük egy kisebb egységét dolgozzák fel egy adott lépésben

A minta A világ entitások gyűjteményét tartalmazza. Minden entitás megvalósít egy update eljárást, amivel saját viselkedésének egy lépését írja le. A világ minden frame-ben update-eli az összes entitást.

A probléma while (true) // Patrol right. for (double x = 0; x < 100; x++) skeleton.setx(x); // Patrol left. for (double x = 100; x > 0; x--) skeleton.setx(x);

A probléma egyszerű megoldása Entity skeleton; bool patrollingleft = false; double x = 0; // Main game loop: while (true) if (patrollingleft) x--; if (--x == 0) patrollingleft = false; else if (++x == 100) patrollingleft = true; skeleton.setx(x); // Handle user input and render game...

A probléma egyszerű megoldása Entity skeleton; bool patrollingleft = false; double x = 0; // Main game loop: while (true) if (patrollingleft) x--; if (--x == 0) patrollingleft = false; else if (++x == 100) patrollingleft = true; skeleton.setx(x); El kellett tárolnunk az állapotot, hogy be tudjuk szüntetni és folytatni tudjuk a legutolsó állapotból a folyamatot! // Handle user input and render game...

A megoldás class Entity public: Entity() : x_(0), y_(0) virtual ~Entity() virtual void update() = 0; double x() const return x_; double y() const return y_; void setx(double x) x_ = x; void sety(double y) y_ = y; private: double x_; double y_; ;

A megoldás class World public: World() : numentities_(0) void gameloop(); private: Entity* entities_[max_entities]; int numentities_; ;

A megoldás void World::gameLoop() while (true) // Handle user input... // Update each entity. for (int i = 0; i < numentities_; i++) entities_[i]->update(); // Physics and rendering...

Komponens

A cél Egy entitás több rendszerrel is kapcsolatban lehessen anélkül, hogy ezeket a rendszereket magukat összekapcsolnánk az entitásban

A probléma Egy játékban egy karakter animálódik, hangokat ad ki, hálózaton küld adatok, inputot fogad stb. Ezeket a programban külön alrendszerek kezelik Ha a karakter osztályában ezek az alrendszerek mind include-olva lennének, akkor azok egymást is láthatnák Öröklődés most nem tud segíteni, mert nagyon gyakran gyémántok állnak elő

A minta Egyetlen entitás több rendszerrel is kapcsolatban áll. Minden egyes rendszerrel szembeni viselkedését egy komponens osztályban implementáljuk. Az entitás ezután lényegében csak a komponensek gyűjteménye lesz, feladata ezek menedzselése.

A probléma class Bjorn public: Bjorn() : velocity_(0), x_(0), y_(0) void update(world& world, Graphics& graphics); private: static const int WALK_ACCELERATION = 1; int velocity_; int x_, y_; Volume volume_; Sprite spritestand_; Sprite spritewalkleft_; Sprite spritewalkright_; ;

A probléma void Bjorn::update(World& world, Graphics& graphics) switch (Controller::getJoystickDirection()) case DIR_LEFT: velocity_ -= WALK_ACCELERATION; break; case DIR_RIGHT: velocity_ += WALK_ACCELERATION; break; x_ += velocity_; world.resolvecollision(volume_, x_, y_, velocity_); Sprite* sprite = &spritestand_; if (velocity_ < 0) sprite = &spritewalkleft_; else if (velocity_ > 0) sprite = &spritewalkright_; graphics.draw(*sprite, x_, y_);

A megoldás class GraphicsComponent public: void update(bjorn& bjorn, Graphics& graphics) Sprite* sprite = &spritestand_; if (bjorn.velocity < 0) sprite = &spritewalkleft_; else if (bjorn.velocity > 0) sprite = &spritewalkright_; graphics.draw(*sprite, bjorn.x, bjorn.y); private: Sprite spritestand_; Sprite spritewalkleft_; Sprite spritewalkright_; ;

Vigyázzunk while (!gameover) // Process AI. for (int i = 0; i < numentities; i++) entities[i]->ai()->update(); // Update physics. for (int i = 0; i < numentities; i++) entities[i]->physics()->update(); // Draw to screen. for (int i = 0; i < numentities; i++) entities[i]->render()->render(); // Other game loop machinery for timing...

Vigyázzunk while (!gameover) // Process AI. for (int i = 0; i < numentities; i++) aicomponents[i].update(); // Update physics. for (int i = 0; i < numentities; i++) physicscomponents[i].update(); // Draw to screen. for (int i = 0; i < numentities; i++) rendercomponents[i].render(); // Other game loop machinery for timing...

Vigyázzunk