Algoritmus na zjištění výherní kombinace v pokeru – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Algoritmus na zjištění výherní kombinace v pokeru – .NET – Fórum – Programujte.comAlgoritmus na zjištění výherní kombinace v pokeru – .NET – Fórum – Programujte.com

 

antybart0
Návštěvník
17. 5. 2012   #1
-
0
-

Dobrý den, nedávno jsem začal dělat knihovnu hry Texas Holdem Poker. Je téměř hotová, zbývá mi ještě dodělat algoritmus pro zjištění kombinace. Bohužel mě nenapadá žádný, programátorsky dobrý nápad. Nevěděl by jste někdo, jak se to dá jednoduše udělat? Nežádám kód, ale nepříliš těžký a prográmátorský návrh. Předem dík.
poznámka jak jsou karty tvořeny

public enum cislo
    {
        eso, ... kral
    }
public enum symbol
    {
        srdce, ... krize
     }

   public class karta
    {
        public symbol Sym;

        public cislo Cis;
     
        public karta(symbol s, cislo c)
        {
            this.Sym = s;
            this.Cis = c;
        }
    }

   public class balicek
   {
       List<karta> karta;
     
       public balicek()
       {
           karta = new List<karta>();
           karta srdcové_eso = new karta(symbol.srdce, cislo.eso);
           ...
      karta křížový_král = new karta(symbol.krize, cislo.kral);
           karta.Add(srdcové_eso);
      ...
      karta.Add(křížový_král);
        }

V mé variantě hraje hráč a PC. Varianta texas je taková že - každý dostane 2 karty a ty neukáže - jsou jenom jeho a později se na stůl vyloží 5 karet, které jsou společné pro všechny hráče. Takže výherní kombinace s bude vypočítávát ze sedmi karet(postupka má však maximálně 5)

Nahlásit jako SPAM
IP: 217.29.8.–
Doomista+1
Stálý člen
18. 5. 2012   #2
-
0
-

napadá mě jedině udělat si seznam těch kombinací a pak jednoduše použít if

Nahlásit jako SPAM
IP: 195.113.191.–
Na vše stačí iostream...
KIIV
~ Moderátor
+43
God of flame
18. 5. 2012   #3
-
+1
-
Zajímavé

ono tech kombinaci zase tolik neni ... chce to zjistit pocty stejnych karet a hodnoty, pak jeste jestli neni postupka... a az v pripade ze budou mit dva hraci napriklad full hand tak testovat kdo ma vetsi trojici (dvojice by to ovlivnit nemela - nestane se ze by byly dve trojice stejnych karet :D) -  pak uz se to da srovnavat podle priority.. co je vetsi u ktereho driv

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
RePRO0
Super člen
3. 6. 2012   #4
-
0
-

Zdravím,

jestli chceš zjistit o jakou výherní kombinaci jde, tak to není těžké zjistit.

Vezmeš hráčovy karty (2). Vezmeš všechny karty ze stolu (5).

Tudíž, budeš kombinovat a procházet ze 7 karet... :)

Já osobně bych to udělal tak, že bych si ke každé výherní kombinaci (vysoká karta, jeden pár, dva páry, trojice, postupka, barva, FH, poker, postupka v barvě a královská postupka v barvě) udělal metodu, která by vracela True, nebo False v rámci úspěšnosti. Je třeba si uvědomit, že pokud chytíme Full House, tak zároveň máme trojici. Proto musíme vyhodnocovat postupně dle priority.

Vidím, že to děláš v C#, tak zkusím tu myšlenku:

bool vysokaKarta()
{
	foreach($karty as $index => $hodnota) 
	{
    		// algoritmus pro hledání vysoké karty
		if (...) return true;
	}
	return false;
}

bool jedenPar()
{
	foreach($karty as $index => $hodnota) 
	{
    		// algoritmus pro hledání jednoho páru
		if (...) return true;
	}
	return false;
}

Pak někde v Mainu
=====

if (Poker.kralovskaPostupka()) 
{ 	
	máme královskou; 
};

if (Poker.postupkaBarva()) 
{ 
	máme postupku v barvě; 
};

a tak dále pro ostatní kombinace...

if (Poker.vysokaKarta()) 
{ 
	máme vysokou kartu;
};
Nahlásit jako SPAM
IP: 95.82.185.–
Software: C; C++; C#; Pascal; Delphi; Java Webdesign: PHP; MySQL; CSS; jQuery; Ajax; Javascript; OOP
metthal
~ Anonymní uživatel
27 příspěvků
3. 6. 2012   #5
-
0
-

Kolega co dal nadomnou moznost, tak hej, slo by to tak ale bolo by to vela, vela metod. Skor by som kazdemu hracovi dal nejakeho clena napriklad

int comboFlag;

a spravil by som si k tomu enum

public enum Combo
{
    dvojica = 0x1,
    trojica = 0x2,
    ...
    straight_flush = 0xXXX
}

pricom tie kombinacie by mali hodnotu podla bitshiftingu smerom vlavo (1,2,4,8,16,32...) no a spravil by som jednu metodu kde by som zacal zistovat co ma presne a nastavoval by som cez bitovy operator OR jeho comboFlag. Po prejdeni kazdeho hraca touto metodou mas zistene presne ake kombiancie ma hrac na ruke a vies vyhodnotit kto vyhral.

Nahlásit jako SPAM
IP: 217.144.18.–
antybart0
Návštěvník
3. 6. 2012   #6
-
0
-

no jsem rád že už se našlo řešení, ovšem mě tíží jedna věc a to vybrat ze zamíchaného listu karty se kterýma hrát. Mám tohle: 

public List<karta> hraciKarty;
        public void kartyHra()
        {

            for (int i = 0; i < 9; i++)
            {
                karta naHru = balicek[i];
                hraciKarty.Add(naHru);//přidat do listu 
                balicek.Remove(naHru);//smazat z listu
                hraciKarty.Sort();//seřadit, ale to asi nejde co?
            }
        }
Nahlásit jako SPAM
IP: 217.29.8.–
KIIV
~ Moderátor
+43
God of flame
3. 6. 2012   #7
-
0
-

Budes se muset podivat, co Sort ocekava... mozna to bude chtit jen pretizit nejaky operator (abys dostal dve reference na karty a jen vratil, jestli je prvni vetsi nez druha.. )

Nahlásit jako SPAM
IP: 62.245.85.–
Program vždy dělá to co naprogramujete, ne to co chcete...
antybart0
Návštěvník
3. 6. 2012   #8
-
0
-

#7 KIIV
ten sort tedka neřesím, je to ostatní dobře?

Nahlásit jako SPAM
IP: 217.29.8.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Podobná vlákna

Kombinace — založil David

Kombinace — založil fcelik

Kombinace podmnožin — založil Jakub Král

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý