Найти фуллхаус из списка и вернить индексы при вскрытии карт. Игра покер

Рейтинг: 1Ответов: 0Опубликовано: 24.02.2023

Делаю покер на 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);

Ответы

Ответов пока нет.