J'ai une fonction de vide qui a beaucoup de cas dans les déclarations et tous sont nécessaires, je ne peux vraiment pas enlever quoi que ce soit. Mais j'ai l'impression que ça pourrait être mieux fait. En utilisant certains LINQ.Where
, des classes ou quelque chose comme ça. Je souhaite optimiser et d'exprimer void Smooth
dans le plus petit nombre de caractères possibles:optimisation Méthode
void Smooth(ref int botChips, ref bool botTurn, Label botStatus, int name, int n, int r) {
Random rand = new Random();
int rnd = rand.Next(1, 3);
if (rounds == 0 || rounds == 1)
{
if (call <= 0)
{
Check(ref botTurn, botStatus);
}
else
{
if (call >= RoundN(botChips, n))
{
Call(ref botChips, ref botTurn, botStatus);
}
else
{
if (botChips >= call * 2)
{
Raise *= 2;
Raised(ref botChips, ref botTurn, botStatus);
}
else
{
Call(ref botChips, ref botTurn, botStatus);
}
}
}
}
if (rounds == 2 || rounds == 3)
{
if (call <= 0)
{
if (rnd == 1)
{
Raise = RoundN(botChips, r);
Raised(ref botChips, ref botTurn, botStatus);
}
else if (rnd!=1 && rounds==2)
{
Check(ref botTurn, botStatus);
}
}
else
{
if (call >= RoundN(botChips, r))
{
if (botChips > call)
{
Call(ref botChips, ref botTurn, botStatus);
}
if (botChips <= call)
{
raising = false;
botTurn = false;
botChips = 0;
botStatus.Text = "Call " + call;
tbPot.Text = (int.Parse(tbPot.Text) + call).ToString();
}
}
else
{
if (Raise <= (RoundN(botChips, r))/2)
{
Raise = RoundN(botChips, r);
Raised(ref botChips, ref botTurn, botStatus);
}
else
{
Raise *= 2;
Raised(ref botChips, ref botTurn, botStatus);
}
}
}
}
}
RoundN
procédé
private static double RoundN(int sChips, int n) {
double a = Math.Round((sChips/n)/100d, 0) * 100;
return a;
}
Fold
procédé
private void Fold(ref bool sTurn, ref bool SFTurn, Label sStatus) {
raising = false;
sStatus.Text = "Fold";
sTurn = false;
SFTurn = true;
}
Check
métho d
private void Check(ref bool cTurn, Label cStatus) {
cStatus.Text = "Check";
cTurn = false;
raising = false;
}
Call
méthode
private void Call(ref int sChips, ref bool sTurn, Label sStatus) {
raising = false;
sTurn = false;
sChips -= call;
sStatus.Text = "Call " + call;
tbPot.Text = (int.Parse(tbPot.Text) + call).ToString();
}
Raised
méthode
private void Raised(ref int sChips, ref bool sTurn, Label sStatus) {
sChips -= Convert.ToInt32(Raise);
sStatus.Text = "Raise " + Raise;
tbPot.Text = (int.Parse(tbPot.Text) + Convert.ToInt32(Raise)).ToString();
call = Convert.ToInt32(Raise);
raising = true;
sTurn = false;
}
Avez-vous essayé le profilage? BTW Je définirais le 'Random' qu'une seule fois et diviserais cette grande méthode en quelques plus petites (' Ctrl + R, M') –
Je sais que ce n'est pas ce que vous avez demandé, mais c'est une utilisation très dangereuse de 'new Random' ; si vous appelez 'Smooth' dans une boucle, il pourrait utiliser la même graine. Vous devriez faire 'rand' une variable d'instance et l'initialiser dans le constructeur. –
Merci pour votre réponse! Non je n'ai pas essayé le profilage et je vais corriger le 'nouveau Random' – kopelence