Diskuze: Velký nevyřešitelný problém s programováním Pokeru
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 15 zpráv z 15.
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.
Můžeš spíše někde upnout celý solution? Tohle je fajn, ale koukat na
to ve VS je efektivnější než takhle na pastebinu 
Tipuju problém tady:
public List<T> Randomize<T>(List<T> list)
{
List<T> randomizedList = new List<T>();
Random rnd = new Random();
while (list.Count > 0)
{
int index = rnd.Next(0, list.Count); //pick a random item from the master list
randomizedList.Add(list[index]); //place it at the end of the randomized list
list.RemoveAt(index);
}
return randomizedList;
}
Tam problém není
Problém
je určitě v SolveCards().
Tady je solution: https://www.dropbox.com/…km/Poker.rar?dl=0
Podle mne je problém tohle:
public List<int[]> SerializeCards(List<int[]> input)
{
for (int j = 0; j < input.Count(); j++)
{
for (int i = 0; i < input.Count() - 1; i++)
{
if (input[i][0] > input[i + 1][0])
{
var pom = input[i][0];
var pom2 = input[i][1];
input[i][0] = input[i + 1][0];
input[i][1] = input[i + 1][1];
input[i + 1][0] = pom;
input[i + 1][1] = pom2;
}
}
}
return input;
Tipl bych si, že celou dobu pracuješ s listem, který jsi předal referencí, takže ve skutečnosti si vrtáš do stejných dat. Zkus jednoduše překopírovat input do nového listu, a s tou novou kopií potom pracuj.
V metodě Randomize jsi to pořešil pěkně. Vracíš jiný List než byl předchozí. Tak to ale u té první metody není. Tam měníš v místě List, na který si jen předáváš odkaz.
public List<T> Randomize<T>(List<T> list)
{
List<T> randomizedList = new List<T>();
Random rnd = new Random();
while (list.Count > 0)
{
int index = rnd.Next(0, list.Count); //pick a random item from the master list
randomizedList.Add(list[index]); //place it at the end of the randomized list
list.RemoveAt(index);
}
return randomizedList;
}
Viz například tento jednoduchý příklad:
class Program
{
public static void Main(string[] args)
{
var test = new List<int>();
test.Add(10);
var test2 = PridejHodnotu(test);
Console.WriteLine(test.Count());
Console.WriteLine(test2.Count());
Console.ReadLine();
}
static List<int> PridejHodnotu(List<int> seznam)
{
seznam.Add(10);
return seznam;
}
Tipl bych si, že problém bude někde v tomhle.
To jsem si taky myslel, akorát zkus to opravit sám
Nefunguje to
Už jsem to zkoušel
Dobrá, jakým způsobem vyvolám ten tvůj bug? Jediné co tam můžu dělat
je kliknout na button1 a nevím na co koukat 
Po kliknutí se vygenerují karty. Zobrazí se obrázky. Pak se provede
solve.
Potom se do textových polí udělá to samé co se udělalo předtím (Pět
karet) akorát textově.
Měli by to být naprosto stejné hodnoty! Zkus smazat řádek kde se volá
SolveCards. Pak to to ukazuje to co má.
Ted sice nevím, na koho jsi reagoval, ale souhlasím s Pakem, že ta aplikace něco provede, ale pak už to začíná být chaotické. Jediné, co jsem dokázal, bylo mačkat jediný button a dívat se, jak se karty mění.
Já už to chápu, jen to píšeš všechno složitě a hlavně je to jedna
velká špageta 
Ano. Karty se mění. Ale textové pole které jsou na kartách jsou jiné! Mají být naprosto stejné, ale jsou seřazené od nejmenší po největší!
public List<int[]> SerializeCards(List<int[]> input)
{
List<int[]> output = new List<int[]>(input);
for (int j = 0; j < output.Count(); j++)
{
for (int i = 0; i < output.Count() - 1; i++)
{
if (output[i][0] > output[i + 1][0])
{
var pom = output[i];
output[i] = output[i + 1];
output[i + 1] = pom;
}
}
}
return output;
}
Musíš si prohazovat prvky a né hodnoty na referenčním typu. Právě proto, že je pole referenční typ, tak ty potom prohozením hodnot změníš úplně všude nějakou kartu X (která je typu int[2]) a kartu Y(která je typu int[2]).
Je to úplně stejný případ, jako kdybys měl tohle:
int[] card1 = new int[] {1,2};
int[] card2 = card1;
card1[0] = 3;
Výsledek by jsi asi očekával jako {3,2} a {1,2}, ale protože to jsou reference, tak máš karty {3,2} a {3,2}.
Mimochodem, když jsi mluvil o tom, že karty zmizí, tak jsem koukal na místa v prgoramu, kde něco mažeš a mezi námi, ta randomize metoda není úplně korektní.
Aha!! Tak to mi nikdo nikdy neřekl že to takhle funguje! 
Mockrát děkuji pánové
Bez vás bych u počítače strávil celej život 
Jinak kdybys to chtěl vylepšit (z programátorského hlediska), tak si vytvoř minimálně něco takového:
struct Card{
public int Value;
public CardType Type;
public Card(int v, CardType t)
{
Value = v;
Type = t;
}
}
enum CardType{
Srdce,
Piky,
Trefy,
Kary
}
Tam by to chtělo anglické názvy, ale nechce se mi to překládat 
Zobrazeno 15 zpráv z 15.