Для цикла не выполняется весь код - без ошибок - PullRequest
0 голосов
/ 08 июля 2019

https://simmer.io/@JammerLamma/~c09dd45e-0528-01ce-e641-e4a56fb9cfed

https://github.com/JammerLamma/Number-Muncher-Clone

Я создаю клон числовых мунчеров, и целочисленные переменные не назначаются должным образом.Он работает в нескольких играх, но после нескольких выигрышей и / или нажатия кнопки «Выйти» и выбора другой игры кажется, что цикл for проходит правильно.Игра говорит, что есть 5 maxCorrect, и correctOnBoard также установлено на 5, поэтому я предполагаю, что цикл проходит 5 раз, однако только 4 плитки устанавливаются как правильные, затем иногда 2 или 4, но никогда 5 снова.Он всегда работает так, как задумано в первой игре.

Если я закомментирую // AssignRest ();проблема все еще сохраняется.

public void GenerateEven()
{
    //GameObject smasher = Instantiate(smasherPF, transform.position, transform.rotation);
    remainingNumbers = totalTiles - maxCorrect;
    GetLists();
    GetTiles();
    AssignEven();
    RemoveDuplicates(evenNumbers);
    AssignRest();
}

private void AssignEven()
{
    int maxCorrect = 5;
    for (int i = 1; i <= maxCorrect; i++)
    {
        randomChild = children[UnityEngine.Random.Range(0, children.Count)];
        int maxLength = evenNumbers.Count;
        int tempTileNum = evenNumbers[UnityEngine.Random.Range(0, maxLength)];
        randomChild.GetComponent<Tile>()._TileNumber = tempTileNum;
        randomChild.GetComponent<Tile>()._IsCorrect = true;
        correctOnBoard++;
        randomChild.GetComponent<SpriteRenderer>().sprite = numberSprite[tempTileNum - 1];
        Debug.Log(tempTileNum);
    }
}

Некоторые вещи сериализуются для целей отладки.Все списки генерируются правильно.

1 Ответ

0 голосов
/ 08 июля 2019

Изменен код на

private void AssignEven()
{
    for (int i = 1; i <= maxCorrect;)
    {
        randomChild = children[UnityEngine.Random.Range(0, children.Count)];

        if(randomChild.GetComponent<Tile>()._IsCorrect == false)
        {
            int maxLength = evenNumbers.Count;
            int tempTileNum = evenNumbers[UnityEngine.Random.Range(0, maxLength)];
            randomChild.GetComponent<Tile>()._TileNumber = tempTileNum;
            randomChild.GetComponent<Tile>()._IsCorrect = true;
            correctOnBoard++;
            randomChild.GetComponent<SpriteRenderer>().sprite = numberSprite[tempTileNum - 1];
            Debug.Log(tempTileNum);
            i++;
        }
    }
}

Спасибо Джону Ву!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...