Diskuze: C# TExax Holdem Poker
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Velice stručně.
Setřídíš karty podle velikosti
Zjistíš a uložíš si hodnotu nejnižší karty jako i.
procházíš zbylé karty
Inkrementuješ o 1 hodnotu i a zkontroluješ, zda i == hodnotě karty.
Pokud ne, postupka není.
POkud cyklus projde, máš postupku.
Ahoj, to je moc pěknej a řekl bych i hodně těžký ukol. Můžu se zeptat
co děláš za školu ?
. Jinak
první na čem je potřeba se zamyslet je, bude to jenom na lokála a nebo přes
sít? Protože jeslti přes sít, tak doporučím nejdříve si postavit logiku
hry ,střídání hráčů, sdílení třídy balíček karet, karty na stole
atd. Pak máš balíček karet, udělal bych to jako něco list
<color,int> ... Pak rozdat karty, ty co rozdáš by měli z balíčku
zmizet, no a pak metody na hodnoty karet, hodně asi využiješ linq, kterým
budeš dělat selecty z objectů..podporuje i order, třeba pro situaci, kdy
hráč bere na vyšší kartu.. Když o tom takhle přemejšlím, musíš tam
mít vždy i porovnání největší karty u postupky, páru atd. Hodně
zajímavá funkce bude zkusit jeslti je to trojce karet nebo fullhouse
, no řikám není to jednoduchý,
teda pro mě by nebylo..
Mě to vyhodnocení nepřijde až tak těžký, přes linq dotaz se dá docela efektivně vyhledávat i co se týče kombinací. Vždy jde v podstatě o kombinaci 7mi karet, které si buď sdružíš podle hodnoty nebo barvy a pracuješ pak s celou skupinou. Mohlo by to vypadat například takto:
// karty podle hodnot do skupin
var dotazHodnoty = from p in pole
group p by p.Hodnota into pocty
select new { Nazev = pocty.Key, Pocet = pocty.Count(), Skupina = pocty};
to stejné obdobně i pro barvy
// karty podle barev do skupin
var dotazBarvy = from p in pole
group p by p.Barva into pocty
select new { Nazev = pocty.Key, Pocet = pocty.Count(), Skupina = pocty };
Následně si můžeš zjistit počty jednotlivých hodnot, přičemž se dívám na zastoupení víc jak jedno
foreach(var d in dotazHodnoty)
{
// zjištění dvojic, troji, čtveřic
foreach(var p in d.Skupina)
{
if (d.Pocet > 1)
{
Console.WriteLine("máš číslo:" + p.Hodnota.ToString() + " " + d.Pocet.ToString() + "-krát");
break;
}
}
}
obdobně i pro barvu přičemž hledám barvu zastoupenou víc jak 4x - jinak mě barva nezajímá
foreach (var d in dotazBarvy)
{
// zjištění barvy
foreach (var p in d.Skupina)
{
if (d.Pocet > 4)
{
Console.WriteLine("máš barvu: " + d.Nazev);
break;
}
}
}
Co se týče fullhousu, tak je potřeba seřadit hodnoty a smazat duplicitní prvky, protože ty ve fullhous nehrajou roli. Třeba by to šlo takhle, (jinak by to šlo i přes .Distinct(), ale nejsem si ted jistaj jak to přesně je u dvourozměrné hodnoty)
pole = pole.OrderBy(o => o.Hodnota).ToList();
// odstranění duplicitních prvků
for (int i = 1; i < pole.Count; i++)
{
if (pole[i - 1].Hodnota == pole[i].Hodnota)
{
pole.RemoveAt(i);
}
}
Zjistit fullhouse by se dalo třeba takto, největší problém tam je v tom, že se může vybírat až ze 7mi karet, takže se nedá podívat na nejmenší hodnotu a hledat o jednu větší, protože nemusí být fullhouse od nejmenší hodnoty. Pro ro je potřeba projet vždy první 3karty, pokud ani jedna nedokáže udělat fullhouse, tak tam není
// zjištění fullhousu
for (int i = 0; i < 3; i++ )
{
if(pole.Count() - i > 4)
if (pole[i].Hodnota + 4 == pole[i + 4].Hodnota)
{
Console.WriteLine("máš fullhouse:" + pole[i].Hodnota + " až " + pole[i + 4].Hodnota);
}
}
první kontrola if je zde pouze z důvodu, že je zde příliš duplicitních
karet, takže třeba jen 4 druhy hodnot. Následně stačí porovnat danou
hodnotu a zjistit jestli hodnota o 4 pozice dál je o 4 větší. Tohle se dá
díky tomu, že zde nejsou žádné duplicitní prvky a hodnoty jsou seřazené.

Ja bych doporucil pouzit knihovnicku. Viz treba http://www.codeproject.com/…and-Analysis - je to C# prepis poker.eval knihovnicky, ktera je velmi optimalizovana na rychlost (coz asi neocenis), ale hlavne se s ni strasne krasne pracuje a veci, ktere zminujes, jsou pomoci toho na jedno volani.
Pro inspiraci s dalsimi problemy muzes mrknout, jak se to resi v https://code.google.com/…ffin-muffin/ - je to multiplayer pokerovy server/client, ktery je pekne navrzeny a dobre naprogramovany. Takze veci ohledne prechodu stavu hry jsou tam moc krasne vyreseny a stoji za inspiraci.
Zobrazeno 5 zpráv z 5.
