Dr. Sheldon Cooper karakterét nem kell bemutatni. Az Agymenők (The Big Bang Theory) című sorozat 2. évad 5. epizódjának címe A vitatkozás nagymestere (The Euclid Alternative). Nagyon találó az epizód címe magyarul. Miközben Penny reggel Sheldont munkába viszi, Sheldon az autóban kémiai elemek nevéből álló szólánc játékával különösen Penny agyára megy (pedig a játékot Penny nyeri ?):
A játék során Sheldon az alábbi kémiai elemeket mondja:
- magyar nyelven: Hélium ↦ Mangán ↦ Neptúnium ↦ Magnézium ↦ Molibdén ↦ Nitrogén ↦ Nobélium ↦ Mendelévium
- angol nyelven: Helium ↦ Mercury ↦ Ytterbium ↦ Molybdenum ↦ Magnesium ↦ Manganese ↦ Europium ↦ Mendelevium
Támogassuk meg ezt a játékot! Készítsünk olyan programot Java nyelven, ami segít(ene) felkészülni Sheldon szólánc játékára!
A szükséges lépések áttekintése
- Gyűjtsük össze a kémiai elemek nevét magyar nyelven a Wikipédia – Kémiai elemek listája szócikkéből és rendezzük ábécé sorrendbe!
- Építsük be az elemlistát a program adatmodelljébe!
- Indítsuk el a lépésszámláló nulláról! Ha a lépésszámláló páros, akkor az ’A’ játékos, egyébként a ’B’ játékos lép.
- Készítsük elő a játékmenet tárolására alkalmas adatszerkezetet, szöveget, listát!
- Kezdetben kínáljuk fel a teljes elemlistát úgy, hogy mindig egy és csak egy legyen belőle kiválasztható!
- A kiválasztást követően tároljuk el a játékmenetben az elemet, töröljük ezt az elemlistából, majd kínáljuk fel azoknak az elemeknek a listáját, amelyek kezdőbetűje megegyezik az előzőleg kiválasztott elem utolsó betűjével és növeljük meg a lépésszámlálót!
- Amíg a felkínálható elemek listája nem üres, addig az előző lépést ismételjük meg!
- A játék végén az nyert, aki a játékmenet utolsó elemét választotta ki. Írjuk ki a nevét és a lépésszámot!
A grafikus felületű megvalósítás képernyőképe rövid játékmenettel
Ötletek a megvalósításra és a továbbfejlesztésre
- A program Java nyelven konzolos menükezeléssel, asztali alkalmazásként swing-esen többféle GUI komponens használatával és eseménykezeléssel, böngészőben futó JSP webalkalmazásként többféle űrlapmezővel, illetve HTML+CSS+JavaScript alapon is implementálható.
- A kémiai elemek listája lecserélhető az angol nevekre. Ekkor figyeljünk arra, hogy a kis- és nagybetűket ne különböztessük meg az utolsó-első betű párosítása során.
- Lehet a játék bármikor megszakítható, illetve a vége után újrakezdhető.
- A program mérhetné a játék során az eltelt időt.
- A program lehetne peer-to-peer vagy szerver-kliens elosztott és megvalósíthatna hálózatos kommunikációt.
- A program mobil alkalmazásként is implementálható.
A bejegyzéshez tartozó teljes forráskódot – többféle változatban is – ILIAS e-learning tananyagban tesszük elérhetővé tanfolyamaink résztvevői számára.
Többféleképpen is hozzájuthatunk az adatokhoz attól függően, hogy milyen előismeretekkel rendelkezünk a különböző tanfolyamainkon:
- A Java SE szoftverfejlesztő tanfolyamon dolgozhatunk szövegtömbbel, generikus kollekcióval (listával/halmazzal), konzolos és swing-es változatot is készíthetünk. Ehhez a feladathoz objektumorientált alapok mindenképpen szükségesek. Kézzel előállított szövegfájlból olvasva (mentve a Wikipédia oldaláról a táblázatot) hozzájuthatunk a kémiai elemek nevéhez, amihez kivételkezelés is szükséges.
- A Java EE szoftverfejlesztő tanfolyamon megvalósítható, hogy a program kivételkezeléssel hálózati kapcsolatot épít, majd közvetlenül olvassa és/vagy menti a Wikipédia HTML tartalmából a kémiai elemek nevét szövegfájlba vagy generikus kollekcióba, amivel a feladat visszavezethető az SE szemléletű megközelítésre. Böngészőben futó JSP és/vagy Servlet technológiára építő webalkalmazásként is megvalósítható a feladat.
Kedves Sanyi! Nagyon tetszik a játék! Engedelmeddel én is felhasználnám az órámon. De csak a haladóbbak számára ajánlanám fel…
Kedves Kati! Örülök, hogy tetszik a szólánc játék. Természetesen, bátran használd az óráidon. Megnéznék majd néhány általad jóra értékelt megoldást. Privát küldöm a forráskódot.
Eredeti nyelven: Sheldon’s car game with Penny
Attila és Tibor blogolt már kódolásról/dekódolásról:
https://it-tanfolyam.hu/cimke/kodolas-dekodolas/
Sheldon Morze-kóddal kommunikál a 11. évad 5. epizódjában:
Sheldon talking in Morse code Season 11
Blogolhatnánk erről is, ütemezzük be.
Rendben, jó ötlet.
Én ott dobtam kivételt, amikor Amy és Sheldon arról SMS-eztek, hogy vajon hány százalékban áll a polipropilén polipból.
Hát igen. Nem kicsit voltak fárasztóak még az elején. 🙂 Hiába, minden kapcsolatban meg kell lépni a kötelező lépcsőfokokat. És lám: Nobel-díj lett belőle.
A
JList
komponenshezDefaultListModel
van kapcsolva? Szöveg kerül bele vagy más POJO kell valamilyen hasznos getter miatt?Tibor: többféleképpen is lehet.
– Ha csak
String
objektumok kerülnek a listába, akkor hasznos valamilyen párhuzamos adatszerkezet az MVC modell rétegben. Azt kell karbantartani és időnként frissíteni az MVC nézet réteget.– Ha okosabb POJO-kból áll a
DefaultListModel
objektum/kollekció, akkor az maga tudhatja, hogy kiválasztható-e és/vagy megjeleníthető-e. Ekkor elegendő lehet csak ezt karbantartani.Az első ötlet tipikusabb, de bátran próbálkozhatsz a másodikkal is.
Tök jól néz ki ez a Nimbus. 😉
András: nekem is tetszik. Ez az alapértelmezett Look and Feel a NetBeans-ben, ha JFrame Form varázslót használsz: https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/nimbus.html
Sándor készített egy tankockát, mivel Sheldon algoritmusa a barátkozásról kihagyhatatlan. Katt ide:
https://it-tanfolyam.hu/tankocka-hang-film-felirattal-a-baratkozas-algoritmusa-dr-sheldon-cooper-szerint/
A videóban időnként felbukkanó hat kérdésből a negyediket én találtam ki. 😉
Köszönöm Balázs.
Gyakoroltam a kémiai elemeken a programozási tételeket. Nyilván 🙂 a közelgő érettségire. Kerestem a szólánc játékhoz olyan elemeket, amik segíthetnek taktikázni a játék során. Egyelőre eddig jutottam:
A két metódus Java forráskódja:
Próbáltam összerakni a lehetséges leghosszabb játékmenetet is, de az még nem megy.
Örülök Bálint, hogy gyakorlásra ösztönzött a szólánc játék. Látszik, hogy mennek már a programozási tételek.
Egy apró kiegészítésem van csupán: a 15. sorban lévő összehasonlítás
elem2!=elem1
első feltételét cseréld ki a!elem2.equals(elem1)
logikai kifejezésre. Az==
és a!=
műveleteket/operátorokat primitív értékek összehasonlítására használjuk. A Java nyelvben aString
szövegtípus nem primitív típus, hanem már objektum. Általános alapelv: objektumokatequals()
vagycompareTo()
metódussal hasonlítunk össze. Attól függ, hogy melyiket használjuk, hogy az objektumok azonossága vagy a sorrendje a kérdés. A részletes indoklás messzire vezetne, hogy miért adja ugyanazt eredményül a forráskódod így is, ezért általános indoklást írtam. Később a Java SE szoftverfejlesztő tanfolyamon ki fog derülni.Sándor: értem, köszönöm, javítottam. Közben sikerült összehozni a leghosszabb játékmenetet is. Feltöltöttem ILIAS-ra. Megbeszéljük a következő órán?
Hogyne Bálint. Balázs: itt a házi feladatod a csütörtöki órára, amikor találkoztok. 🙂
ACK
Bálint: továbbgondolva az ötleteidet, én is foglalkoztam a játék stratégiával. Erre jutottam:
– A legkönnyebb dolgunk akkor van, amikor a cink után kell folytatnunk, mert 11 db k betűvel kezdődő elem van: kadmium, kalcium, kalifornium, kálium, kén, klór, kobalt, kopernícium, kripton, króm, kűrium.
– A legnehezebb dolgunk akkor van, amikor a jód után kell folytatni. Ekkor csak 3 elem van: darmstadtium, diszprózium, dubnium.
Kösz Zoli. És mindegyik egyszer fordul elő? Úgy értem, hogy van-e másik 11 vagy 3 elemből álló választék?
Bálint: csak a kezdeti eseteket néztem meg. A 11-ből nem lehet később több, mert fogynak a lehetőségek. A 3-ból lehet kevesebb, ahogy fogynak az elemek. Most jöttem rá, hogy nem is ezt kérdezted. Szóval a válaszom: igen, egyediek; kezdetben nincs 11 elemű másik, és nincs 3 elemű másik lista sem.
Én is a kezdeti választékra gondoltam, kösz.