Programozás I. Grafika Eseménykezelés. Programozás I. 2. gyakorlat Interakció a grafikus felületen, tagfüggvények. Surányi Márton PPKE-ITK

Hasonló dokumentumok
Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Bevezetés a programozásba 2

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

Bevezetés a programozásba Előadás: Tagfüggvények, osztály, objektum

Bevezetés a programozásba I.

Ugráló gomb oktatási segédlet Ugráló gomb

1. Alapok. Programozás II

Bevezetés a programozásba Előadás: A const

BME MOGI Gépészeti informatika 14.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

3. Osztályok II. Programozás II

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Programozás II gyakorlat. 8. Operátor túlterhelés

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

Informatika terméktervezőknek

C++ Standard Template Library (STL)

Programozási nyelvek I. 5. előadás (Gregorics Tibor anyagának felhasználásával)

Delphi programozás I.

Bevezetés a programozásba I.

500. AA Megoldó Alfréd AA 500.

Bevezetés a programozásba. 11. Előadás: Esettanulmány

Számítógép és programozás 2

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

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

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Pénzügyi algoritmusok

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Algoritmizálás + kódolás C++ nyelven és Pascalban

OOP #14 (referencia-elv)

Programozás II. 2. Dr. Iványi Péter

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

Programozás alapjai 9.Gy: Struktúra 2.

Form1 Form Size 400;400 Text Mozgó kör timer1 Timer Enabled True Interval 100

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

Programozás II. 4. Dr. Iványi Péter

Osztályok. 4. gyakorlat

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

Programozás C++ -ban 2007/7

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

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

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Mérési adatgyűjtés és adatfeldolgozás 2. előadás

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Objektumorientált programozás C# nyelven

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Pénzügyi algoritmusok

503.AA Megoldo Arisztid 503.A

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

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

500. CC Megoldó Alfréd CC 500.

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

Bevezetés a programozásba I.

BME MOGI Gépészeti informatika 15.

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

VISUAL BASIC ALAPISMERETEK

1.AA MEGOLDÓ BERCI AA 1.

Objektumorientált programozás IX. Osztályok, objektumok

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

Szabadkai Műszaki Szakfőiskola. Web programozás. dr Zlatko Čović

Gyakorlati vizsgatevékenység A

Programozási technológia

A lista eleme. mutató rész. adat rész. Listaelem létrehozása. Node Deklarálás. Létrehozás. Az elemet nekünk kell bef zni a listába

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

Programozás I gyakorlat. 5. Struktúrák

Objektumok és osztályok. Az objektumorientált programozás alapjai. Rajzolás tollal, festés ecsettel. A koordinátarendszer

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

C++ programozási nyelv Konstruktorok-destruktorok

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Apple Swift kurzus 3. gyakorlat

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

Bevezetés a programozásba I.

feladat pont min elért

INFORMATIKAI ALAPISMERETEK

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

Objektumok inicializálása

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

Bevezetés a programozásba. 9. Előadás: Rekordok

Programozás C++ -ban

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

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

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

Programozási Nyelvek: C++

Programozás alapjai 8.Gy: Program struktúra

Informatika feladatmegoldó verseny. Kiss Elemér Szakkollégium február 19. Dr. Kovács Lehel István

OOP: Java 5.Gy: Osztály, referencia, konstruktor

Objektumorientált programozás C# nyelven

Grafikus felhasználói felületek, eseménykezelés

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

Maximum kiválasztás tömbben

Programozás C++ -ban 2007/4

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Bevezetés a programozásba Előadás: Fordítási egység

500.AA Megoldo Arisztid 500.A

Átírás:

Programozás I. 2. gyakorlat Interakció a grafikus felületen, tagfüggvények Surányi Márton PPKE-ITK 2013.02.25. 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

Nem csak rajzolni tudunk, hanem lehet interaktív alkalmazásokat készíteni interakció: (itt) egér, billentyűzet által beavatkozunk a program működésébe a graphics-ben események segítségével tudjuk kezelni ezeket az esemény típusa: event az event egy struct, aminek vannak adattagjai: type keycode pos_x, pos_y button time 1 / 1

event adattagjai, lehetséges értékek type: esemény típusa: ev_key, ev_mouse, ev_timer keycode: billenytűesemény esetén: billentyű azonosítója pos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciója button: egéresemény (gomb) esetén: egérgomb azonosítója: btn_left, btn_right, btn_middle, btn_wheelup, btn_wheeldown time: időzítőesemény esetén: a program indítása óta eltelt idő millisec-ben 2 / 1

event adattagjai, lehetséges értékek type: esemény típusa: ev_key, ev_mouse, ev_timer keycode: billenytűesemény esetén: billentyű azonosítója pos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciója button: egéresemény (gomb) esetén: egérgomb azonosítója: btn_left, btn_right, btn_middle, btn_wheelup, btn_wheeldown time: időzítőesemény esetén: a program indítása óta eltelt idő millisec-ben 2 / 1

event adattagjai, lehetséges értékek type: esemény típusa: ev_key, ev_mouse, ev_timer keycode: billenytűesemény esetén: billentyű azonosítója pos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciója button: egéresemény (gomb) esetén: egérgomb azonosítója: btn_left, btn_right, btn_middle, btn_wheelup, btn_wheeldown time: időzítőesemény esetén: a program indítása óta eltelt idő millisec-ben 2 / 1

event adattagjai, lehetséges értékek type: esemény típusa: ev_key, ev_mouse, ev_timer keycode: billenytűesemény esetén: billentyű azonosítója pos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciója button: egéresemény (gomb) esetén: egérgomb azonosítója: btn_left, btn_right, btn_middle, btn_wheelup, btn_wheeldown time: időzítőesemény esetén: a program indítása óta eltelt idő millisec-ben 2 / 1

event adattagjai, lehetséges értékek type: esemény típusa: ev_key, ev_mouse, ev_timer keycode: billenytűesemény esetén: billentyű azonosítója pos_x, pos_y: egérmozgatás esetén: az egérkurzor pozíciója button: egéresemény (gomb) esetén: egérgomb azonosítója: btn_left, btn_right, btn_middle, btn_wheelup, btn_wheeldown time: időzítőesemény esetén: a program indítása óta eltelt idő millisec-ben 2 / 1

Eseményciklus Az eseményciklus a grafikus alkalmazás egyik fő ciklusa. Amíg ez a ciklus fut, addig a program képes eseményeket fogadni. 3 / 1

Példa Példa: Bal egérkattintásra változtassuk meg a képernyő hátterének színét egy új, véletlenszerű színre! #include "graphics.hpp" using namespace genv; const int SX = 400; const int SY = 400; int main() { srand(time(0)); gout.open(sx, SY); 4 / 1

} event ev; while(gin >> ev) { if (ev.button == btn_left) { gout << color(rand() % 256, rand() % 256, rand() % 256) << move_to(0,0) << box(sx,sy) << refresh; } } return 0; 5 / 1

Példa: Bal egérkattintásra rajzoljunk ki egy 20x20-as sárga négyzetet az adott egérpozícióba! Az alkalmazás escape-re lépjen ki! #include "graphics.hpp" #include <algorithm> using namespace genv; const int SX = 640; const int SY = 480; int main() { gout.open(640, 480); 6 / 1

event ev; while (gin >> ev) { if (ev.button == btn_left) { gout << move_to(ev.pos_x, ev.pos_y) << color(255,255,0) << box(20,20) << refresh; } else if (ev.keycode == key_escape) { exit(0); } } } return 0; 7 / 1

Fejlesszük tovább: írjunk a doboz rajzolására, illetve a véletlen szín generálására függvényt! Valamint az enter lenyomására mentse el a képet output.bmp néven! #include "graphics.hpp" #include <algorithm> using namespace genv; void draw_box(int x, int y, color c, int size) { gout << move_to(x, y) << c << box(size, size); } color rand_color() { color ret(rand() % 256, rand() % 256, rand() % 256); return ret; } 8 / 1

int main() { gout.open(640, 480); event ev; while (gin >> ev) { if (ev.button == btn_left) { draw_box(ev.pos_x, ev.pos_y, rand_color(), (rand() % 10) + 20); gout << refresh; } else if (ev.keycode == key_escape) { exit(0); } else if (ev.keycode == key_enter) { gout.save("output.bmp"); } } return 0; } 9 / 1

Timer az időzítőt a gin.timer(int ms) függvénnyel tudjuk beállítani, és elindítani Paraméterként millisec-ben kell megadni a periódust, így minden megadott ms-ben generál egy időzítő eseményt kikapcsolni így lehet: gin.timer(0) időzítőesemény esetén az event type mezője az ev_timer értéket veszi föl a time mező pedig az addig eltelt ezredmásodpercek számát 10 / 1

Timer az időzítőt a gin.timer(int ms) függvénnyel tudjuk beállítani, és elindítani Paraméterként millisec-ben kell megadni a periódust, így minden megadott ms-ben generál egy időzítő eseményt kikapcsolni így lehet: gin.timer(0) időzítőesemény esetén az event type mezője az ev_timer értéket veszi föl a time mező pedig az addig eltelt ezredmásodpercek számát 10 / 1

Timer az időzítőt a gin.timer(int ms) függvénnyel tudjuk beállítani, és elindítani Paraméterként millisec-ben kell megadni a periódust, így minden megadott ms-ben generál egy időzítő eseményt kikapcsolni így lehet: gin.timer(0) időzítőesemény esetén az event type mezője az ev_timer értéket veszi föl a time mező pedig az addig eltelt ezredmásodpercek számát 10 / 1

Timer az időzítőt a gin.timer(int ms) függvénnyel tudjuk beállítani, és elindítani Paraméterként millisec-ben kell megadni a periódust, így minden megadott ms-ben generál egy időzítő eseményt kikapcsolni így lehet: gin.timer(0) időzítőesemény esetén az event type mezője az ev_timer értéket veszi föl a time mező pedig az addig eltelt ezredmásodpercek számát 10 / 1

Timer az időzítőt a gin.timer(int ms) függvénnyel tudjuk beállítani, és elindítani Paraméterként millisec-ben kell megadni a periódust, így minden megadott ms-ben generál egy időzítő eseményt kikapcsolni így lehet: gin.timer(0) időzítőesemény esetén az event type mezője az ev_timer értéket veszi föl a time mező pedig az addig eltelt ezredmásodpercek számát 10 / 1

#include "graphics.hpp" #include <algorithm> #include <sstream> using namespace genv; const int SX = 640; const int SY = 480; int main() { gout.open(sx, SY); event ev; gin.timer(100); std::stringstream ss; 11 / 1

} while (gin >> ev) { if (ev.type == ev_timer) { ss << "Eltelt ezredmasodpercek szama: " << ev.time; gout << move_to(0,0) << color(0,0,0) << box(sx,sy); gout << move_to(20,20) << color(255,255,0) << text( ss.str() ) ss.str(""); } else if (ev.keycode == key_escape) { exit(0); } } return 0; 12 / 1

Feladatok 2-1) Random irányba mozogjanak a dobozok! 2-2) Space leütésére változzon meg a színük! 2-3) Ha egy dobozra rákattintunk, tűnjön el! 13 / 1

Tagfüggvények a draw függvény a típushoz tartozik, vagyis egy művelete a Boxnak. A következő lépésben a függvényeket beemeljük tagfüggvénnyé, ezzel egy lépést tettünk a Box típus egységbezárásáért (enkapszuláció) 14 / 1

Tagfüggvények a draw függvény a típushoz tartozik, vagyis egy művelete a Boxnak. A következő lépésben a függvényeket beemeljük tagfüggvénnyé, ezzel egy lépést tettünk a Box típus egységbezárásáért (enkapszuláció) 14 / 1

Tagfüggvények a tagfüggvények úgyanúgy függvények látják, és módosíthatják a struct értékeit, ezért nem kell külön paraméterben átadni őket tagfüggvény hívása: [változónév].[tagfüggvény neve]() 15 / 1

Tagfüggvények a tagfüggvények úgyanúgy függvények látják, és módosíthatják a struct értékeit, ezért nem kell külön paraméterben átadni őket tagfüggvény hívása: [változónév].[tagfüggvény neve]() 15 / 1

Tagfüggvények a tagfüggvények úgyanúgy függvények látják, és módosíthatják a struct értékeit, ezért nem kell külön paraméterben átadni őket tagfüggvény hívása: [változónév].[tagfüggvény neve]() 15 / 1

struct Car { string name; int fuel; // current amount of fuel (liter) double consumption; // liter / 100km void go( int km ) { fuel -= (consumption / 100) * km; } void refuel( int liter ) { fuel += liter; } };... Car c; c.name = "Toyota"; c.fuel = 0; c.consumption = 5.5; c.refuel(10); c.go(2); 16 / 1

Konstruktor a konstruktor is egy tagfüggvény, ami a példányosításkor (deklaráláskor) fut le ha nem írunk egy struct-nak konstruktort, akkor fordításkor létrejön egy üres (és paraméternélküli) FONTOS! Ha megírunk egy konstruktort, akkor nem jön létre paraméternélküli! pl. az int-nek is van konstruktora: int a(10); Ekkor a kezdőértéke 10 lesz. 17 / 1

Konstruktor a konstruktor is egy tagfüggvény, ami a példányosításkor (deklaráláskor) fut le ha nem írunk egy struct-nak konstruktort, akkor fordításkor létrejön egy üres (és paraméternélküli) FONTOS! Ha megírunk egy konstruktort, akkor nem jön létre paraméternélküli! pl. az int-nek is van konstruktora: int a(10); Ekkor a kezdőértéke 10 lesz. 17 / 1

Konstruktor a konstruktor is egy tagfüggvény, ami a példányosításkor (deklaráláskor) fut le ha nem írunk egy struct-nak konstruktort, akkor fordításkor létrejön egy üres (és paraméternélküli) FONTOS! Ha megírunk egy konstruktort, akkor nem jön létre paraméternélküli! pl. az int-nek is van konstruktora: int a(10); Ekkor a kezdőértéke 10 lesz. 17 / 1

Konstruktor a konstruktor is egy tagfüggvény, ami a példányosításkor (deklaráláskor) fut le ha nem írunk egy struct-nak konstruktort, akkor fordításkor létrejön egy üres (és paraméternélküli) FONTOS! Ha megírunk egy konstruktort, akkor nem jön létre paraméternélküli! pl. az int-nek is van konstruktora: int a(10); Ekkor a kezdőértéke 10 lesz. 17 / 1

Konstruktor a konstruktor is egy tagfüggvény, ami a példányosításkor (deklaráláskor) fut le ha nem írunk egy struct-nak konstruktort, akkor fordításkor létrejön egy üres (és paraméternélküli) FONTOS! Ha megírunk egy konstruktort, akkor nem jön létre paraméternélküli! pl. az int-nek is van konstruktora: int a(10); Ekkor a kezdőértéke 10 lesz. 17 / 1

Konstruktor a konstruktor is egy tagfüggvény, ami a példányosításkor (deklaráláskor) fut le ha nem írunk egy struct-nak konstruktort, akkor fordításkor létrejön egy üres (és paraméternélküli) FONTOS! Ha megírunk egy konstruktort, akkor nem jön létre paraméternélküli! pl. az int-nek is van konstruktora: int a(10); Ekkor a kezdőértéke 10 lesz. 17 / 1

Konstruktor példa struct Person { std::string name; int age; Person(std::string name_, int age_) : name(name_), age(age_) {} }; 18 / 1

Konstruktorok FONTOS! A konstruktornak nincs visszatérési értéke (azt sem kell elé írni, hogy void)! neve mindig meg kell, hogy egyezzen a struct nevével! konstruktort nem lehet külön meghívni, a példányosításkor fut le a konstruktor rövidítése: ctor (ha rákerestek így (is) érdemes) 19 / 1

Konstruktorok FONTOS! A konstruktornak nincs visszatérési értéke (azt sem kell elé írni, hogy void)! neve mindig meg kell, hogy egyezzen a struct nevével! konstruktort nem lehet külön meghívni, a példányosításkor fut le a konstruktor rövidítése: ctor (ha rákerestek így (is) érdemes) 19 / 1

Konstruktorok FONTOS! A konstruktornak nincs visszatérési értéke (azt sem kell elé írni, hogy void)! neve mindig meg kell, hogy egyezzen a struct nevével! konstruktort nem lehet külön meghívni, a példányosításkor fut le a konstruktor rövidítése: ctor (ha rákerestek így (is) érdemes) 19 / 1

Feladatok 2-2-a) Hópihe: egy hópihe egy fehér pixel. Legyen 100 darab hópihe, amik konstans sebességgel "esnek" le. Ha alul kimegy, felül jöjjön be! 2-2-b) Jobbra-balra imbolyogjanak a pihék! (ha oldalt kimegy, a másik oldalon jöjjön be!) 2-2-c) Legyen mélysége: a közelebb álló pihék legyenek nagyobbak és gyorsabban hulljanak! 20 / 1

Feladatok (folyt.) 2-3-a) Egy random pozícióba lerakott doboz kövesse az egeret. 2-3-b) Több doboz is legyen, mindegyik az egeret kövesse! 21 / 1

Házi feladat A honlapon elérhető (lesz). 22 / 1