Developedia
Developedia
Póker
Póker

Póker

Építsünk meg egy póker játék alapjait!

A feladat célja kifejezetten az, hogy most ne foglalkozzunk a Unity-vel kapcsolatos játékfejlesztői részletekkel. Csak a szükséges típusokat és algoritmusokat definiáljuk. Ez sem lesz feltétlenül egyszerű, de jó gyakorlat a C# ismereteik berögzítésére.

Haladjunk lépésenként, és javaslom, az én megoldásom megnézése előtt próbáld implementálni saját megoldásodat vagy legalább gondold át, hogyan állnál neki!

Lássunk hozzá!

Francia kártya

Először is definiáljunk egy típust, ami egy francia kártya lapot reprezentál! Erre mindenképp szükségünk lesz.

Hogy mi a lap értéke és színe, azt egy-egy enum változó tartalmazza. Az ehhez szükséges felsorolt típusokat is definiáljuk!

‣
Kapcsolódó anyag
‣
Megoldás

52 lapos pakli

Írjunk most egy metódust, ami egy paraméterben kapott listát feltölt az franciakártya 52 lapjával!

‣
Kapcsolódó anyag
‣
Megoldás

Keverés

Írjuk meg a metódust, ami megkever egy tetszőleges hosszú kártyapaklit!

‣
Kapcsolódó anyag
‣
Megoldás

Lapok rendezése

Írjuk meg a metódust, ami sorba rendez egy tetszőleges hosszú paklit

‣
Kapcsolódó anyag
‣
Megoldás

Lapok kiíratása

Most írjunk metódust, ami egyszerű és jól olvasható formában kiír egy tetszőleges kártya listát!

‣
Kapcsolódó anyag
‣
Megoldás

Póker kombinációk

A pókerben 5 lap egy “kéz”. Ezen kéznek van egy értéke, ami az alapján számolható ki, hogy milyen lapkombinációk rakhatók ki az öt lapból. Tekintsük át ezeket a póker kombinációkat és hozzunk létre egy enum típust belőlük

‣
A póker lapkombinációi érték szerint csökkenő sorrendben
‣
Megoldás

Póker kombináció tesztfüggvények

Írjunk függvényt a fenti összes lapkombinációóhoz, kivéve a magas lap! Minden esetben az adott függvény öt lapról, hogy a megfelelő lapkombinációhoz tartozik-e.

Pl.: bool IsRoyalFush(List<Card> hand) { … }

Mivel egy lapot több kombináció-ra is tesztelni fogunk ezért érdemes lesz majd ezen tesztelési ciklus előtt csak egyszer rendezni, ezért:

  • A megvalósított függvények mindegyike feltételezi, hogy a bemeneti lista 5 elemű és rendezett!

Mivel ha találtunk egy magas értékű kombinációt, már nem érdekel minket az alacsonyabb, ezért:

  • A függvények mindegyike csak akkor kell, hogy helyes eredményt adjon, ha a magasabb értékű kombinációk már ki lettek zárva.
  • Pl.: Nem baj ha egy Full House-re a Drill lekérdező függvény is true-t ad vissza.

‣
Megoldás - Royal Flush, Straight Flush, Straight & Flush
‣
Megoldás - Poker, Full House, Drill, Pair, Two Pair

Póker kezek értékei

A pókerben nem csak az számít, milyen típusú kombináció van a kézben.

Azonos típusú kombinációk esetén a kéz bizonyos értékei döntenek. Ennek részletes szabályait a legördülő menü alatt olvashatod minden egyes kombinációra külön-külön. Mindazonáltal erre most nincs szükség, mivel egyetlen összevont szabállyal is megfogalmazható, két megegyező típusú kézről, hogy melyik az erősebb. Mivel ezen univerzális szabályt rövidebben lehet szóban megfogalmazni, ezért lekódolni is ezt rövidebb, egyszerűbb.

‣
Részletes leírás (NEM javasolt megközelítés)
‣
Univerzális szabály (Javasolt megközelítés)

Most írjuk meg a függvényt, ami az “univerzális” szerint sorba rakja a kártyákat!

‣
Kapcsolódó anyag
‣
Megoldás

A PokerHand típus

Most definiáljuk a póker kéz típust.

A PokerHand típus konstruktora egy 5 elemű listáját kapja meg lapoknak. Ebből kiszámolja a konstruktor a kézben lévő póker kombinációt és az előző feladatban megírt függvénnyel sorba állított listát a lapokból.

A konstruktor kapja meg a játékos nevét is.

‣
Kapcsolódó anyag
‣
Megoldás

Póker kezek összehasonlítása

Definiáljunk egy összehasonlító függvényt, amivel majd sorba tudunk tenni kezeket érték szerint!

‣
Kapcsolódó anyag
‣
Megoldás

Kéz kiíratása

Definiáljuk felül a Hand típus ToString() metódusát is!

‣
Kapcsolódó anyag
‣
Megoldás

Póker játszma

Most végre játsszuk le a játszmát!

Ehhez írjunk függvényt, ami tetszőleges számú játékosra kioszt lapokat (ötöt fejenként) és sorba teszi a játékosokat a kezük erőssége szempontjából, majd kiírja a kezeket és a játékosok sorrendjét!

‣
Megoldás

És most teszteljük le!

PlayPokerMatch("Homer", "Moe", "Barney", "Carl", "Lenny");
image
image
‣

Letölthető forráskód itt

Logo

Főoldal

Blog

Elmélet

3D Studio

Adatvédelmi nyilatkozat

GY.I.K.

Házirend

Szerző: Marosi Csaba / marosi.csaba@3d-studio.hu

DiscordGitHubLinkedIn