C# feladatgyűjtemény Vizuális és Eseményvezérelt Programozás (VEP) című tantárgy részére Készítette Vámossy Zoltán BMF NIK 2007. március 19-i verzió A feladatokat Benkő Tiborné Visual Basic feladatai, programozás tankönyvek példái, kollégáim és saját ötleteim alapján állítottam össze. Köszönöm mindenki segítségét. Örömmel várom az észrevételeket:
[email protected]
III. Csoport – Grafika 1. FELADAT (Text-fájl kezeléssel olvasson be egy számsorozatot), vagy más módon adjon új elemeket egy ListBoxhoz. A ListBox elemeiből rajzoljon oszlop diagrammot egy Panel felületére. 2. FELADAT (Text-fájl kezeléssel olvasson be egy számsorozatot), vagy más módon adjon új elemeket egy ListBoxhoz. A ListBox elemeiből rajzoljon kördiagrammot egy Panel felületére. 3. FELADAT Készítsen programot, amely megjeleníti az y = ax² + bx + c görbe képét egy X, Y koordinátarendszerben, Az együtthatók értékét TextBox mezőkben adhatja meg a felhasználó, a Draw gombon kattintva történik a kirajzolás, a Clear gomb töröl. Alapértelmezett megjelenésben az x koordinátáknak megfelelő y értékeket, mint pontokat rajzoljuk ki, míg a Vonal (RadioButton: Appearance => Button; AutoChech => false) benyomásával a függőváltozó szomszédos értékeinek szakaszonkénti összekötésével rajzoljunk grafikont! (Figyelem! Az alábbi ábra át lett skálázva.)
4. FELADAT Készítsen programot, amely megjeleníti az y = c+ a/(x + b) görbe képét egy X, Y koordinátarendszerben, Az együtthatók értékét TextBox mezőkben adhatja meg a felhasználó, A Draw gombon kattintva történik a kirajzolás, a Clear gomb töröl. Alapértelmezett megjelenésben az x koordinátáknak megfelelő y értékeket, mint pontokat rajzoljuk ki, míg a Vonal (RadioButton: Appearance => Button; AutoChech => false) benyomásával a függőváltozó szomszédos értékeinek szakaszonkénti összekötésével rajzoljunk grafikont! (Figyelem! Az alábbi ábra át lett skálázva.)
1
5. FELADAT Készítsen programot, amely egy céltáblát rajzol ki. A céltábla 2 körgyűrűből és egy körből (középső) álljon, színük legyen kék, zöld, piros. Ha az egérrel rákattintunk valamelyik részre, akkor 5, 10, 20 pontot kapjunk, amit a program folyamatosan számoljon, és megjelenítsen a jobb felső sarokban szövegként kirajzolva. (Ha mellélövünk (mellé kattintunk), akkor a pontszámot, amennyiben nagyobb az eddigi rekordnál, egy fájlba mentse le.) 6. FELADAT Készítsen egy kör-rajzoló programot, ahol a kört az egyik átmérőjének két pontja alapján rajzolja meg. Az adatokat TextBoxokban kérje be, és a kört az TextBoxban leütött Enterre rajzolja meg, ha megvannak mindkét pontnak a koordinátái. 7. FELADAT Tervezzen egy olyan programot, amely az egér mozgatásakor egyre nagyobb sugarú köröket rajzol (1 ponttal növekedjen), ha a jobb egérgomb le van nyomva. A gomb felengedésére álljon vissza a kezdeti értékre a kör sugara. Dupla kattintásra törölje a képernyőt. 8. FELADAT Készítsen programot, amely diákok vizsgajegyeiből készít oszlop- illetve kördiagramokat. 9. FELADAT Készítsen programot, amely egy beolvasott szöveget rajzol ki. A szöveg betűtípusát, stílusát, és színét lehessen változtatni. Használjon dialógusokat a kiválasztáshoz. Legyen lehetőség a szöveg törlésére is! 10. FELADAT Készítsen programot, amely egy rácsrendszer minden második cellájába zöld x-et, a többi cellába piros ellipszist rajzol! A rácson történő kattintás után az adott cella fekete legyen! (*) 11. FELADAT Készítsen egy speciális céltáblát, amely nem egyre növekvő célköröket, hanem céltéglalapokat tartalmaz! A céltáblát alkotó téglalapok színei középtől kifele változzanak! A legbelső téglalap a 10-es és kifele mindig eggyel csökken a növekvő méretű téglalapok értéke. Véletlenszám generátor segítségével lőjön a céltáblára 5-öt és jelölje fekete karikákkal a találatokat, majd írja ki az eredményt! (*) 12. FELADAT Készítsen totóhúzást szimuláló programot a következő feltételekkel: 13+1 véletlenszámot – amiknek rendre megfelelteti az 1, X, 2 értékeket – sorsol a gép és összehasonlítja a felhasználótól előzetesen bekért tippekkel! A felhasználótól egy rács segítségével kérje be a tippeket úgy, hogy a 14 soros és 4 oszlopos négyzetrács tartalmazza soronként a következőket: sorszám 1, X, 2. A felhasználó egy kis kék kört rajzoljon a tippmezőbe! A kisorsolt értékek kék kereszttel, a találatok pedig zöld +-ként jelenjenek meg. (*) 13. FELADAT Készítsen 4x4-es Tilitoli programot saját megjelenítés szabályozással! (A kevert táblát egy fájl alapján készítsük el.) A cellán történő kattintás után, ha az adott cella valamely négyes szomszédja üres, akkor odamozduljon el a szám. A mozgatandó szám félkövérként jelenjen meg és eltérő szinezéssel!
14. FELADAT Készítsen 10x10-es szorzótábla programot saját megjelenítés szabályozással! A rácson történő kattintás után az adott cella, valamint a hozzá tartozó szorzó és szorzandó kiemelt színű legyen, a számok pedig más helyen és félkövérként jelenjenek meg! (*)
2
15. FELADAT Készítsen programot, amely egy rácsrendszer minden második cellájába zöld x-et, a többi cellába piros ellipszist rajzol! A rácson történő kattintás után az adott cella fekete legyen! (*) 16. FELADAT (Nehéz, nem kapcsolódik a tananyaghoz) Készítsen olyan rajzprogramot, melyben a megjelenített objektumokat 4 irányba mozgatni vagyunk képesek! Az objektumokat lehessen újrarajzolni: minden új objektumot egy maximum 10 elemű tömbbe – vagy listába – vegyünk fel! Többféle megoldás is elfogadott (abstract osztály, vagy intarface).
17. FELADAT (Nehéz, nem kapcsolódik a tananyaghoz) Készítsen programot, mely az egér segítségével egyenest húz a kurzor által az egér bal gombjának lenyomásakor és e gomb felengedésekor megjelölt pontok között. Alkalmazza a “gumivonal” rajzolási megoldást, vagyis: ha az egeret lenyomott gombbal mozgatjuk, folyamatosan mutassa, hol húzódna az egyenes, ha a gombot az adott pillanatban felengednénk. (Tehát mindig csak pontosan egy egyenes szakaszt láthatunk a kiinduló pont és az aktuális pont között.) Használja a ControlPaint.DrawReversibleLine(Point start, Point end, Color backColor) statikus metódust, amely kirajzolja a szakaszt, de ha még egyszer felülrajzoljuk, akkor eltűnik. Figyelem! A tagfüggvény képernyő-koordinátákkal dolgozik, ezért használja a hívás előtt a Control.PointToScreen() tagfüggvényt. 18. FELADAT (Nehéz, nem kapcsolódik a tananyaghoz) Készítsen programot, amely a bal egérgombbal kattintva elhelyez csomópontokat. A csomópontokat szakaszokkal kösse össze láncba. A csomópontok a jobb egérgombbal legyenek elmozgathatók, a CTRL billentyű lenyomásakor pedig törölhetők.
3
IV. Csoport – Timer alapú feladatok 19. FELADAT Készítsen “dekázást” szimuláló programot! Az ablak alján elhelyezkedő téglalap alakú 5x20-as ütőt az m és n betűkkel mozgathatjuk jobbra, illetve balra. A labda az oldalsó falakról szabályosan visszapattan, de az ütőhöz érve vízszintes irányú sebessége véletlentől függ a [-kezdeti sebesség, + kezdeti sebesség] tartományban. A függőleges pattanást egy másik Timer vezérelje a következő módon: a labda kezdjen leesni, ha az idő egy mindig változó [0.5, 2] másodperc közötti időt elér véletlenszerűen (az Interval értéke mindig változik!) Számoljuk a dekázások számát, amíg az ablak alját nem éri el a labda! 20. FELADAT Készítsen alkalmazást, amely megvalósítja a hajdani TV SQUASH játékot! Egy mozgó labdát egy téglalap alakú ütővel lehet visszaütni oly módon, hogy az ablak jobb szélén elhelyezkedő 5 pixel széles és 20 pixel magas fekete ütőt a játékos az o és l billentyűk leütésével mozgathatja fel, illetve le irányokba, és ha a labda az ütőnek ütközik visszapattan. Ha viszont nem mozgattuk megfelelő helyre az ütőt és a labda eléri a jobb oldali ablakszélt, akkor a hibát detektáljuk és a játék leáll. (A másik három oldalról visszapattan a labda, és az ütő nem hagyhatja el az ablakot!). Számoljuk a bal oldali falat elérő ütközéseket is és jelenítsük meg az ablak fejlécében az éppen aktuális ütésszámot! 21. FELADAT Készítsen 10x10-es „gyorsaság teszt” programot! Az éppen aktuális célpont véletlenszerűen kis ideig jelenjen meg úgy, hogy a cellát pirossal rajzoljuk ki. A cellán történő sikeres kattintás után, növekedjék egy számláló értéke és jelenjen meg a Form feliratában. Minden lövés után csökkenjen a cél megjelenítési ideje. Ha sikertelen volt a kattintás (rossz helyre kattintottunk, vagy későn), akkor kék kör jelezze a hibát és álljon le a játék. (*)
22. FELADAT Rajzoljon ki a képernyő alsó területére egy téglalapot, ez szimbolizálja a síelőnket. A téglalapot lehessen jobbrabalra vezérelni a billentyűzet segítségével. A Form tetejéről induljon el lefelé két téglalap, amely szimbolizálja a kapukat, ami között a síelőnek el kell haladnia. A kapuk mozgását Timer segítségével valósítsuk meg. Ha a kapuk elhagyták a Formot az alsó szélénél, akkor újból a Form tetején jelenjenek meg véletlenszerű pozícióban. Minden egyes sikeresen vett kapunál csökkenjen a kapu két széle közötti távolság. A program számolja, hogy hány kaput vettünk sikeresen, és ezt jelenítsük meg a jobb felső sarokban. (Kilépésnél az eredményt tároljuk el egy fájlba.) 23. FELADAT Rajzoljon ki a képernyő alsó területére egy téglalapot, ez szimbolizálja az űrhajónkat. Az űrhajót lehessen jobbra-balra vezérelni a billentyűzet segítségével. Az Enter leütésére induljon el egy nyíl (szakasz, megfelelő végződéssel) alakú lövedék függőlegesen felfelé. A képernyő tetején legyen egy kör alakú ellenséges űrhajó, ami jobbra-balra mozogjon a Form két széle között, amit egy Timer vezéreljen. Ha a lövedék eltalálja, akkor az +1 pont, amit jelezzünk a képernyő jobb felső sarkában. (Kilépésnél az eredményt mentse el egy fájlba.) 24. FELADAT Rajzoljon a képernyőre két egyforma „golyót”, illetve egy téglatestet. A téglatest legyen fix pozíciójú, míg a golyók véletlenszerűen legyenek elhelyezve. Az egyik golyót („egyes”) az egér segítségével lehessen mozgatni. Ha ütközik a „kettes” golyónak, akkor az vegye át az „egyes” mozgásirányát, és kapjon valamilyen kezdő
4
sebességet, ami fokozatosan csökkenjen, majd a golyó álljon meg (Timerrel oldjuk meg a csökkenést). A „kettes” golyó a falakról visszapattan. Ha a „kettes” golyó hozzáér a téglatesthez, akkor +1 pontot kap a felhasználó, amit jelezzünk ki. A játék adott ideig fusson (Timer). (A játék végeztekor mentse el a pontszámot egy fájlba.) 25. FELADAT Készítsen programot a fénysorompó működésének animációjára, amikor is a két piros lámpa villogását egy fehér lámpa villogása váltja fel! A piros és a fehér lámpa szimulációs adatai módosíthatók legyenek. (A kezdeti értékeket fájlból olvassa be, a program bezárásakor az adatokat mentse ide!) 26. FELADAT Készítsen autóverseny szimuláló programot! A pálya 3 úttestből álljon, az egyes részek jól láthatóan legyenek tagolva. Az utak elején jelenjenek meg autók, amelyek az út vége felé közeledjenek véletlen sebességgel. Ha egy autó elérte az út végét, akkor újból az út elején jelenjen meg. Az út végén álljon a saját autónk, amit billentyűzet segítségével tudjunk irányítani a sávok között. Ha összeütközünk egy autóval, akkor vonjon le egy életet, ha elfogyott a 3 élet, akkor legyen vége a játéknak. Minden eltelt másodperc 1 pontot érjen, ha egy autót sikeresen kikerültünk +10 pont. Az eredményt, és az életek számát folyamatosan jelezzük. 27. FELADAT Készítsen programot, amely egy digitális órát szimulál. A számjegyeket vonalakból épüljenek fel és rajzolja ki! A számjegyek törlésére használja a ControlPaint.DrawReversibleLine(Point start, Point end, Color backColor) statikus metódust, amely kirajzolja a szakaszt, de ha még egyszer felülrajzoljuk, akkor eltűnik. A képernyő törlése nem fogadható el csak 50 %-os megoldásnak! Figyelem! A tagfüggvény képernyő-koordinátákkal dolgozik, ezért használja a hívás előtt a Control.PointToScreen() tagfüggvényt. 28. FELADAT Készítsen analóg órát szimuláló programot! A kismutatót, percmutatót és a másodpercmutatót úgy rajzolja ki, hogy az előző helyzetüket a ControlPaint.DrawReversibleLine(Point start, Point end, Color backColor) statikus metódussal felülrajzolja (az egész ablak törlése csak 50 %-os megoldásnak fogadható el), és a továbbmozgatott helyzetben kirajzolja azokat. Használjon Timert a vezérléshez! Figyelem! A tagfüggvény képernyőkoordinátákkal dolgozik, ezért használja a hívás előtt a Control.PointToScreen() tagfüggvényt.
5