static int IndexCard(int who, Cards[] coloda, int number)Чтобы более точно определить причину ошибкиSystem.IndexOutOfRangeException
, которая продолжает возникать даже после внесения изменений в методIndexCard
, необходимо провести дополнительную диагностику. Пожалуйста, предоставьте участок кода, где используется методIndexCard
или где происходит обращение к элементам массиваcoloda
, чтобы я мог проанализировать более подробно и помочь вам найти и исправить ошибку.
Также, если у вас есть какие-либо другие подробности или сообщения об ошибке, пожалуйста, предоставьте их для более детального и точного анализа проблемы. Я готов помочь вам найти решение и устранить эту ошибку.
{
int count = 0;
for (int i = 0; i < coloda.Length; i++)
{
if (coloda.place == who)
{
count++;
if (count == number)
return i;
}
}
return -1;
}
class Program
{
static int Counter(int who, Cards[] coloda)
{
int count = 0;
for (int i = 0; i <= 35; i++)
{
if (coloda.place == who)
count++;
}
return count;
}
static int IndexCard(int who, Cards[] coloda, int number)
{
int count = 0;
for (int i = 0; i < coloda.Length; i++)
{
if (coloda.place == who)
{
count++;
if (count == number)
return i;
}
}
return -1;
}
static void printAll(int who)
{
}
static void Main(string[] args)
{
Random r = new Random();
Cards[] coloda = new Cards[36];
int temp = 0;
for (int j = 3; j <= 6; j++)
{
for (int i = 6; i <= 14; i++, temp++)
{
coloda[temp] = new Cards { mast = j, power = i, place = (int)Place.TABLE };
}
}
for (int i = 0; i <= 12; i++)
{
do
{
temp = r.Next(36);
} while (coloda[temp].place != (int)Place.TABLE);
if (i == 12)
coloda[temp].place = (int)Place.KOZ;
else
coloda[temp].place = (i % 2 == 0) ? (int)Place.ME : (int)Place.BOT;
}
int tempXMe = 0, tempXBot = 0;
for (int i = 0; i <= 35; i++)
{
if (coloda.place == (int)Place.ME)
coloda.Print(7 * tempXMe++, 4);
else if (coloda.place == (int)Place.BOT)
coloda.Print(7 * tempXBot++, 18);
else if (coloda.place == (int)Place.KOZ)
coloda.Print(0, 11);
}
ConsoleKeyInfo key;
int selectCard = 0, cardsOnTable = 0;
while (true)
{
key = Console.ReadKey();
switch (key.Key)
{
case ConsoleKey.LeftArrow:
for (int i = 0; i < 2 && selectCard > 1; i++)
{
if (i == 1)
selectCard--;
Cards.clearCard((int)Place.ME, selectCard);
coloda[IndexCard((int)Place.ME, coloda, selectCard)].Print(7 * selectCard - 7, 4 - i);
}
break;
case ConsoleKey.RightArrow:
for (int i = 0; i < 2 && selectCard < Counter((int)Place.ME, coloda); i++)
{
if (i == 1)
selectCard++;
if (selectCard == 0)
continue;
Cards.clearCard((int)Place.ME, selectCard);
coloda[IndexCard((int)Place.ME, coloda, selectCard)].Print(7 * selectCard - 7, 4 - i);
}
break;
case ConsoleKey.Enter:
if (coloda[IndexCard((int)Place.ME, coloda, selectCard)].place == (int)Place.ME)
{
Cards.clearCard((int)Place.ME, selectCard);
coloda[IndexCard((int)Place.ME, coloda, selectCard)].Print(7 * cardsOnTable + 10, 11);
coloda[IndexCard((int)Place.ME, coloda, selectCard)].place = (int)Place.TABLE;
cardsOnTable++;
}
break;
}
}