Создание наугад на основе слова - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть слово = "CAT". У меня 26 префабов алфавита. A - Z - массив префабов. Я хочу, чтобы случайным образом создать 6 префабов из префаба, так что B, L, T, C, A, T - в любом произвольном порядке.но мне нужно включить буквы, составляющие слово cat

Моей первой мыслью было использование словаря / хэш-карты для сопоставления слова cat с позицией в массиве, т.е. C = [2] A = [0] T [], но hashmap / dictionary принимает только пару ключ-значение, но я предоставляю ему более одного значения, 3 буквы, необходимые

Это запрограммировано в единстве, поэтому мои префабы уже находятся в массиве буквэто просто заставляет их включить мое правописание.

public GameObject[] letters;
void Start() {

    int x;

    /* for loop execution */
    for (x = 0; x < 5; x = x + 1)
    {

        CreateCubes();
    }
}

     public void CreateCubes()
    {

        GameObject obj = Instantiate(letters[Random.Range(0, 26)]);
        obj.transform.position = new Vector3(

     );

1 Ответ

0 голосов
/ 19 февраля 2019

Если у вас есть все префабы в массиве GameObject[], вы можете использовать его для автоматического заполнения словаря

public GameObject[] prefabs = new GameObject[26];

private Dictionary<char, GameObject> CharToPrefab = new Dictionary<char, GameObject>(26);

private void Start()
{
    for (var i = 0; i < 27; i++)
    {
        // add 0 to 26 to the start character A
        // results in A-Z
        CharToPrefab[(char)('A' + i)] = prefabs[i];
    }
}

Чем вы можете получить доступ к определенному префабу, вызвав

CharToPrefab[character];

Для генерации экземпляров (простейшая версия без учета удвоений) вы можете сделать, например:

public void RandomLetters(string word)
{
    // 1. spawn the minimum required letters to build the word
    foreach (var letter in word)
    {
        var obj = Instantiate(CharToPrefab[letter]);
        // maybe use obj for something e.g. shuffel all instantiated objects positions
    }

    // 2. fill the rest with random letters
    // assuming always same amount as word letters
    var rand = new System.Random();
    foreach (var letter in word)
    {
        // pics a number from 0 to 26
        // and adds it to the char -> results in A-Z
        var randomChar = (char)('A' + rand.Next(0, 27));
        var obj = Instantiate(CharToPrefab[randomChar]);
        // maybe use obj for something e.g. shuffel all instantiated objects positions
    }
}
...