9. Játék a véletlennel



Hasonló dokumentumok
Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása

I. Objektumorientált programozás

3. Ezután a jobb oldali képernyő részen megjelenik az adatbázistábla, melynek először a rövid nevét adjuk meg, pl.: demo_tabla

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

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

C programozási nyelv Pointerek, tömbök, pointer aritmetika

1. Olvassuk be két pont koordinátáit: (x1, y1) és (x2, y2). Határozzuk meg a két pont távolságát és nyomtassuk ki.

8. gyakorlat Pointerek, dinamikus memóriakezelés

Egyszerű példaprogramok gyakorláshoz

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

Occam 1. Készítette: Szabó Éva

Programozás alapjai gyakorlat. 2. gyakorlat C alapok

Néhány kockadobással kapcsolatos feladat 1 P 6

Adatbázis és szoftverfejlesztés elmélet

A Novitax ügyviteli programrendszer első telepítése

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

A következő táblázat tartalmazza az egyes fajták jellemzőit.

A Windows az összetartozó adatokat (fájlokat) mappákban (könyvtárakban) tárolja. A mappák egymásba ágyazottak.

Programozási technológia I. 1. beadandó feladatsor

Eljárások, függvények

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

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS

Eljárások és függvények

Erdő generálása a BVEPreproc programmal

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

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

RESIDENT EVIL CODENAME: NIK

Vezérlési szerkezetek

7. fejezet: Mutatók és tömbök

Megoldások 4. osztály

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Kiegészítő előadás. Vizsgabemutató VBA. Dr. Kallós Gábor, Fehérvári Arnold, Pusztai Pál Krankovits Melinda. Széchenyi István Egyetem

Információs technológiák 2. Gy: CSS, JS alapok

Függvény pointer. Feladat: Egy tömbben soroljunk fel függvényeket, és hívjuk meg valahányszor.

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

A JÁTÉK CÉLJA A játékosok célja megszabadulni az összes kockájuktól. A győztes az lesz, akinek ez elsőként sikerül.

BME MOGI Gépészeti informatika 13.

Webprogramozás szakkör

3. Osztályok II. Programozás II

Osztályok. 4. gyakorlat


Próbaérettségi 2004 MATEMATIKA. PRÓBAÉRETTSÉGI május EMELT SZINT. 240 perc

Az egyenes egyenlete: 2 pont. Az összevont alak: 1 pont. Melyik ábrán látható e függvény grafikonjának egy részlete?

TAJ MAHAL SZABÁLY ÁTTEKINTÉS/ ÖSSZEFOGLALÓ

1.1.1 Dátum és idő függvények

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.

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Ablakok. Fájl- és mappaműveletek. Paint

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

OLVASÁS FEJLESZTÉSE 6.HÉT PROGRAMJA

Programozás I gyakorlat

Gyakorló 9. feladat megoldási útmutató

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Interaktív alkalmazások készítése Scratch-ben

Véletlenszám generátorok és tesztelésük. Tossenberger Tamás

Programozási nyelvek II. JAVA

Szerző. Varga Péter ETR azonosító: VAPQAAI.ELTE cím: Név: Kurzuskód:

Feladatok és megoldások az 1. sorozat Építőkari Matematika A3

A táblázat első sorában a feliratok vannak, ezért az x, y koordinátákat a második sortól kezdve az egymillió-egyedik sorig fogjuk elhelyezni.

Private Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click Dim tipp As Integer

BME MOGI Gépészeti informatika 7.

Programozási alapismeretek 4.

Programozás alapjai 2.Gy: A C nyelv alapjai P R O

PwC EKAER Tool felhasználói leírás május

FEGYVERNEKI SÁNDOR, Valószínűség-sZÁMÍTÁs És MATEMATIKAI

Programozás alapjai. 10. előadás

ReszlAd fájl, kitöltési útmutató:

1. Origin telepítése. A telepítő első képernyőjén kattintson a Next gombra:

3 A C programozási nyelv szintaktikai egységei

Makrók használata az Excelben - Makróhibák kezelése, biztonságos jelszavak generálása

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Készítette: Nagy Tibor István

Számelmélet Megoldások

Web-technológia PHP-vel

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

Java II. I A Java programozási nyelv alapelemei

A Cobra Sprint telepítése CobraContoLight felhasználók számára

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

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

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

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

1. gyakorlat

HVK Adminisztrátori használati útmutató

Tájékoztató. Használható segédeszköz: -

OOP. Alapelvek Elek Tibor

A PROGRAMOZÁS ALAPJAI 3. Készítette: Vénné Meskó Katalin

Vihar 2.0 rendszer Felhasználói kézikönyv

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

Dokumentum létrehozása/módosítása a portálon:

Választó lekérdezés létrehozása

OOP #14 (referencia-elv)

Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok V 1.0 ÓE-NIK-AII,

Mire jó az önéletrajz? Az önéletrajz egy olyan dokumentum, ami bemutat minket a munkaadó számára.

II. Mérés SZÉCHENYI ISTVÁN EGYETEM GYŐR TÁVKÖZLÉSI TANSZÉK

Rendszerterv. Makoviczki András. Neptun: JJ26AR

openbve járműkészítés Leírás az openbve-hez kapcsolódó extensions.cfg fájl elkészítéséhez

PLC Versenyfeladat. XIV. Országos Irányítástechnikai Programozó Verseny Budapest, március Összeállította az EvoPro Kft.

Tanúsítvány igénylése sportegyesületek számára

Átírás:

9. Játék a véletlennel Véletlenszámok generálása Eddigi kifejezéseink elôre meghatározott mennyiségekkel (változókkal, literálokkal) végeztek mûveleteket. Sok esetben azonban szükségünk van véletlenszerûen választott számokra. A véletlenszámok fontosak a titkosításban (kriptográfia), a játékprogramokban, továbbá a valóságos folyamatok számítógépes szimulációjánál, elemzésénél. A programok nem képesek valóban véletlen választásra, úgynevezett álvéletlen számsorozatokat hoznak létre. Kiindulnak egy alkalmasan választott kezdôértékbôl, majd a sorozat következô tagját az elôzô tag alapján számítják ki. A sorozattól elvárjuk, hogy ne legyen könnyen felismerhetô a szabályosság és az ismétlôdés az elemek között. A sorozat kezdôértékét például a számítógép rend szer - órá ja által mutatott idôbôl vagy a programozó által meg - adott számból képezik. Ez utóbbi esetben a program többszöri futtatása során mindig ugyanazt a sorozatot kapjuk, ami fôleg a program tesztelésénél fontos. Véletlenszámokat a Véletlenszám objektumosztály metódusaival képezünk. A metódusok meghívásához elôször létre kell hoznunk a Véletlenszám osztályhoz tartozó objektumot. Eddigi programjainkban már készítettünk új objektumokat. Amikor az eszközkészletbôl egy vezérlôelemet, például egy szövegdobozt helyeztünk az ûrlapra, akkor a szövegdobozosztály egy objektumát hoztuk létre. A hozzá tartozó forráskódot a fejlesztôrendszer illesztette a programba, és általában elrejtette elôlünk. A továbbiakban mi magunk deklarálunk és hozunk létre objektumokat. Érték és hivatkozás típusú változók A játékprogramok gyakran alkalmaznak véletlenszámokat Az objektumok létrehozása elôtt röviden ki kell térnünk a változónevek és a nekik megfelelô memóriaterületek kapcsolatára. A numerikus változók azt a területet szimbolizálják, ahol a változó értéke található a memóriában. Fogalmazhatunk úgy is, hogy az értéket maga a változó tartalmazza. Ezzel ellentétben az objektumokhoz kapcsolódó változók csak annak a memóriaterületnek a kezdôcímét jelzik, ahol az objektumot (tulajdonságokat, metódusokat stb.) leíró kód elhelyezkedik a memóriában. A változó nem értéket, hanem az objektumot tároló területre mutató hivatkozást (memóriacímet) tartalmaz. 60

Érték típusú változó: a változó értékét tartalmazza. Hivatkozás típusú változó: azt a címet tartalmazza, ahol a változó kódja megtalálható a memóriában. A numerikus (továbbá a karakter- és a logikai) változók az érték típushoz tartoznak, a sztringek, objektumok hivatkozás típusúak 10. A hivatkozás típusnak a késôbbiekben látjuk majd néhány következményét. Új objektum létrehozása Egy objektum létrehozása két lépésbôl áll: 1. Deklarálunk egy új, az objektumra mutató változót. A deklarációban jelezzük az objektum típusát (osztályát): VÁLTOZÓ Változónév MINT Osztály 2. Az Új operátorral létrehozzuk az objektumot, és hozzárendeljük a változóhoz: Változónév = Új Konstruktor(argumentumok) Az Új operátor után az objektumosztály egy speciális metódusa, az úgynevezett konstruktor áll. Konstruktor: egy új objektum létrehozásakor végrehajtásra kerülô metódus. A konstruktor ad kezdôértéket az objektum tulajdonságainak, és hajt végre más, a létrehozással járó tevékenységet. A konstruktor neve gyakran megegyezik az objektumosztály nevével. A konstruktornak a többi eljáráshoz hasonlóan lehetnek argumentumai. Az objektum létrehozásánál ne feledkezzünk meg az Új operátor alkalmazásáról, a konstruktor meghívásáról! Véletlenszámok választása Véletlenszámok használatához létre kell hoznunk egy új, véletlenszám-objektumot. A konstruktornak megadhatunk egy egész számot, amelybôl a program a véletlenszámsorozat kezdôértékét képezi: VÁLTOZÓ Változónév MINT Véletlenszám Változónév = Új Véletlenszám(egész szám) Ha a konstruktort argumentum beírása nélkül hívjuk meg, akkor a program véletlenszerûen választ kezdôértéket a sorozathoz. 11 Így az egyes futtatásoknál más-más számsorozatot kapunk: Változónév = Új Véletlenszám() 10 Több programozási nyelvben a sztring is érték típusú változó. 11 Egyes programozási nyelvekben ehhez végre kell hajtani egy speciális utasítást, például: randomize. 61

A véletlenszám-objektum legfontosabb metódusai: Következô() nem negatív egész véletlenszámot eredményez; Következô(max) véletlen egész szám a [0; max) intervallumból; Következô(min, max) véletlen egész szám a [min, max) intervallumból; KövetkezôTört() véletlenszám a [0; 1) intervallumból. Figyeljünk arra, hogy balról zárt, jobbról nyílt intervallumok szerepelnek az értékkészletben! A visszatérési érték lehet egyenlô az alsó határral, de kisebb, mint a felsô határ. Az egyes programozási nyelvek nem mindig rendelkeznek az objektum összes itt felsorolt metódusával. 1. gyakorlat. Írjunk programot, amely a Következô parancsgomb hatására kockadobást szimulál! (Kiír egy véletlenszerûen választott számot az [1; 6] intervallumból.) 2. gyakorlat. Írjunk programot, amellyel kockapókert lehet játszani. A kockapókerben 5 dobókockát kell egyszerre feldobni. Ha az összes kockával 6-ost dobtunk, akkor a program gratuláljon a felhasználónak! Konstansok alkalmazása A kockadobásra írt programokat könnyen átalakíthatjuk úgy, hogy tetszôleges számú oldallappal rendelkezô kockát szimuláljanak. A metódushívásban szereplô, felsô határt jelzô argumentumot azonban több utasításban kell kijavítani. A forráskódban szereplô kifejezésekbe nem célszerû literálokat írni. Ugyanaz az érték több helyen elôfordulhat, így nehézkessé válik az utólagos módosítás. A forráskód olvashatósága is nô, ha a konkrét értékek helyett beszédes elnevezéseket alkalmazunk. Az olvashatóság érthetôvé teszi a forráskódot, megkönnyíti a hibakeresést, a hibajavítást. A literálokat konstansokkal (állandókkal) helyettesíthetjük a kifejezésekben. Konstans (fordítási konstans, sztatikus konstans): névvel ellátott érték. A konstansnak megfelelô értéket (számot, karaktersorozatot stb.) a fordítóprogram a forráskódban behelyettesíti a konstans azonosítójának a helyére. A konstansok deklarációja hasonlít a változók deklarálásához: KONSTANS név MINT típus = érték A konstansok értékét literállal adjuk meg, vagy a változók kezdôértékéhez hasonlóan olyan kifejezéssel definiáljuk, melyet a fordítóprogram ki tud értékelni. Ügyeljünk arra, hogy a deklarációt kivéve konstans nem állhat egy értékadó utasítás bal oldalán! 62

A konstans értéke a futás során nem módosítható. A kifejezésekben szerepelhetnek konstansok, illetve egyetlen konstanst szintén kifejezésnek tekintünk. 3. gyakorlat. Módosítsuk az 1. gyakorlat programját! A felsô határ értékét adjuk meg konstansként! Konstansok helyett változókat is alkalmazhatnánk. A konstansok értékét azonban a fordítóprogram már a megfelelô módon kódolva behelyettesíti a kifejezésbe, így gyorsabbá, hatékonyabbá válik a program futása. Az egyes programozási nyelvek beépített konstansokkal segítik a programozó munkáját. Ilyen lehet a π sok tizedesre megadott értéke, vagy az objektumok Szöveg tulajdonságánál felhasználható Újsor sztringkonstans. A beépített konstansokat nem kell deklarálni. 4. gyakorlat. Rendelkezik-e a kiválasztott programozási nyelv a π beépített konstanssal? Ha igen, jelenítsük meg az értékét! A képek futásidejû módosítása Látványossá tehetjük a kockadobást szimuláló programjainkat, ha egy kép do boz ob jek - tum mal megjelenítjük a dobókocka megfelelô lapját. Ehhez az objektum KépHelye tulajdonságát kell módosítani. A tulajdonság értéke a képfájl elérési útja: KépdobozObjektumnév.KépHelye = "elérési út" Az elérési utat sztringkifejezésként is megadhatjuk. Használhatunk relatív vagy abszolút elérési utat. Ne feledkezzünk meg a fájl kiterjesztésérôl! Kocka.KépHelye = "Kocka" & Dobás & ".png" 5. gyakorlat. Módosítsuk az 1. és 2. gyakorlat programját úgy, hogy megjelenítse a kockákat! A képfájlokat a tankönyv forrásfájljai között találjuk. Az elérési út megadásánál ügyeljünk arra, hogy a program futása közben elérhetô legyen a képfájl! A képeket célszerû a lefordított program mappájának egy almappájába helyezni, és relatív elérési utat használni. Programozási összefoglaló: Az aktuális mappa és a felhasználó Dokumentumok mappájának elérési útja 63

Feladatok 1. Készítsünk programot, amely a Választ gombra kattintáskor kiír 5 véletlenszámot az [1; 90] intervallumból! Használhatjuk-e a programot a lottósorsolás szimulálására? 2. Készítsünk programot, amely bekér egy pozitív egész számot, majd dobást szimulál egy olyan dobókockával, melynek megadott számú lapja van! 3. Írjunk programot, amely kattintásra olyan véletlenszámot választ, melynek értéke a) 5-tel osztható egész szám az [1; 100] intervallumból; b) 0,2; 0,4; 0,6 vagy 0,8; e) 0 vagy 1; c) 1; 10; 100 vagy 1000; f) 1 vagy +1; d) a [20; 30], [50; 60] vagy [80; 90] intervallum valamelyikébe esô egész szám; 4. Készítsünk programot, amely egy véletlenszerûen választott, 4 bitbôl álló sorozatot ír ki a képernyôre! Ha mind a 4 bit 0, akkor egy üzenetablakban jelenjen meg a Semmi!, ha pedig mind a 4 bit 1-es, akkor a Szuper! üzenet! 5. Szimuláljuk a számegyenesen egy részeg ember mozgását! Az origóból kiindulva egérkattintásra véletlenszerûen lépjen egyet balra vagy jobbra! A program írja ki minden lépés után, hogy hol helyezkedik el az emberünk! Üzenetablak jelezze, ha visszaért az origóba! 6. Módosítsuk az elôzô feladatot úgy, hogy az imbolygás a koordinátasíkon menjen végbe! Egy-egy lépésnél mindkét koordináta külön-külön 1-gyel, 0-val vagy +1-gyel változzon. A program írja ki a lépések után a koordinátákat, illetve az origótól mért távolságot! 7. Készítsünk programot, mellyel Taylor vé let len sze rûen bolyong a képernyôn az ablak közepétôl indulva! A képfájlt a forrásfájlok között találjuk. Egy címkén jelezzük folyamatosan az indulási helytôl mért távolságát! 8. Készítsünk programot, mellyel Taylor és Mary vé let - len sze rûen bolyong a képernyôn! 9. Írjunk programot, amely négy részeg tengerészt jelenít meg egy szigeten! A szigetet egy zöld négyzet jelképezze a kék hátterû ablak közepén. A tengerészek véletlenszerûen bolyongjanak. A fürgébbek gyakran, de kicsit lépjenek, a lomhábbak ritkábban, de nagyobbat. A tengerészek ne menjenek bele a kék vízbe! 10. Készítsünk programot, amely két dobókockával dob, majd kiírja a kockák által mutatott számok összegét a képernyôre! Jelenítsük meg a dobókockákat is. 11. Írjunk programot, amely szimulálja a kockadobást! A program egy bizonyos ideig jelenítse meg egymás után egy kocka véletlenszerûen választott lapjait, majd hagyja meg az utoljára választott lapot. 12. Jelenítsünk meg a képernyôn egy kártyalapot, amely 2 másodpercenként vé let len - sze rûen megváltozik egy másik lapra! A kártyákat a forrásfájlok Kártya mappájában találjuk. 64

13. Írjunk játékprogramot! A játékos véletlenszerûen húz egy lapot a kártyacsomagból, majd visszateszi, és a teljes csomagból húz megint egy lapot. Értékeljük a húzott lapokat a következô pontozással! Mind a kétszer ugyanaz a lap: 30 pont Két különbözô színû, de egyforma figurájú lap: 15 pont Két egyforma színû, de különbözô figurájú lap: 5 pont Két különbözô színû és eltérô figurájú lap: 1 pont 14. Készítsük el a következô játékprogramot! Kezdetben 100 ponttal rendelkezünk. A programnak egy szövegdobozban ajánljunk fel belôle meghatározott mennyiséget. A program ezután véletlenszerûen eldönti, hogy nyertünk vagy vesztettünk ennyi pontot. A képernyôn jelenjen meg pontjaink alakulása. Üzenetablak jelezze, ha elfogytak a pontjaink! 15. Rendezzünk egérversenyt! Jelenítsünk meg az ablakban három egeret, melyek a Start gombra kattintáskor elindulnak balról jobbra, véletlenszerûen változtatva a sebességüket. Az nyer, amelyik elôször éri el az ablak jobb szélét. Egérverseny a képernyôn Készítsünk programot a következô játékokhoz! A program kérje be a játékos lépését, majd lépjen véletlenszerûen, és jelenítse meg a játék állását! Üzenetablakban jelezzük a program végét és a nyertest! Melyik játéknál rendelkezünk biztosan nyerô stratégiával? Függ-e attól, hogy ki kezdi a játékot? Keressünk könyvekben vagy az interneten választ a kérdésekre! 16. Egy százszorszépnek 38 szirma van. Felváltva letépjük egy vagy két szirmát. Az nyer, akinek az utolsó szirom jut. Páratlan számú sziromból kiindulva is játsszunk! 65