Kodim hru Black Jack v C# a mam tam jednu metodu ktora vracia podla kombinacie kariet optimalny tah hraca, problem je ze metoda je dost dlha a tazko citatelna...
Chcem sa spytat ci by sa dala este nieako zjednodusit...
+ by som chcel pouzit unit test na tuto metodu.. avsak kombinacii je strasne vela a kontrola je ties narocna ...
tu je obrazok podla ktoreho som vytvoril metodu Kod je tu
Kód: Vybrať všetko
public RozhodnutieHraca OptimalDecision()
{
Karta krupier = _round.KrupieroveKarty[0];
Karta k1 = _round.HracoveKarty[0];
Karta k2 = _round.HracoveKarty[1];
ushort kombinacia = DajLepsiuKombinaciu(_round.HracoveKarty);
// A,A
if (k1.HodnotaKarty == HodnotaKarty.Ace &&
k2.HodnotaKarty == HodnotaKarty.Ace)
return RozhodnutieHraca.Split;
// 8,8
if (k1.HodnotaKarty == HodnotaKarty.Eight &&
k2.HodnotaKarty == HodnotaKarty.Eight)
return RozhodnutieHraca.Split;
// 7,7
if (k1.HodnotaKarty == HodnotaKarty.Seven &&
k2.HodnotaKarty == HodnotaKarty.Seven)
{
if (krupier.HodnotaKarty == HodnotaKarty.Ace)
return RozhodnutieHraca.Hit;
if (krupier.HodnotaKarty.Hodnota <= 7)
return RozhodnutieHraca.Split;
return RozhodnutieHraca.Hit;
}
// 6,6
if (k1.HodnotaKarty == HodnotaKarty.Six &&
k2.HodnotaKarty == HodnotaKarty.Six)
{
if (krupier.HodnotaKarty == HodnotaKarty.Ace)
return RozhodnutieHraca.Hit;
if (krupier.HodnotaKarty.Hodnota <= 6)
return RozhodnutieHraca.Split;
return RozhodnutieHraca.Hit;
}
// 9, 9
if (k1.HodnotaKarty.Hodnota == 9 &&
k2.HodnotaKarty.Hodnota == 9)
{
if (krupier.HodnotaKarty.Hodnota == 7 ||
krupier.HodnotaKarty.Hodnota >= 10 ||
krupier.HodnotaKarty.Hodnota == 1)
return RozhodnutieHraca.Stand;
return RozhodnutieHraca.Split;
}
// 17+
if (kombinacia >= 17)
return RozhodnutieHraca.Stand;
// 8-
if (kombinacia < 9)
return RozhodnutieHraca.Hit;
//12 - 16
if (kombinacia > 11 &&
kombinacia < 17)
{
if (krupier.HodnotaKarty.Hodnota >= 7)
return RozhodnutieHraca.Hit;
if (kombinacia == 12 && (krupier.HodnotaKarty.Hodnota <= 3))
return RozhodnutieHraca.Hit;
return RozhodnutieHraca.Stand;
}
// X,X A
if (krupier.HodnotaKarty == HodnotaKarty.Ace)
return RozhodnutieHraca.Hit;
// 5, 5
if (k1.HodnotaKarty == HodnotaKarty.Five &&
k2.HodnotaKarty == HodnotaKarty.Five)
{
if (krupier.HodnotaKarty.Hodnota <= 9)
return RozhodnutieHraca.Double;
return RozhodnutieHraca.Hit;
}
// 4, 4
if (k1.HodnotaKarty == HodnotaKarty.Four &&
k2.HodnotaKarty == HodnotaKarty.Four)
{
if (krupier.HodnotaKarty.Hodnota == 5 ||
krupier.HodnotaKarty.Hodnota == 6)
return RozhodnutieHraca.Split;
return RozhodnutieHraca.Hit;
}
// 3,3; 2,2
if (k1.HodnotaKarty.Hodnota<=3 &&
k2.HodnotaKarty.Hodnota<=3)
{
if (krupier.HodnotaKarty.Hodnota <= 7)
return RozhodnutieHraca.Split;
return RozhodnutieHraca.Hit;
}
// x,x, 5,6
if (krupier.HodnotaKarty == HodnotaKarty.Six ||
krupier.HodnotaKarty == HodnotaKarty.Five)
{
return RozhodnutieHraca.Double;
}
//A,7; 7,A
if ((k1.HodnotaKarty == HodnotaKarty.Ace && k2.HodnotaKarty == HodnotaKarty.Seven) ||
(k2.HodnotaKarty == HodnotaKarty.Ace && k1.HodnotaKarty == HodnotaKarty.Seven))
{
if(new ushort[]{2, 7, 8}.Contains(krupier.HodnotaKarty.Hodnota))
return RozhodnutieHraca.Stand;
if (new ushort[] { 3,4 }.Contains(krupier.HodnotaKarty.Hodnota))
return RozhodnutieHraca.Double;
return RozhodnutieHraca.Hit;
}
// 10
if (kombinacia == 10)
{
if(krupier.HodnotaKarty.Hodnota== 10)
return RozhodnutieHraca.Hit;
return RozhodnutieHraca.Double;
}
// 11
if (kombinacia == 11)
return RozhodnutieHraca.Double;
// xx 7+
if(krupier.HodnotaKarty.Hodnota>=7)
return RozhodnutieHraca.Hit;
if(krupier.HodnotaKarty == HodnotaKarty.Two)
return RozhodnutieHraca.Hit;
if(kombinacia==9)
return RozhodnutieHraca.Double;
if( (k1.HodnotaKarty == HodnotaKarty.Ace && k2.HodnotaKarty == HodnotaKarty.Six) ||
(k2.HodnotaKarty == HodnotaKarty.Ace && k1.HodnotaKarty == HodnotaKarty.Six) )
return RozhodnutieHraca.Double;
if (krupier.HodnotaKarty == HodnotaKarty.Four)
{
if(new ushort[]{4,5}.Contains(k1.HodnotaKarty.Hodnota) ||
new ushort[]{4,5}.Contains(k2.HodnotaKarty.Hodnota))
return RozhodnutieHraca.Double;
}
return RozhodnutieHraca.Hit;
}