В общем, у меня есть список с двумя числами каждого числа, и я хочу случайным образом назначить одно из этих чисел каждой карте, которая создается. Это игра-головоломка для запоминания, где вы находите совпадения.
Игра работает нормально, когда у меня есть 2 gridRows и 4 gridCols, но если я изменю количество строк или столбцов, я получу: ArgumentOutOfRangeException: Index was вне зоны доступа. Должен быть неотрицательным и быть меньше размера коллекции. Название параметра: index, что не дает мне расширить игру. Я попытался добавить дополнительные числа в текущий список, но это, похоже, не сработало, а также этот способ не кажется очень эффективным, если я хочу иметь много строк и столбцов
Что я хочу сделать это взять список, затем перетасовать его содержимое каждый раз, когда я начинаю сопоставление, а затем до l oop через индексы по порядку (содержимое уже перемешано), когда я создаю экземпляр, это мой logi c, но не смог заставить его работать по какой-то причине ....
может кто-нибудь помочь мне расширить это и найти лучший способ хранения индекса, пожалуйста?
вот код:
public const int gridRows = 2;
public const int gridCols = 4;
public const float offsetX = 4f;
public const float offsetY = 5f;
public MainCard originalCard;
public Sprite[] images;
private void Start()
{
Vector3 startPos = originalCard.transform.position;
List<int> numbers = new List<int> { 0, 0, 1, 1, 2, 2, 3, 3 };
numbers = Shuffle(numbers);
for (int i = 0; i < gridCols; i++)
{
for (int x = 0; x < gridRows; x++)
{
MainCard card;
if (i == 0 && x == 0)
{
card = originalCard;
}
else
{
card = Instantiate(originalCard) as MainCard;
}
int index = x * gridCols + i;
int id = numbers[index];
card.ChangeSprite(id, images[id]);
float posX = (offsetX * i) + startPos.x;
float posY = (offsetX * x) + startPos.y;
card.transform.position = new Vector3(posX, posY, startPos.z);
}
}
List<T> Shuffle<T>(List<T> cards)
{
for (int i = 0; i < cards.Count; i++)
{
T temp = cards[i];
int randomIndex = Random.Range(i, cards.Count);
cards[i] = cards[randomIndex];
cards[randomIndex] = temp;
}
return cards;
}
}
}