Не повторяемые числа при цикличной рандомизировании числа в заданном диапазоне?

146
16 августа 2021, 01:30

В начале игры создаются 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);
        }           
    }
}
Answer 1

по коду у вас получается, что всего карт на выбор у вас 6 (в myArray хранятся все имеющиеся карты). А в момент старта игры вы инициализируете 4 из них в случайном порядке. И удивляетесь что при следующем раунде у вас 2 карты совпадают с прошлым раундом...Это как я понимаю не совсем действительный код и на самом деле в myArray намного больше карт?

Сделаю предположение что на самом деле в myArray намного больше 6 карт, тогда можно применить связанный список, как хранилище "доступных к выбору карт", и получать случайный элемент путем вызова метода Next случайное кол-во раз, и после выбора удалять от из этого списка чтобы он не участвовал в следующем раунде. Когда в этом списке останется меньше карт, чем необходимо - необходимо переинициализировать его снова из массива myArray.

Вы можете сказать что не оптимально вызывать метод Next случайное кол-во раз, но я уверен что это использование операции О(n) не самое страшное в проекте, и всяко лучше пытаться отсеять уже выбранный элемент путем поиска его в другом списке... так как в этом случае в сложность будет точно выше О(n)(хотя математически я вам это не докажу), так как псевдослучайное число с большей вероятностью к концу колоды начнет выдать сериями уже игранные карты и выбор последних карт будет крайне долог.

READ ALSO
Помогите подключить EntityFramework к SQLite в Unity

Помогите подключить EntityFramework к SQLite в Unity

Пытаюсь работать с базой данных SQLite при помощи EntityFramework на UnityНо получаю исключение:

381
Отправка ICMP пакетов

Отправка ICMP пакетов

Как отправить ICMP пакет на сервер?

291
Создание нового объекта сущности ADO Model

Создание нового объекта сущности ADO Model

У меня есть база данных SQL с таблицами, я создаю Модель ADONET EDM, получаю всю базу данных в виде сущностей

127
MySQL выборка из двух таблиц

MySQL выборка из двух таблиц

подскажите, как с помощью SQL запроса получить два поля из разных таблиц

241