Bevezetés a programozásba 2

Hasonló dokumentumok
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

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

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

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

Space Invaders Dokumenta cio

Már megismert fogalmak áttekintése

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

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

Virtuális függvények (late binding)

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Algoritmizálás, adatmodellezés tanítása 6. előadás

Webprogramozás szakkör

Bevezetés a Python programozási nyelvbe

Delphi programozás I.

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

VI. Robotprogramozó Országos Csapatverseny évfolyam

Scratch bevezető foglalkozás Scratch bevezető foglalkozás

Angolul: Extreme Programming, röviden: XP Agilis módszertan. Más módszertanok bevált technikáinak extrém módú (nagyon jó) használata

Bevezetés a programozásba előadás: Öröklődés

OOP. Alapelvek Elek Tibor

Programozás II gyakorlat. 6. Polimorfizmus

Programozási nyelvek 1. előadás

OO rendszerek jellemzői

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Vezérlési szerkezetek Vezérlési szerkezetek: feltételes elágazás és ciklusok

8. SZERSZÁMGÉP ANIMÁCIÓ

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

Modellező eszközök, kódgenerálás

Szoftver-ergonómiára vonatkozó szabvány, avagy ISO 9241

Programozás alapjai 5. gyakorlat Vezérlési szerkezetek egymásba ágyazása

2. Beadandó feladat dokumentáció

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

Programozás I. gyakorlat

Tervminták a valósidejű gyakorlatban

BASH script programozás II. Vezérlési szerkezetek

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

2. Beadandó feladat dokumentáció

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

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

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

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

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

TM Szervó vezérlő

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

libgdx alapú program létrehozása, kép importálása, mozgatása libgdx alapok Android játékfejlesztés Soós András

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

6000 Kecskemét Nyíri út 11. Telefon: 76/ ; Fax: 76/ Gyakorló feladatok

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

Programok értelmezése

Szélkövetés: Ehhez az üzemmódhoz a PR3-as paraméter értékét 0-ra kell állítani.

Flex tutorial. Dévai Gergely

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

1. Alapok. Programozás II

A tervfeladat sorszáma: 1 A tervfeladat címe: ALU egység 8 regiszterrel és 8 utasítással

Programozási segédlet

DebitTray program Leírás

Függvények ábrázolása

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

Animáció készítése Scratch-ben

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Navigáci. stervezés. Algoritmusok és alkalmazásaik. Osváth Róbert Sorbán Sámuel

Programozási módszertan

assume CS:Code, DS:Data, SS:Stack Start: xor di, di mov si, 1 Torles int 10h mov dl, 40 xor bh, bh mov ah, 02h Kesleltet int 16h

Programtervezés. Dr. Iványi Péter

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

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

Objektumelvű programozás

Podoski Péter és Zabb László

A kód legyen megfelelően kommentezett. A főprogram kódfájlja a hallgatói adataival, illetve a program kezelésével kapcsolatos leírással kezdődjön.

és az instanceof operátor

Bevezetés a programozásba előadás: Alapvető programtervezési elvek

Microsoft Excel 2010

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

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Programozási nyelvek (ADA)

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Rendszermodellezés: házi feladat bemutatás

C programozási nyelv

AWK programozás, minták, vezérlési szerkezetek

Programozási nyelvek Java

Alprogramok, paraméterátadás

ContractTray program Leírás

6. fejezet: Ciklusok

BME MOGI Gépészeti informatika 15.

Szimuláció RICHARD M. KARP és AVI WIGDERSON. (Készítette: Domoszlai László)

8.3. AZ ASIC TESZTELÉSE

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

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

3. Osztályok II. Programozás II

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

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

Miután fel tudott jutni egy 209-es vezérállásába, akkor realizálódott benne a műszerek és kijelzők eltérő mivolta. Ekkor jutott eszébe egy kérdés: Mié

XTB TŐZSDEVERSENY 2012

Kézikönyv. Láthatóság kezelése a grafikus maszkszerkesztőben

A Microsoft OFFICE. EXCEL táblázatkezelő. program alapjai as verzió használatával

Oszkar.com Android alkalmazás v1.2

1. Jelölje meg az összes igaz állítást a következők közül!

van neve lehetnek bemeneti paraméterei (argumentumai) lehet visszatérési értéke a függvényt úgy használjuk, hogy meghívjuk

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Amortizációs költségelemzés

Átírás:

Bevezetés a programozásba 2 4. Előadás: Esettanulmány http://digitus.itk.ppke.hu/~flugi/

Pong játék Játékleírás: adott egy pálya, alul és fölül fallal, és két játékoshoz tartozó egy-egy ütő két oldalon. Az egyik játékos billentyűzettel, a másik egérrel vezérli a saját platformját. A pályán pattog egy labda, ami visszapattan a falakról és a ütőkről Akinek az oldalán kimegy a labda, veszít, és a másik játékos pontot szerez

Pong játék A játékszabály mellett fontos a program elvárt működésének váza is Címképernyő Pont számláló Tíz pontnál game over, újrakezdési lehetőséggel Az egérrel vezérlő játékos ne legyen előnyben A grafikus tartalommal most nem fogunk foglalkozni

Reprezentáció Az első tennivaló: összeszedni, mik a programban előforduló, egymástól különböző állapotok, és mi kell a megkülönböztetésükhöz Az ütők helyzete A labda helyzete A pontszámok Melyik programszakaszban vagyunk (címkép, játék, gameover)?

Típusok Lehetséges típus kombinációk labda, ütő a main() majd tartalmaz két példányt az ütő típusból, és egy labdát pálya a pálya structban számokkal a labda és az ütők helyzete labda, ütő, pálya a pálya structban egy labda és két ütő típus is mező Egyelőre ízlés szerint választunk

A munka folyamata Inkrementális programozás Mindig egy kis új kódot teszünk a programhoz Előnyök: folyamatos tesztelhetőség Hiba esetén könnyű reprodukálhatóság behatárolt okozó kódrészlet, ami miatt a hibás kód könnyen megtalálható Nem mindig a friss kód hibás, de van köze a friss hibajelenséghez

Első változat Különböztessük meg a játékállapotokat egymástól Írjunk programot, ami három állapot között váltogat Legyen mindig szóköz billentyűvel váltás

Legegyszerűbb állapotátmenet implementáció const const int int SX SX = 640; 640; const const int int SY SY = 480; 480; // //...... int int main() main() { gout.open(sx, gout.open(sx, SY); SY); int int state=1; state=1; // //...... while while (!kilep (!kilep && && gin gin >> >> ev) ev) { if if (state (state == == 1) 1) { cimkeprajzol(); cimkeprajzol(); gout gout << << refresh; refresh; if if (ev.keycode (ev.keycode == == key_space) key_space) state=2; state=2; } else else if if (state (state == == 2) 2) { // //......

A lényeg: a játéklogika végiggondolása Cél: folyamatos mozgás a labdával, a nyilakkal és az egérrel, de egyforma sebességgel Eszközök: melyik gombot nyomták le melyik gombot engedték el hová mozdult az egér időzítő A labda akkor is mozog, ha senki nem csinál semmit, tehát időzítőre szükség van

Néhány rossz megoldás Amikor a gombot megnyomják, feljebb vagy lejjebb teszem a billentyűs játékost, az egerest meg mindig olyan magasra, ahol az egér éppen van Ez súlyosan hátrányos megvalósítás a billentyűs játékossal szemben lassan mozog csapkodnia kell a gombot

Kicsit jobb megoldás Amíg a gombot nyomják, feljebb vagy lejjebb teszem a billentyűs játékost, az egerest meg mindig olyan magasra, ahol az egér éppen van Ehhez már dolgozni kell, a billentyűzet állapotát is számon kell tartani, nem elég magára a billentyűzet eseményre figyelni Még mindig gyorsabb az egeres játékos ütője

Egy igazságos megoldás Mindkét játékosnak egyforma mértékben változik az ütőjének a helyzete, a billentyűsé a billentyűzet állapotának függvényében, az egeresé pedig attól függően, hogy az egér feljebb, vagy lejjebb van-e az ütőnél Így hiába rántja meg az egeret az egyik játékos, az időzítő néhány körére lesz szükség, hogy az ütő oda is érjen

Második verzió Amikor játék állapot van, a háttér elé úgy mozgatott ütőket rajzoljunk, ahogy az előbbi gondolatmenetben elhatároztuk További változókra van szükség: billentyűzet állapota, egér helyzete mivel nem az eseményre adott reakciókban van rájuk szükség, hanem kizárólag az időzítésben

Labda mozgatás Az ütők mellett most már a labdát is lehet mozgatni Itt az ideje érvényesíteni a mozgások korlátjait, se az ütők, se a labda ne hagyja el a pályát függőlegesen Visszapattanások kezelése kézenfekvő megoldás: a sebesség nyilvántartása

Absztrakciós szintek A választott megoldás: Palya, Uto, Labda típusok A Labda és Uto magukat kirajzolni és mozgatni képes négyszögek A Palya lefordítja a technikai inputot a játékszabályok szerinti fogalmakra Megoldástér Problématér Itt az absztrakciós szint határa, a main() felől csak a Palya létezik

Láthatóság bevezetése Kiderül funkciókról, hogy rossz helyen vannak, például a labda és az ütők ütközésének vizsgálata kétféleképpen lehet elegáns: vagy a labda számol, és az ütőket kapja paraméterül, vagy az ütők számolnak, és a labdát kapják Ha valahol túl sok egy másik típus mezőinek a használata, megfontolandó, hogy tagfüggvénybe kell tenni

Tesztelés A specifikáció szerint megkülönböztethető eseteket végigpróbáljuk fekete doboz teszt A forráskód elágazásainak és ciklusfeltételeinek ismeretében azokat az eseteket próbáljuk ki, amik más-más döntési fákat eredményeznek fehér doboz teszt Automatikus tesztprogramot futtatunk code coverage, emulációk

Értékelés Mik azok a lehetséges változások, amik miatt nagyon át kell írni a kódot? Mik azok, amik miatt nem? Meddig ér a jelenlegi kód rugalmassága? Mennyire hatékony a működés? Vannak-e felesleges refresh-ek? Mennyire bonyolult kijavítani?

Lehetséges módosítások Szép grafika nem gond, az önmagukat kirajzoló objektumok mögé berakható kép Ütő relatív pozíciójának beleszámolása a labda pályájába nem gond, egy új tagfüggvény hozzáadásával megoldható, a hívás helye egyértelmű Ütő sebességének beleszámolása a labda pályájába, csavarás a sebesség skálánk csak hármas (fel, le marad). Ehhez kicsit több kell

Refactoring Alapvetés: minden programban hibás elgondolás alapján tervezett rész Refactoring: egy program átalakítása úgy, hogy közben a funkcionalitása állandó (pl átírni a láthatóság szabályozásának használatára, vagy rekordokba szervezni az adatot) Érdemes kipróbálni, ha már megírtad a beadandót: ugyanazt a feladatot oldd meg újra Az újrakezdés sokszor irreális, ilyenkor részleges refactoringot alkalmaznak

Refactoring Specifikáció teljesülésének minél kényelmesebb ellenőrzése unit test adott használati eset végigtesztelése Átalakítási lépések mindegyikénél ellenőrzés. igen időigényes lehet, szánni kell rá időt

Lehetséges fejlesztések A háttér rajzolásához csupa azonos szignatúrájú függvényt használtunk. Ezt akár egy függvénymutató típusú változóra is cserélhetnénk. Ugyanezt a szituációt kezelhetjük majd öröklődéssel is, amiről később lesz szó. A mezők jelentését felülbírálhatjuk, látható, hogy a példában a magasságot tartalmazó mezőt zömmel felezzük használatkor, tehát ha eleve a felét tároljuk, kevesebb műveletet kell végezni