Személyes eszközök
Keresés

 

A InfoWiki wikiből


Kártyabarlang

Egy szerencsejátékkal foglalkozó cég kártyabarlangot kíván nyitni az alábbi játékszabályok szerint (21-ezés helyi változata):

  • A kártyapakliban 1-11 értékű lapok vannak, minden lapból N darab van
  • Ha egy játékos játszani akar, induláskor betesz 5 dollárt
  • Ezek után kap 2 lapot
  • Ha a játékos kér még lapot, akkor az 3 dollárjába kerül
  • A lapokat a játékos addig kéri, amíg akarja (és van rá pénze)
  • A játékos a lapok kérése végén egy utolsó lépésként, 10 dollár ellenértékeként egy lapja helyett kérhet másikat (ha akar).
  • Ha egy játékos befejezte, az osztó egy másik játékossal foglalkozik
  • Amikor az összes játékos befejezte, a játékosok bemondják "őszintén" a lapok összértékét
  • Minden játékos garantáltan nyer, akinek 2 lapból 21-e vagy 22-je van.
  • Ha nincs garantáltan nyerő játékos, akkor az nyer (azok nyernek) akinek a legmagasabb lapértéke van 17..21 közötti intervallumban.
  • Ha senki sem nyert, akkor minden berakott pénz a banké
  • Ha csak egyetlen játékos nyert, akkor övé az összes pénz
  • Ha több játékos is nyert (többnek is volt 2 lapból 21 vagy 22), akkor minden játékos az asztalon lévő teljes összeget megnyeri. Az első játékos egyszerűen megkapja az asztalon lévő összeget, a többi játékosnak a bank fizeti a nyereményt a saját tartalékából (ha van)
  • Ha több játékos is nyert, de nem garantáltan nyerő (pl. három játékosnak is van 20-a, és ez a nyerő legnagyobb lapérték), akkor elosztják egymás között az asztalon lévő pénzt (lehet tört szám is a nyeremény!)
  • Ha senki sem nyert, az asztalon lévő teljes összeg a bankké

A fentihez készítsük elő az alábbi osztályokat:

'KartyaPakli': nyilvántartja milyen értékű lapok vannak a pakliban. Képes saját magát megkeverni, és a pakli tejéről kiadni a következő lapot.

  • 'konstruktor(int N)' inicializálja a kártyapaklit, elhelyez benne N darab lapot minden lehetséges lapból (N értéke a játékosok számának 2-szerese)
  • 'megkever()' metódus, mely az inicializált pakli lapjait összekeveri
  • 'kovetkezo()' megadja, hogy mi a következő lap. Ha a pakli elfogyott, akkor ez kivételt dob

'Jatekos': van neve, pénze, és ismeri a 21-ezés szabályait. Ehhez megfelelő támogató eljárásai vannak. Ezen kívül le tud ülni valamely asztalhoz, és fel is tud állni ha úgy gondolja.

  • 'konstruktor(int penz, string nev)' inicializálja a játékost a megadott névvel, a megadott induló összeggel
  • 'beszall_e(int alap)' logikai értékű metódus, mely megadja, hogy ebbe a játékba a játékos beszáll-e, az 'alap' megadja, hogy az első két lap mennyibe fog kerülni
  • 'lapotker(int penz)' logikai értékű metódus, megadja, hogy a játékos kér-e még lapot. Az új lap 'penz' összegbe kerül
  • 'lapotkap(int lap)' megkapja az osztótól az adott értékű lapot
  • 'lapokOsszege()' megadja, hogy a játékosnál mekkora értékű lapok vannak összesen (őszintén)
  • 'levonas(int osszeg)' levonja a játékos pénzéből az adott összeget
  • 'nyeremeny(int osszeg)' hozzáadja a játékos pénzéből az adott összeget
  • 'felallit()' az osztó felállíthatja a hozzá leült játékost, ha csődöt jelent, vagy észreveszi a csalást
  • 'unatkozik()' ebben a körben nem indul játék ennél az osztónál. A játékos várakozhat tovább, vagy felállhat ettől az asztaltól (random esély, mely növekedhet, ha sokadik forduló óta nem indult el játék az adott bírónál)
  • 'hazakuld()' a barlang vezetősége egyszerűen hazaküldheti a játékost a nap végén
  • 'beenged()' a barlang vezetősége beengedhet egy játékost, ha van a teremben szabad hely

'CsalafintaJatekos': képes csalásra, vagyis más összeget jelent be, mint amely a nála lévő lapok összege

  • A 'Jatekos' osztály továbbfejlesztése, időnként (10% eséllyel) "csal", vagyis a lapokOsszege bejelentésekor valamilyen módon "javít" az eredményén (21-t vagy 22-t mond be)

'Oszto': ő kezeli az adott asztal kasszáját. Saját listája van a hozzá leült játékosokról, és vezényli a játékot. Kihiredeti a nyertest, átadja a nyereményt, levonja a játékosoktól az összegeket is.

  • 'konstruktor(int osszeg, int alap, int lap)' létrehoz egy osztót adott induló banki összeggel, egy játékba beszállás 'alap' dollárba kerül, egy további lap pedig 'lap' dollárba kerül.
  • 'jatekosLeul(Jatekos J)' logikai fv, leül egy játékos az asztalához. Egy osztó maximum 4 játékossal képes játszani. A további játékosokat nem engedi leülni.
  • 'jatekosFelall(Jatekos J)' egy játékos feláll az asztalától
  • 'jatekBonyolit()' az osztó lebonyolít egy játékot. Ennek során körbekérdezi a játékosokat ki akar beszállni, átadja a kezdőlapokat, megkérdezi kérnek-e új lapot, a végén felkéri a játékosokat mondják be az eredményüket, győzteseket értesíti a nyereményről, stb. Amennyiben a bank minuszba menne, értesíti a kártyabarlang tulajdonosát hogy mennyit vesztett a bank. Amennyiben nem ül legalább 2 játékos az asztalánál, úgy a játék nem kezdődik el, helyette a játékosoknak "viccet mesél" (unatkozik() hívása)
  • 'befejez()' a bank hívja meg ezen metódust, ha szerinte a bíró fejezze be a játékot. Ekkor a bíró felállítja az összes játékost az asztaltól.

'OsztoBiro': ügyesebb osztó, képes észrevenni ha egy játékos csal

  • az 'Oszto' osztály fejlesztése, ezen osztó ellenőrzi, hogy a játékosok igazságosan jelentik-e be a forduló végén mennyi a náluk lévő lapok összege

'BiztonsagiSzolgalat': saját listája van a játékteremből kitiltott játékosok neveiről. Ezen kívül van egy listája, milyen játékosok várakoznak az utcán belépésre. Képes ezen kívül valamely csaló játékost kirakni az utcára. E közben automatikusan felveszi annak a nevét a kitiltottak listájára

  • 'kitiltasHozzaad(string nev)' egy új kitiltott játékos nevének hozzáadása a listára
  • 'kitilt(Jatekos j)' egy játékos kivezettetése a teremből az utcára, neve automatikusan felkerül a listára ha még nem lenne rajta
  • 'jatekosHozzaad(Jatekos J)' egy új játékos érkezik az utcán várakozó tömegbe
  • 'jatekosBelephet()' megadja, hogy ki a következő az utcán várakozók közül, aki beléphet a terembe. Ez érkezési sorrendben történik, de kitiltott játékos nem léphet a terembe (az utcán várakozhat, azt szabad)

'KartyaBarlang': saját listája van a nála alkalmazásban lévő osztókról, és a játékbarlangban lévő játékosokról is (azokról is, akik játszanak, azokról is, akik még a helyüket keresik valamelyik asztalnál)

  • 'konstruktor(int osszeg, int letszam)' létrehoz egy játékbarlang példányt adott teljes összeggel, és megadhatjuk, hány játékos tartózkodhat a teremben maximum
  • 'biroBelep(Biro b)' új bíró vagy osztóbíró példány "alkalmazása" a játékbarlangban.
  • 'setalgat(oszto o)' minden játékost értesít a játékbarlang, hogy ha van kedve, sétálhat egyet az asztalok körül, leülhet a megadott osztóhoz ha akar, mert annál van szabad hely.
  • 'jatek()' ebben az eljárásban a vezetőség ellenőrzi az osztóit, és amennyiben valamely osztónál túl kevés, pláne negatív összeg lenne, akkor befejezteti az adott bíró működését. Egyébként minden működő osztóját értesíti, hogy lebonyolíthat egy játékot. Ha már nincs működő osztója (mindegyik becsődölt), akkor minden játékost hazaküld.
  • 'napiMenet()' egy ciklusban hívogatja a 'jatek()' és 'setalgat()' metódusokat ügyesen, aktivizálva a szabad játékosokat, és az osztókat. Abbahagyja ha már nincs működő osztó, vagy túl kevés a játékos, vagy eltelt 8 óra. Ha csaló játékost kell kirúgni, új játékost enged be a biztonsági szolgálaton keresztül.

Készítsünk olyan főprogramot, amely beolvassa text file-ból a szóba jöhető játékosok listáját. Minden sorban le van írva, hogy mi az adott játékos neve, mennyi pénze van, és hogy ő csaló-e vagy sem. Aztán beolvassa a szóba jöhető bírók neveit (név, és hogy ő egyszerű osztó-e vagy bíró-e). Aztán inicializálja a 'KartyaBarlang' példányt, átadja neki az osztókat. Inicializálja a 'biztonsági szolgálatot', átadja neki a játékosokat, majd elindítja a barlang napi működés ciklusát. A barlang, az osztók, a játékosok, a biztonsági szolgálat minden egyes eseményről írjon ki egy sort a képernyőre (lapot kért, mit kapott, felállt, leült, nyert, kivezették a teremből, stb). A log-ot text file-ba is írjuk ki ('StreamWriter').

A lap eredeti címe: „http://wiki.ektf.hu/wiki/Mp4/page14
Nézetek
nincs sb_3.145.130.31 cikk