В начале игры создаются 4 случайные карты, которые хранятся в массиве myArray. При прохождении цикла иногда создаются одинаковые карты. Как можно решить данный вопрос. Наверно вопрос легкий, но не могу его решить. Видимо вопрос не решим придется решать его по кривому(
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ControllerCardHero : MonoBehaviour {
public GameObject[] myArray = new GameObject[6];
void Start () {
for ( int i = 0; i < 4; i++) {
int rand = Random.Range (0, myArray.Length);
Instantiate (myArray [rand], myArray [rand].transform.position, myArray [rand].transform.rotation);
}
}
}
по коду у вас получается, что всего карт на выбор у вас 6 (в myArray хранятся все имеющиеся карты). А в момент старта игры вы инициализируете 4 из них в случайном порядке. И удивляетесь что при следующем раунде у вас 2 карты совпадают с прошлым раундом...Это как я понимаю не совсем действительный код и на самом деле в myArray намного больше карт?
Сделаю предположение что на самом деле в myArray намного больше 6 карт, тогда можно применить связанный список, как хранилище "доступных к выбору карт", и получать случайный элемент путем вызова метода Next случайное кол-во раз, и после выбора удалять от из этого списка чтобы он не участвовал в следующем раунде. Когда в этом списке останется меньше карт, чем необходимо - необходимо переинициализировать его снова из массива myArray.
Вы можете сказать что не оптимально вызывать метод Next случайное кол-во раз, но я уверен что это использование операции О(n) не самое страшное в проекте, и всяко лучше пытаться отсеять уже выбранный элемент путем поиска его в другом списке... так как в этом случае в сложность будет точно выше О(n)(хотя математически я вам это не докажу), так как псевдослучайное число с большей вероятностью к концу колоды начнет выдать сериями уже игранные карты и выбор последних карт будет крайне долог.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей