基于单词随机实例化

问题描述 投票:-2回答:1

我有一个单词=“CAT”我有26个字母预制件A - Z - 预制阵列我想从预制件随机实例化6个预制件,所以B,L,T,C,A,T - 任何随机顺序,但我需要它包括构成单词cat的字母

我的第一个想法是使用字典/ hashmap将单词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(

     );
c++ arrays unity3d random hashmap
1个回答
2
投票

假设你有一个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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.