Dobrý deň. Prosím vás, mohli by ste mi poradiť ako vyhodnotiť výsledok piškvoriek? Či sú pri sebe tri znaky. Tak ako v piškvorkach. Ako by sa to dalo spraviť?
Fórum › .NET
Piškvorky-vyhodnocovanie
Asi pred rokem sem do skoly delal projekt prave hru piskvorky ... takze ti pomuzu a dam sem muj algoritmus na vyhodnoceni ....
public bool ZjistiXorO(int ID1, int ID2, char XorO)
{
int PocetXorO = 0;
int i = ID1;
int a = ID2;
while (HraciPole[i + 4, a + 4] == XorO) // Svisle Nahoru
{
PocetXorO++;
i--;
if (PocetXorO == 5) return true;
}
i = ID1 + 1;
while (HraciPole[i + 4, a + 4] == XorO) // Svisle Dolu
{
PocetXorO++;
i++;
if (PocetXorO == 5) return true;
}
PocetXorO = 0;
i = ID1;
a = ID2;
while (HraciPole[i + 4, a + 4] == XorO) // Vodorovne Doleva
{
PocetXorO++;
a--;
if (PocetXorO == 5) return true;
}
a = ID2 + 1;
while (HraciPole[i + 4, a + 4] == XorO) // Vodorovne Doprava
{
PocetXorO++;
a++;
if (PocetXorO == 5) return true;
}
PocetXorO = 0;
i = ID1;
a = ID2;
while (HraciPole[i + 4, a + 4] == XorO) // 45° Doleva
{
PocetXorO++;
i++;
a--;
if (PocetXorO == 5) return true;
}
i = ID1 - 1;
a = ID2 + 1;
while (HraciPole[i + 4, a + 4] == XorO) // 45° Doprava
{
PocetXorO++;
i--;
a++;
if (PocetXorO == 5) return true;
}
PocetXorO = 0;
i = ID1;
a = ID2;
while (HraciPole[i + 4, a + 4] == XorO) // 135° Doleva
{
PocetXorO++;
i--;
a--;
if (PocetXorO == 5) return true;
}
i = ID1 + 1;
a = ID2 + 1;
while (HraciPole[i + 4, a + 4] == XorO) // 135° Doprava
{
PocetXorO++;
i++;
a++;
if (PocetXorO == 5) return true;
}
return false;
}
K hracimu poli pricitam +4 z duvodu aby nebyl index mimo hranici pole kdyz je treba Index 0,0 tak to nejde do minusu ... samozdrejme si to uprav podle toho jak mas vytvoreny 2D pole ...
#7 Peter
na piškvorky o třech polích by se hodil algoritmus Minimax
Mutagen ti ukazal spravne reseni nicmene jednodussi by asi bylo, kdyby si nejdrive zkontroloval vsechny radky, urcil si smer, kterym ta rada vede a testoval jen ten jeden smer misto vsech...
Asi zhruba takto... samozrejme jeste v nejakym cyklu pro vsechny smery. Nezkousel sem to melo by to ale fungovat
if (pole[s1 + 1, s2].Text == "×" && s1 + 1 < 10)
{
for (int i = 0; i < 4; i++)
{
if (pole[s1 + 1 + i, s2].Text == "×" && s1 + 1 + i < 10)
p++;
else
break;
}
}
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Piškvorky — založil rundll32.exe
Piskvorky v Pythonu — založil Pepa Rohlik
Piškvorky v PHP — založil pc_manik
Moderátoři diskuze