Найти фуллхаус из списка и вернить индексы при вскрытии карт. Игра покер
Делаю покер на C#. Проблема заключается в том, что, при вскрытии и поиске комбинаций, программа накрывается медным тазом со словами "OutOfMemoryException: Out of memory". Вот код
private List<int> FullHouse(List<int> x)
{
int i = 0;
int u = 0;
int i2 = 0;
var z = new List<int>(5); // index
var z1 = new List<int>(3);
var z2 = new List<int>(3);
var z3 = new List<int>(3);
var z4 = new List<int>(3);
while (i < x.Count)
{
if (x[i] != 0)
{
z1 = x.FindAll(element => element == x[i]);
if (z1.Count == 3)
{
int i3 = 0;
while (i3 < z1.Count)
{
int n = x[i];
u = x.IndexOf(n);
z3.Add(u);
x[u] = 0;
}
}
else
{
i++;
}
}
else
{
i++;
}
}
while (i2 < x.Count)
{
if (x[i2] != 0)
{
z2 = x.FindAll(element => element == x[i2]);
if (z2.Count > 1)
{
int i4 = 0;
while (i4 < z2.Count)
{
int n = x[i2];
u = x.IndexOf(n);
z4.Add(u);
x[u] = 0;
}
}
else
{
i2++;
}
}
else
{
i2++;
}
}
if (z2.Count == 3 && z2[0] > z1[0])
{
z = z4;
z.Add(z3[0]);
z.Add(z3[1]);
}
else
{
z = z3;
z.Add(z4[0]);
z.Add(z4[1]);
}
return (z);
}
Метод принимает список из карт на столе + карты игрока. Каждая карта (int 1 - 13), масть не учитывается. На выходе метод возвращает индексы карт которые входят в фулл хаус.
Как это переписать чтобы программа не пыталась убить компьютер?
Вылетает на строке
z4.Add(u);
Источник: Stack Overflow на русском