Dr. Sheldon Cooper szólánc játéka

Sheldon szólánc kiemelt képDr. 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.

Ajánljuk a Java SE szoftverfejlesztő tanfolyam kategóriából

“Dr. Sheldon Cooper szólánc játéka” bejegyzéshez 22 hozzászólás

  1. 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…

    Válasz
    • 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.

      Válasz
    • 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.

      Válasz
  2. A JList komponenshez DefaultListModel van kapcsolva? Szöveg kerül bele vagy más POJO kell valamilyen hasznos getter miatt?

    Válasz
    • 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.

      Válasz
  3. 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:

    • 6 olyan elem van, amik hosszabbítják a játékmenetet, mert első és utolsó betűjük azonos: magnézium, meitnérium, mendelévium, moszkóvium, neon, nitrogén
    • 3 olyan elem van, amivel azonnal véget ér a játék (és az nyert, aki éppen mondta), mert nincs olyan elem, aminek első betűje olyan lenne, mint ezek utolsó betűje: arany, higany, réz

    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.

    Válasz
    • Ö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 a String szövegtípus nem primitív típus, hanem már objektum. Általános alapelv: objektumokat equals() vagy compareTo() 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.

      Válasz
  4. 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.

    Válasz
    • Kösz Zoli. És mindegyik egyszer fordul elő? Úgy értem, hogy van-e másik 11 vagy 3 elemből álló választék?

      Válasz
      • 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.

        Válasz

Szólj hozzá!