NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Ondřej Krsička:29.3.2016 18:42

Ahoj, v kódu níže mám takovou podivnost, se kterou si nevím rady. Spustím program, v Mainu do pole nic nepíšu, ale stejně jsou v něm hodnoty. Nevím co dělat, je to strašně divný. Prosím o pomoc.

http://www.itnetwork.cz/dev-lighter/704

 
Odpovědět
29.3.2016 18:42
Avatar
Ondřej Krsička:29.3.2016 18:44

Kdyby vás ale napadlo i cokoli jiného k programu, sem s tím! :-)
EDIT: Jo, v názvech je diakritika, i když se říká, že tam nemá být. (ale když je to česky, tak je to snad i jedno...)

Editováno 29.3.2016 18:47
 
Nahoru Odpovědět
29.3.2016 18:44
Avatar
Odpovídá na Ondřej Krsička
Drahomír Hanák:29.3.2016 19:14

Zkoušel jsi program krokovat? Je hodně užitečné naučit se s debuggerem. Zvlášť ve VisualStudiu se s ním pracuje pěkně.

K programu: pole je v C# vždy referenční datový typ. To znamená, že všechny funkce v tvém programu pracují s tou samou pamětí. Funkce Tahni tak v každém kroku Minimaxu změní obsah toho pole, které máš deklarované v Main, což asi není to, co jsi chtěl. Pole můžeš třeba kopírovat (pokud neprohledáváš do nějaké velké hloubky a stav hry je rozumně velký, tak s tím nebude problém) nebo stav hry po tom, co se vrátíš z rekurze, vrátit zpět na původní hodnotu (což je v tomhle případě taky dost jednoduché).

Pokud tě tohle téma zajímá, tak bych ti doporučil přečíst si něco o alfa beta ořezávání (v angličtině "alpha-beta pruning"). Je to o něco těžší na pochopení něž jen klasický minimax, ale ušetří to spoustu práce, pokud budeš prohledávat nějaký větší stavový prostor.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
29.3.2016 19:14
Avatar
Odpovídá na Drahomír Hanák
Ondřej Krsička:29.3.2016 19:58

Aha, referenční typ. V tom bude zakopaný pes, díky. Takže by ve fce Tahni mohla vypadat nějak takto?

Táhni(pole, x, y, hraje)
{
     pole2 = pole;
     pole2[x, y] = hraje;
     return pole2;
}

Je to spíš pseudokód, psáno na mobilu.

Editováno 29.3.2016 19:59
 
Nahoru Odpovědět
29.3.2016 19:58
Avatar
Odpovídá na Ondřej Krsička
Luboš Běhounek Satik:29.3.2016 20:50

Pole můžeš zkopírovat třeba přes

Array.Copy();

to je asi nejrychlejší bezpečný způsob, pak už jedině Buffer.BlockCopy() nebo přímo windowsácké CopyMemory().

Nahoru Odpovědět
29.3.2016 20:50
https://www.facebook.com/peasantsandcastles/
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.