Dr. Sheldon Cooper karakterét nem kell bemutatni. Ha a kockáknak döntéseket kell hozniuk, akkor az Agymenők (The Big Bang Theory) sorozatban többször is előkerül a kő-papír-olló-gyík-Spock játék.
A 2. évad 8. epizódjában – amelynek címe Fogd a nőt, és fuss! (The Lizard–Spock Expansion) – ismerjük meg a játékszabályt és rögtön alkalmazásra is kerül. Raj és Sheldon megpróbálja eldönteni, hogy melyik sci-fi sorozat a (leg)jobb, illetve Howard és Sheldon így próbálnak osztozni a vacsora maradékán. Végül az 5. évad 17. epizódjában – amelynek címe Itt a festmény, hol a festmény! (The Rothman Disintegration) – újra hallhatjuk a játékszabályt. Ekkor Kripke és Sheldon egy egyetemi iroda sorsáról (kié legyen) próbál dönteni.
A kő-papír-olló-gyík-Spock játékszabály
Vajon hogyan bővül ki a klasszikus kő-papír-olló játékszabálya további két kézjel/fegyver hozzáadásával? Íme a játékszabály videóban:
Íme a játékszabály szövegesen:
Az olló elvágja a papírt,
a papír bevonja a követ,
a kő agyonüti a gyíkot,
a gyík megmarja Spockot,
Spock eltöri az ollót,
az olló lefejezi a gyíkot,
a gyík megeszi a papírt,
a papír cáfolja Spockot,
Spock feloldja a követ,
a kő eltöri az ollót.
Ugye mi sem egyszerűbb? 🙂
A játékszabálynak számos grafikus ábrázolása is van. Ezeken többnyire irányított gráf csomópontjai mutatják a kézjeleket és a nyilak iránya mutatja, hogy mi mit győz le. Például a gyíktól Spock felé mutató jelzi, hogy a gyík megmarja (azaz legyőzi) Spock-ot. Íme az egyik ábra:
A kő-papír-olló-gyík-Spock játék szimulációja Java programmal
Az objektumorientált tervezés egyik lehetősége az öröklődés beépítése. Közös pontokat, funkcionalitást keresünk. Ezeket beépítjük az ősosztályba és az utódokban kiegészítjük, testre szabjuk. Kiindulunk az alábbi absztrakt
Dontes ősosztályból:
A konstans
DONTES tömb (indexelhető adatszerkezet) tárolja a kézjelek/fegyverek elnevezését. Ezek közül választ véletlenszerűen a
veletlenDontes() függvény. Az eredményt ki kell tudni írni a konzolra, illetve kezelni kell a döntetlent is. Ezekért közösen felelnek a
dontesEredmeny() és a
kiiras() függvények. A túlterhelt metódusokként létrehozott
eredmeny() függvények kezelik a 2 illetve 3 játékos esetén a döntéseket. A háromparaméteres függvény visszavezet a kétparaméteres esetre. Utóbbi metódus – mivel absztrakt – csak az utódosztályban valósul meg. Így lehetővé válik a játékszabály többféle megvalósítása.
1. megoldás
Az első megoldás során adatszerkezet nélkül valósul meg a játékszabály a
KoPapirOlloGyikSpockV1 utódosztályban:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
classKoPapirOlloGyikSpockV1extendsDontes{
@Override
publicinteredmeny(intd1,intd2){
if(d1==d2)//döntetlen
return-1;
return(d1==2&&d2==1)||//Az olló elvágja a papírt,
(d1==1&&d2==0)||//a papír bevonja a követ,
(d1==0&&d2==3)||//a kő agyonüti a gyíkot,
(d1==3&&d2==4)||//a gyík megmarja Spockot,
(d1==4&&d2==2)||//Spock eltöri az ollót,
(d1==2&&d2==3)||//az olló lefejezi a gyíkot,
(d1==3&&d2==1)||//a gyík megeszi a papírt,
(d1==1&&d2==4)||//a papír cáfolja Spockot,
(d1==4&&d2==0)||//Spock feloldja a követ,
(d1==0&&d2==2)?//a kő eltöri az ollót.
d1:d2;
}
}
2. megoldás
A második megoldás során a játékszabályt konstansként deklarált
MATRIX szomszédsági -, csúcsmátrix, kétdimenziós tömb adatszerkezet tárolja. Ez alapján döntést tud hozni a
KoPapirOlloGyikSpockV2 utódosztály.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
classKoPapirOlloGyikSpockV2extendsDontes{
privatestaticfinalint[][]MATRIX={
// kő papír olló gyík Spock
/*kő*/{0,0,1,1,0},
//A kő eltöri az ollót, a kő agyonüti a gyíkot,
/*papír*/{1,0,0,0,1},
//a papír bevonja a követ, a papír cáfolja Spockot,
/*olló*/{0,1,0,1,0},
//az olló elvágja a papírt, az olló lefejezi a gyíkot,
/*gyík*/{0,1,0,0,1},
//a gyík megeszi a papírt, a gyík megmarja Spockot,
/*Spock*/{1,0,1,0,0}
//Spock feloldja a követ, Spock eltöri az ollót.
};
@Override
publicinteredmeny(intd1,intd2){
if(d1==d2)//döntetlen
return-1;
returnMATRIX[d1][d2]==1?d1:d2;
}
}
A játékmenetért felelős vezérlés
10 lépésből álló játékmenetet hoz létre az alábbi vezérlés:
Egyben tesztelés is: igazolja, hogy azonosan működik a két különböző megoldás.
Eredmény
Mivel minden véletlenszerűen alakul a játékban, ezért az alábbi csupán egy a sokféle lehetséges kimenet közül:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
papír és gyík: gyík nyert
papír és gyík: gyík nyert
kő és kő: döntetlen
kő és kő: döntetlen
kő és papír: papír nyert
kő és papír: papír nyert
Spock és papír: papír nyert
Spock és papír: papír nyert
olló és Spock: Spock nyert
olló és Spock: Spock nyert
kő és Spock: Spock nyert
kő és Spock: Spock nyert
papír és papír: döntetlen
papír és papír: döntetlen
gyík és Spock: gyík nyert
gyík és Spock: gyík nyert
gyík és kő: kő nyert
gyík és kő: kő nyert
gyík és kő: kő nyert
gyík és kő: kő nyert
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.
A feladat a Java SE szoftverfejlesztő tanfolyam szakmai moduljának 5-8. óra: Vezérlő szerkezetek, 9-12. óra: Metódusok, rekurzió, 13-16- óra: Tömbök, illetve a 17-24. óra: Objektumorientált programozás 1. és 2. rész alkalmaihoz kötődik.
Folytatjuk Tankockák blog bejegyzés sorozatunkat. A feladatban válaszolni kell a videóban megjelenő hat kérdésre. A kérdések algoritmusokhoz kapcsolódnak. A videó a népszerű Agymenők (The Big Bang Theory) című sorozat 2. évad 13. epizódjából való, melynek címe: A barátkozás módszertana (The Friendship Algorithm). A tervezés folyamatábra segítségével történik. Vajon működik az algoritmus? 😉 Ez a témakör főként az alapozó tanfolyamunkhoz kötődik: Java SE szoftverfejlesztő tanfolyam.
Az algoritmusok a tipikusan programozási nyelvtől független, konvertálható tudást jelentik. Mindig szükség van rájuk. Többféle jelölésrendszer is kapcsolódik hozzájuk. Például folyamatábra, mondatszerű leírás, struktogram, Jackson-ábra. Az UML jelölésrendszer elemei közül az objektumok kommunikációját, viselkedését leíró ábrák is algoritmusleíró eszköznek tekinthetők.
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:
É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.
Weboldalunkon cookie-kat (sütiket) használunk, melyek célja, hogy teljesebb szolgáltatást nyújtsunk látogatóink részére. További böngészésével hozzájárul ezek használatához. ElfogadAdatkezelési szabályzat
Privacy Overview
This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.