Zárthelyi (2006.12.20. Windows/Linux) Reflex teszt Készítsen olyan játékprogramot, amellyel a játékos kipróbálhatja a reflexét. A játékprogram központi eleme egy 10*5-ös méretű, színes kártyáka ("gombokat") tartalmazó tábla. A játék során a véletlenszerű színekkel megjelenített kártyák színe egy adott sebességgel véletlenszerűen, egyesével változik. A tábla minden egyes sorához tartozik egy gomb. A játékosnak az a feladata, hogy ügyesen (kellő gyorsasággal) rákattintson arra a gombvra, amelyhez tartozó sorban csupa azonos szintű kártyák jelennek meg. A programot 4 színű kártyákkal kell elkészíteni. A kártyák vátlozásának sebességét (gyorsabban, vagy lassabban váltakozzanak a színek) egy külön vezérlővel (pl. slider) a játkos is módosíthatja. A beállítható sebességt intervalluma: 1-50. A képernyőn jelenítsük meg a játék során szerzett hibapontok és jutalom pontok számát az alábbiak szerint: - Ha a játkos nem vesz észre egy jó sort, akkor hibapontot kap, melynek értéke maximálisan beállítható sebesség és az aktuális sebesség különbsége. - Ha a játékos olyan gombra kattint, amelyhez tartozó sor nem nyerő sor, azaz a sorban szereplő kártyák nem azonos színűek, akkor hibapontot kap, melynek a maximálisan beállítható sebesség és az aktuális sebesség különbségének fele. - Ha a játékos időben és jó helyre kattint, akko jutalom pontot kap, melynek értéke a maximálisan beállítható sebesség és az aktuális sebesség különbségének kétszerese. Megjegyzés: teszteléshez érdemes a táblát kisebb méretűre állítani és kevesebb színnel dolgozni, de természetesen a kész programnak működnie kell a nagy méretű ráblára és 4 színre. Zárthelyi (2007.01.18. Windows/Linux) Lottózós játék Az Ön feladata az alábbi, lottózáshoz hasonló számítógépes játék elkészítése. A játék indításakor a képernyőn megjelenik egy lottószelvény. A lottószelvény 6 sorból és 15 oszlopból áll, és minden kockában megjelenítjük a hozzá tartozó számot (1-90). Kezdetben minden szám alapszínűre (zöld) van beszínezve. A játékos egy játékmenet elindításához bedob 100 Forintot. A 100 Forint ellenében a nyereményszelvényen a kívánt számokra kattintva megjelölhet pontosan öt darab számot. A kiválasztott számokat az alapszíntől eltérő színnel (piros) jelezzük. Ha a játékos egy kiválasztott számra ismételten rákattint, akkor töröljük a jelölést. (Állítsuk a színét az alapszínre.) A játékos nem tud bejelölni ötnél több számot. Amikor pontosan 5 bejelölt szám van, akkor a játékos rá tud kattintani a Húzás gombra, kipróbálja a szerencséjét. Egy játékmenetben összesen 20 alkalommal lehet húzni (azaz pontosan 20-szor kattinthat a húzás gombra), majd (újabb 10 forint bedobása után) új játékot lehet kezdeményezni. A húzás gombra kattintva a számítógép minden alkalommal véletlenszerűen generál öt számot, és ezt összeveti a játékos által bejelölt számokkal. A lottószelvényen színekkel jelöljük a számok (gombok) pillanatnyi állapotát. Jelöljük kékkel a számítógép által utolsó alkalommal kihúzott, de nem nyert számokat, feketével a számítógép által utolsó alkalommal kihúzott és nyerő számokat. A lejátszható 20 húzást egyenként naplózzuk. Az egyes húzás számai mellett azt is jelezzük, hány találatunk van az adott húzásnál. A játékos nyereménye az egyes húzások után: n találat esetén 10^n Forint, ahol na az adott húzáshoz tartozó találatok száma. (0 <= n <= 5). A játék során összegezzük a nyereménypontokat és azt is jelenítsük meg a képernyőn.
Zárthelyi (2007.05.03. Linux) TV készülék (próba zh) Készítsünk saját televíziót. A készülék működjön hasonlóan, mint egy távirányítós televízió. Az ablakon legyen egy felület (frame, gomb,...), ahol az adás jelenik meg és legyen egy másik felület, ahol a távirányító kap helyet. A távirányítóra a gombokat legalább 1-9 között dinamikusan rakjuk fel. Az adás megjelenítése abból áll, hogy ha be van hangolva egy csatorna (ld lentebb), és az adott csatorna van kiválasztva a távirányítón, akkor megjelenik a csatorna logója (esetleg a mellékelt adáskép). Mindegyik csatornának meg van adva, hogy melyik frekvencián sugároz, az adott frekvenciától való 1 egység eltérés még nézhető képet ad, az ezt meghaladó eltérésnél a közkedvelt hangyafoci jelenik meg a képernyőn (mellékelt kép). A hangolás menete a távirányítón a menü gomb megnyomásával történik, ekkor megjelenik egy csúszka és egy lcd kijelző. A csúszka 0-100 között állítható és az értéke megjelenik az lcd kijelzőn. Hangolni a távirányító < illetve > gombjaival lehet, ha egy csatorna frekvenciáján vagyunk, akkor ezt el lehet menteni a távirányítón található save gombbal, ekkor az aktuálisan hangolt csatornaszámra mentődik el a frekvencia. A tv 10 csatorna eltárolására ad lehetőséget, melyeket a 0-9-ig terjedő gombokkal lehet megjeleníteni, illetve lépkedni köztük a ^ (altgr+3) és a v (v betű) használatával tudunk. Lehetőség van teletext olvasására is, ha a távirányítón a TXT feliratú gombot nyomjuk meg. Ekkor a tv képe átvált és szöveget jelenít meg (csatolt képek). Minden csatornához tartozik két darab teletext oldal (100-as és az 101-es), amelyek között szintén a távirányítóval tudunk lépkedni vagy úgy, hogy megadjuk a lap számát vagy lépkedünk a ^ és a v használatával. Teletext üzemmódból a txt gomb újbóli megnyomásával tudunk visszatérni a műsorhoz. (Az egyszerűség kedvéért minden csatornához ugyan az a két teletext oldal van megadva.) Ha a műsor képe nem a megszokott 4:3 arányú, akkor a képet 16:9-ra tudjuk állítani a Size feliratú gombbal, ugyan ez a gomb állítja vissza a képméretet 4:3-ra. Lehetőség van a hangerő állítására is, ekkor egy vízszintes csúszkán kell állítani a távirányító segítségével (< és > gombok). A csúszkát nem lehet az egérrel állítani, csak a távirányító segítségével. A televíziót lehessen be/ki kapcsolgatni a I/O feliratú gombbal. Kikapcsolt állapotban a képernyőn egy fekete kép jelenjen meg (mellékelve), ekkor csak az I/O gomb újbóli megnyomását érzékelje a készülék, amikor is bekapcsol és az utoljára nézett adás képe jelenik meg rajta. Ha lehetőség van rá, akkor a távirányító külön ablakban jelenjen meg. A csatornák a következő kiosztásban vannak: Mhz Csatorna neve 5 CNN 15 Discovery Channel 25 Duna tv 35 Fix.tv 45 Hallmark 55 m1 65 National Geogrephic 75 RTL KLUB
85 Sport2 95 TV2 teletext1 teletext2 hangyafoci fekete kép A cstornák képei (704*576 méretűek). Egy példa a program kinézetére: Zárthelyi (2007.05.23. Windows/Linux) Mozaik Készítsen programot mozaik képek létrehozására, szerkesztésére, animálására. A mozaik képek egy n*n-es táblán lehet megváltoztatni. A programot úgy kell elkészíteni, hogy tetszőleges n értékre működjön, de ezt az értéket beállíthatja a forráskódban is (bemutatáshoz n = 20). A mozaik kockák színét a kockára kattintgatva lehet megváltoztatni. Egy-egy kocka színe minden egyes kattintásnál "körbe-körbe" járva, rendre megváltozik. Bemutatáshoz a színek száma legyen legalább öt. A lehetséges színeket előre rögzítheti a forráskódban. A program tegye lehetővé különféle mozaik kép megrajzolását (kattintgatásokkal), az elkészített mozaik kép elmentését (Save), létező mozaik kép betöltését (Load), módosítását, új üres mozaik kép létrehozását (New). Az alkalmazást elkészítheti űrlapon (Form) vagy menüpontokat tartalmazó főablakkal is. A megrajzolt vagy betöltött képet lehessen animálni oly módon, hogy a kép adott időközönként (másodpercenként) egy-egy sorral feljebb megy, és a fent kilédő sor a kép alján jelenik meg. Az animálást bármikor meg lehet állítani, és az így keletkezett mozaik képet igény esetén el lehet menteni. Animálás közben nem kezdeményehetünk más tevékenységet (szerkesztés, betöltés, stb). QT4 segítség: a gomb színét beállíthatja a QPalette osztály setcolor(colorrole r, const QColor &c) függvényével, ahol első paraméterként a QPalette::Button értéket kell megadni. Pl. a piros gomb előállítása: QPushButton* button = new QPushButton(...); QPalette palette; palette.setcolor(qpalette::button,qcolor("red")); button->setpalette(palette);
Zárthelyi (2008.04.30. Windows/Linux) Kattintós A feladat a következő: Dinamikusan hozzunk létre egy 10*10 méretű táblázatot gombokból. Mindegyik gomb kapjon egy véletlenszerű értéket 0 és 7 között. Mindegyik számhoz tartozik 1-1 szín a következő táblázat szerint: Érték: rgb kód 0: 0,0,0 1: 0,0,255 2: 0,255,0 3: 0,255,255 4: 255,0,0 5: 255,0,255 6: 255,255,0 7: 255,255,255 Mindegyik gombnak a neki megfelelő színt kell megjeleníteni. A program futása közben egy külön felületen (101. gomb) megjelenik egy szín véletlenszerűen, ami másodpercenként változik. A felületen azokra a gombokra lehet csak rákattintani, aminek a színe megegyezik a 101. gomb színével. Minden kattintáskor az adott gomb értéke csökken 1-el 0-ig. (Tehát a 0 értékű fekete gombokra már nem lehet kattintani.) A játék 1 percig tart és az a cél, hogy minél több pontot szedjünk össze. Pontot kapni úgy lehet, hogy ha egy gomb értéke csökken. A játék végeztével egy külön ablakban jelenítsük meg a játékos által összeszedett pontokat. (Nehezítésképen a rossz / hibás kattintások számát is.) Lehessen új játékot indítani, ekkor minden lenullázódik és a tábla újra legenerálódik. Megjegyzés: Egy gombra 1 másodperc alatt csak 1-szer lehet kattintani, hiszen a kattintás hatására a gomb színe megváltozik, így nem lehet az adott másodpercben megint pontot levonni, hiszen nem egyezik meg a színe a 101. gombbal. Nehezítés: 1, Legyen top10 is, amit a program elment és a kör végén jelenjen meg, ha bekerültünk ebbe a listába. 2, Hibás kattintáskor 10 pontot vonjunk le. 3, Lehessen a 101. gomb színváltoztatásának sebességét szabályozni egy csúszkával.
Zárthelyi (2008.05.07. Windows/Linux) Hőmérséklet megjelenítő Készíts alkalmazást, ami szemlélteti egy város hőmérsékleti és csapadékmennyiség adatait. A program egy állományból dolgozzon amiből beolvassa az adatokat, majd nekünk lehet megadni,hogy milyen adatokat szeretnénk látni. Legyen lehetőség megadni, hogy a felületen csak a hőmérséklet, csak a csapadék vagy mind a két adat megjelenjen. Ezen felül lehetőséget kell biztosítani, hogy a programba be lehessen állítani, hogy melyik időszakról kérünk jelentést. - Ha egy teljes hétről, akkor minden nap adatait külön külön meg kell jeleníteni valami szemléletes eszközzel. (pl progressbar) és mindegyik adat alá ki kell írni, hogy melyik naphoz tartozik (nap sorszáma). Egy spinboxba/comboboxban ki lehessen választani, hogy melyik hétről van szó. - Havi összesítésnél a 3 napos átlagokat kell megjeleníteni, tehát az első megjelenítőbe a hónap első három napjának az átlaga kerül. Hasonlóan, mint az előbb itt is meg lehessen adni, hogy melyik hónapról van szó. - Éves összesítésben pedig a havi átlagokat kell megjeleníteni. A felület adjon valamilyen lehetőséget az egyes napok adatainak szerkesztésére. (Pl külön ablakban 3 spinbox(numericupdown), ahol megadható a nap sorszáma, a hőmérséklet és a csapadék mennyiség is.) Ha változtatunk valamelyik értéken, akkor legyen lehetőség az új adatok elmentésére. A felület összerakását érdemes dinamikusan végezni, hiszen nem lehet tudni, hogy éppen hány vezérlőt kell megjelenítenünk. Segítségek: A hónapokat 30 naposnak vesszük és csak egy év adatait tároljuk. A hőmérséklet és csapadék adatok csak egész számok lehetnek. (A csapadék adatok nem lehetnek negatív számok, erre figyelni kell a bevitelnél, ilyen nem adható meg.) Feltehető, hogy az állományba sorban vannak az elemek, de lehet, hogy egyes napokhoz nincs semmilyen adat megadva, ezeket a napokat 0, 0 értékkel kell számolni. Pl: 32 2 0 33 4 10 36 5 0 37 6 12 Itt a 34. és a 35. napot kell 0, 0 értékkel számolni. Ajánlott formátum: nap_sorszáma(jan 1-tol eltelt nap) hőmérséklet csapadék Nehezítések: 1. Jelenjen meg a felületen az aktuális időszak alatt (hét, hónap, év) összesített csapadékmennyisége. 2. A program futása közben minden megjelenített adaton egy csúszka segítségével lehessen állítani. (átlagoknál mindegyik naphoz hozzá kell adni vagy ki kell vonni a változtatás mértékét, hogy az átlag kiadja az új értéket.)
Zárthelyi (2008.05.21. Windows/Linux) 4-es játék A 4-es játék egy kétszemélyes játék, amelynek szabályai az alábbiak: A játékot egy 15x9-es táblán játsszák, amelynek mezői 0 és 4 közötti értékeket tartalmaznak. Kezdetben minden mezőn a 0 érték van. Ha a soron következő játékos a tábla egy tetszőleges mezőjére mutat, akkor az adott mezőn és a szomszédos négy mezőn az aktuális érték eggyel né felfelé, ha az még kisebb, mint 4. Aki a lépésével egy, vagy több mező értékét 4-re állítja, annyi pontot kap, ahány mezővel ezt megtette. A játékosok pontjait folyamatosan számoljuk, és a játékmezőn eltérő színnel jelezzük, hogy azt melyik játékos billentette 4-esre. A játék akkor ér véget, amikor minden mező értéke 4-et mutat. Az nyer, akinek ekkor több pontja van. Írjon programot a 4-es játék szimulálására! A felületen jelenítse meg a táblát és a mezők értékét. (A mezőket ábrázolhatja gombokkal, annak értékét a gombokra írt számmal.) Ha az egyik játékos rákattint valamelyik mezőre, akkor a program végezze el a megfelelő mezők értékének növelését, a 4-es értéket elérő mezők átszínezését, és a pillanatnyi állás aktualizálását. A program jelezze, hogy ki a soron következő játékos. A program göngyölítve írja ki, hogy melyik játékos hányszor győzött. Awari Az Awari egy kétszemélyes játék, amelynek szabályai az alábbiak: Két játékos egymással szemben helyezkedik el, közöttük pedig (paraméterként megadható) páros számú tálka és két gyűjtőtál az alábbi lerendezésben. Mindkét játékos a hozzá közelebbi tálkákat és a tőle jobb kézre eső gyűjtőtálat mondhatja sajátjának. (Így az ellenfél gyűjtőtálja baloldalra esik.) Kezdetben mindegyik tálkában 6-6 kavics van, a gyűjtőtálak pedig üresek. A játékban a soron következő játékos kiválasztja egyik saját tálkáját (ez nem lehet a gyűjtőtál), hogy azt kiürítse úgy, hogy tartalmát az óramutató járásával ellentétes irányban egyesével beledobálja, majd ismét a saját tálkáiba, de azt a tálkát kihagyva, amelyiknek a kiürítését végezzük, amíg el nem fogynak a kavicsok. Ha az utolsó kavics a játékos saját üres tálkáinak egyikébe kerül, akkor ezt a kavicsot, valamint a szemközti tálka tartalmát a saját gyűjtőládába teszi. Ha viszont az utolsó kavics a játékos saját gyűjtőtálkájába esik, akkor újra ő következik, de ezt csak egyszer teheti meg, hogy ellenfele is szóhoz juthasson. A játéknak akkor van vége, ha az egyik térfél kiürült, azaz az egyik játékos tálkái mind kiürülnek. Ekkor az a játékos nyeri a játékot, akinek a gyűjtőtáljában több kavics van. Írjon programot az Awari játék szimulálására! A felületen - miután megadjuk, hány tálkával akarunk játszani - jelentsük meg a tálkákat és a tálkákban lévő kavicsokat. (A tálkákat ábrázolhatjuk gombokkal, a tálka kavicsait a gombokra írt számmal.) Ha az egyik játékos rákattint valamelyik tálkájára, akkor a tálkában lévő kavicsok áthelyezése automatikusan történjen meg. A program jelezze, hogy ki a soron következő játékos, és csak annak tálkáiból engedjen választani. A program göngyölítve írja ki, hogy melyik játékos hányszor győzött.