l' A programazás alapjai
9 . J á t é ka v é l e tl en n e ! Vé|etlenszámok genená|ása Eddigi kifejezéseinkelőre meghatározott mennyiségekkel (változókkal, literálokkal) végeztek műveleteket. Sok esetben azonban szükségünkvan véletlenszerűenváIasz. tott számokra.A véletlenszámokfontosak a titkosításban (kriptográfia), a játékprogramokban,továbbá a valóságos folyamatok szárnít.ógép es szimulác ió j ánál, elemzésénél. A programok nem képesekvalóban véletlen váIasztás. ra, úgynevezettálvéletlen számsorozatokathoznak létre. K i indulnak egy alkalmasan választott kezáő éÍté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 felis. merhető a szabályosságésaz ismétlődésaz elemek kozott. A sorozat kezdőértékétpéldaul a számítógéprendszer&ája áItaI mutatott időből vagy a programozó által megadott számbólképezik. Ez utóbbi esetben a program több. A játékprogramok gyakra n szöri futtatása során mindig ugyanazt a sorozatot kapjuk, alkalmazna k véletlenszá m o kar ami főleg a program tesztelésénél fontos. VéletlenszámokataVéIetlenszőmobjektumosztály metódusaival képeztink.A metódusok meghívásáhozelőszöt létrekellhoznunk aVéletlenszámosztályhoztaÍtozőob1ektumot. Eddigi programjainkban már készítettünkúj objektumokat. Amikot az eszkilzkész. letből egy vezérlőelemet,példaul egy szovegdobozthelyeztink az űrlapra, akkor a szövegdobozosztá|y egy objektumát hoztuk létre. A hozzá tartozó forráskódot a fejlesz. tőrendszer illesztette a programba,ésáltalában elrejtette előlünk. A továbbiakban mi magunk deklarálunk éshozunk létreobiektumokat.
Énték és hivatkozástípusúvá|tozik Az objektumok létrehozásaelő:r' 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 szim. bolizal1ak,ahola váItozó értéketalálható a memóriában. Fogalmazhatunkúgyis, hogy az értéketmaga a váItozó tattalmazza. Ezzel ellentétben az objektumokhoz kapcsolódó váItozók csak annak a memóriaterületnek a kezdőcímétjelzik, ahol az objektumot (tulajdonságokat, metódusokat stb.) leíró kód elhelyezkedik a memóriában. A váItoző nem,,értéket'',hanem az objektumot tároló területre mutató hivatkozást (memóriací. met) tartalmaz.
60
l' A programozás
alapjai
Értéktípusú vá|tozőz avá|rczó értékéttafta|mazza' Hivatkozás típusú vá|tozóz azt a címet Larta|mazza,ahol a vá|toző kódja megtalálható a memóriában. A numerikus (továbbá a karakter. ésa logikai) vá|t.ozókaz étt'ék típushoztartoznak' a sztringek,objektumok hivatkozás típusúaklo'A hivatkozás típusnak a későbbiekben lat1uk majd néhány következm ényét..
|étrehozása Ú1onjercum Egy objektum létrehozásakét lépésbőláll: 1. Deklarálunk egy új, az objektumra mutató váItozőt. A deklarációban je|ezzik az obj ektum típusát (osztáIyát) : VÁLToZT VáltozónévMINT osztály Z' AzÚj operátorrallétrehozzukaz obiektumot, éshozzárendeljtikavá|tozőhoz: Változónév = Ú) Ko nstruktor (argumentum ok) Az Úi operátor után az objektumosztáIy egy speciális metódusa, az ú,gyneYezett. konstruktor á1l. Konstruktor: egy új objektum létrehozásakor végrehajtásrakerülő metódus. A konstruktorad kezdőértéket az objektumtulajdonságainak,éshajt végremás' a járó tevékenységet. létrehozással A konstruktor neve gyakran megegyezikaz objektumosltálrynevével.A konstruktornak a tobbi eljáráshoz hasonlóan lehetnek argumentumai.Az objektum létrehozásánál ne feledkezzünkmeg azÚj operátoralkalmazásátó|,a konstruktor meghívásáról!
választása Vé|etlenszámok Véletlenszámok haszná|atához létre kell hoznunk egy új, véletlenszám.objektumot. A konstruktornak megadhatunk egy egészszámot, amelyből a pfogram a véletlenszámképezi: sorozatkezdőértékét VÁLToZT VáltozónévM INT Vélet|enszám Változónév= Uj Vé|et|enszám(egész szám) Ha a konstruktort argumentum beírása nélktil hívjuk meg, akkor a pfogram Igy az egyesfuttatásoknál más-más véletlenszerűenválaszt kezdőértéketa sorozathoz.11 számsorozatotkapunkl Változónév= Úi Vélet|enszám()
L0 Több ptogramozásí nyelvben a sztÍing is értéktípusúvá|tozó. 11 Egyes programozási nyelvekben ehhez végrekell hajtani egy speciális utasítást, például: randomixe.
6T
l' A programozás alapjai A véletlenszám-objektumlegfontosabbmetódusai: nem negatívegészvéletlenszámoteredményez; Következő() véletlen egészszáma|0; max) intervallumból; Következő(max) véletlenegészszáma|min,max) intervallumból; Következő(min.max) véletlenszáma [0; 1) intervallumból' KövetkezőTört() Figyeljtink arra, hogy balról zárt, jobbról nyílt intervallumok szerepelnekaz érték. értéklehet egyenlő az alső határral, de kisebb, mint a felső készletbenlA visszatérési határ. Az egyes programozásinyelvek nem mindig rendelkeznek az objektum összes itt fel. sorolt metódusával.
E E
1. gyakorlat. Írjunk progÍamot'amely aKöq'letkezőpaÍancsgombhatására koc. választott számot az [1; 6] interkadobást szimulál! (Kiír egy véletlenszerííen vallumbó1.) 2, gyakor|at.Írjunk programot' amellyel kockapókert lehet játszani. A kockapókerben 5 dobókockát kell egyszerrefeldobni. Ha az összes kockával 6.ost dobtunk, akkor a proglam gratuláljon a felhasználónak!
KonstansokaIkaImaZása A kockadobásra írt programokat könnyen átala. kíthatjuk úgy,hogy tetszőlegesszámúoldallappal rendelkező,,kockát'' szimuláljanak. A metódushí. vásban szereplő, felső határt je\ző argumentumot azonban több utasításbankellkijavítani. A forráskódban szereplő kifejezésekbe nem célszerű literálokat írni. Ugyanaz az értéktöbb helyen előválik az utólagos módosífordulhat, ígynehézkessé tás' A forráskód olvashatósága is nő, ha a konkrét értékekhelyett beszédeselnevezéseketalkalmazunk. Az olvashatósás érthetővéteszi a forráskódot, megkönnyíti a hibakeresést,a hi. bajavítást. A literálokat konstansokkal (állandókkal) helyettesíthetjüka kiíejezésekben'
:T :[Til:;;$H::.'d* {*:: i*íT***:*:trf; ffiitrl
Konstans (fordításikonstans, Sztatikuskonstans): névvel ellátott érték.A kons-
A konstansok deklarációja hasonlít a váItozók deklarálásához: KoNSTANS névMINT tÍpus= érték hason. literállal adjuk meg, vagy a változók kezdőértékéhez A konstansok értékét tud értékelni. Ügyeljrink ki a fordítóprogram melyet lóan olyan kifejezésseldefiniáliuk, arra, hogy a deklarációt kivéve konstans nem állhat egy értékadóutasításbal oldalán!
62
l, A programozás alapjai A konstans értékea futás során nem módosítható. A kifejezésekbenszerepelhetnek konstansok, illetve egyetlen konstanst szinténkifejezésnektekintünk. ad. 3. gyakorlat. Módosítsuk az 1. gyakorlat programját! A felső határ értékét juk meg konstansként! azonban a Konstansok helyett változókat is alkalmazhatnánk. A konstansok értékét fordítóprogrammár a megfelelő módon kódolva behelyettesítia kifejezésbe,így gyor. sabbá, hatékonyabbavalik a program futása' Az egyes programozásinyelvek beépítettkonstansokkal segítika progÍamozómun. káját. Ilyen lehet an sok tizedesremegadott értéke,vagy az objektumok Sxövegtulajdonságánál felhasználható Ujsor sztringkonstans.A beépítettkonstansokat nem kell deklarálni. 4. gyakorlat. Rendelkezik.e a kiválasztott programozási nyelv a n beépített konstanssal?Ha igen, jelenítsük meg az értékétl
A képekfutásidejűmidosítása Látványossá tehetjük a kockadobást szimuláló programjainkat,ha egy képdobozobjek. fummal megjelenítjüka dobókocka megfelelő |apját. Ehhez az objektum KépHelyetu. lajdonságát kell módosítani.A tulajdonság értékea képfáj1elérésiútjal =,,elérési Út'' Képdobozobjektumnév.KépHe|ye Az elérésiutat Sztringkifejezésként is megadhatjuk.Használhatunk relatív vagy ab. szolútelérésiutat. Ne feledkezzünkmeg a fáj1kiterjesztéséről! ='.Kocka''& Dobás&','png.' Kocka.KépHe|ye 5. gyakorlat. Módosítsuk az I. é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.
t- D"bó'l
ffimffiffiffi
Az elérésiút megadásánál rigyeljtink arra' hogy a program íutásakozben elérhető legyen a képfáil! A képeket célszerűa lefordított program mappájának egy almappájába he. lyezni, ésrelatív elérésiutat használni.
Programozásiösszefoglaló: Az aktuális mappa ésa felhasznáIó Dokumentumok mappájának elérésiútja
63
I' A programozás alapjai Feladatok 1. Készítsünkprogramot,amely aVálaszt gombra kattintáskor kiir 5 véletlenszámotaz [190] interva11umbó1!Használhatjuk-e a programot a lottósorso1ásszimulá1ására? 2. Készítsünkprogramot, amely bekéregy pozitív egészszámot, majd dobást szimulál !8Y olyan dobókockával, melynek megadott számúlapja van! 3.Irjunk programot' amely kattintásra olyan véletlenszámotváIaszt',melynek értéke a) 5.te| osztható egészszámaz [1; 100] intervallumból; b)0,2;0,4;0,6vagy0,8; e) 0 vagy I; c) 1; 10;100vagy1000; f) -I vagy +I; d) a120;30], [50;60] vagy [80;90] intervallum valamelyikébeeső egészszám; 4. Készítsünkprogramot, amely egy véletlenszerűenválasztott, 4 bitből á1ló sorozatot ír ki a kópernyőre! Ha mind a 4 bit 0, a.kkor 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észegember mozgását|,Az origóból kiindulva egérkattintásravéletlenszerűenlépjen egyet baha vagy jobbra! A program írja ki minden lépésután, hogy hol helyezkedik el az emberünk! Üzenetablak jelezze,ha visszaértaz oigóba! 6. Módosítsuk az előző feladatot úgy,hogy az imbolygás a koordinátasíkon menjen végbe! Egy-"gy lépésnél mindkét koordináta ktilon.ktilon _1-gye1,O.val vagy +l.gyel váItozr'<>n, A program írjaki a lépésekután a koordinátákat, illewe az oigőtőImért távolságot! 7. Készítsünkprogramot, mellyel Táylor véletlenszerűenbolyong a képernyőn az ablak kozepétőlindulva! A képfájlta forrásfájlok kozott talaliuk. Egy címkénjelezzük folyamatosanaz indulási helytől mérttávolságát! 8. Készítsünkprogramot, mellyel Táylor ésMary vélet. lenszerűen bolyong a képernyőn! 9.Irjunk pfogramot' amely négyrészegtengerésztjele. nít meg egy szigeten!A szigetetegy zöld négyzetjel. képezzea kék hátterű ablak közepén. A tengerészek véletlenszerűen bolyongjanak. A ftirgébbekgyakran, de kicsit lépjenek, a lomhábbak ritkábban, de nagyobbat. A tengerészekne menienek bele akék víz. be! 10. Készítstinkprogramot' amely ket dobokockával dob, majd kiírja a kockák általmutatott számok összegéta képernyőre!Jelenítstikmeg a dobókockákat is. 11.Írjunk programot' amely szimulálja a kockadobást! A program egy bizonyos ideig jelenítsemeg egymásután egy kocka véletlenszerűenválasztott lapjait, majd hagy. ja meg az utoljára választott lapot. 12' Jelenítsünk meg a képernyőn egy kártyalapot, amely 2 másodpercenkéntvéletlenszerűen megváltozik egy másik lapra! A kártyákat a forrásfájlokKdrtya mappájában találjuk.
64
l, A programozás alapjai 13. Irjunk játékprogramot!A játékosvéletlenszerűenhűzegy lapot a kártyacsomagból, majd visszateszi,ésa teljes csomagból húzmegint egy lapot. Ertékeljtk a húzottla. pokat a következő pontozással! Mind a kétszerugyanaza lap: 30 pont Ket ktilonboző színíi,de egyforma figurájú lap: 15 pont Két egyforma szín(i,de ktilonboző ÍigurájűIap: 5 pont Két ktilonböző színííéseltérő figurájú lap: -1 pont 14.Készítsükel 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űeneldonti, hogy nyertünk vagy vesztettünk ennyi pontot. A képernyőnjelenjen meg pontjaink alakulása.Üzenetablak jelezze, ha elfogytak a pontjaink! l5.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ííenváItoztatva a sebességüket. Az nyer, amelyik először éri e| az ablak 1obbszélét.
t:w]
Egérversenya képernyőn
T
programota köwetke7őjdtékokhoz!A program kefle be a jótékoslqését,majd Készítstntk IépjenvéIetlens7erííen, és jelenítsemeg a jdtékdllósdt! Úzenetablakban jelezzük a program végétésa nyertest!Melyik játékndl rendelkezünk biztosan nyerő straté. ldanryi szitrnotlfoszle {l wgy 2p g1dvaltFtigg.eattóI, hogykikezdi a j dtékot?Ker essünkköny uekbenu ag1 az internetenuál,aszta kérdés el
Lr:_,-::'.r f e-
65
l' A programozás alapjai I7.Az asztalon Z5 száI gyufa van. Felváltva veszünk el belőle I, Z vagy 3 száIat.Az nyer, aki utoljára tud venni a halomból. 18' Megállunk egymássalszemben 100 lépésre.Felváltva leptink egymás felé legalább 2, legfeliebb 9 lépést.Az nyer' aki eléria másikat vagy túlhaladrajta. 19.Tégyünk 1O0 korongot az asztalta'majd felváltva vegyünk el legalább egy, legfel. jebb 10 korongot. Az nyer' aki utoljára vesz elkorongot. 20. 1oo korongból kezdetben leteszünk egyetaz asztalra.Felváltva ráteszünk legalább egy, de legfeljebb annyi korongot' amennyi már az asztalon van. Az nyer, aki elő. ször leteszi a századik korongot' szám számjegyeit.Ha az így kialakuló 21.Felváltva felír1ukegymás mellé egy 5 jegyíÍ' szám osztható 9.ce1, akkor a felhasználó nyer, egyébkéntpedig a számitógép.
66