Расчет возможных сочетаний цветов - Unity3D - PullRequest
1 голос
/ 31 октября 2019

Я делаю мобильную игру, в которой игроку предоставляется четыре (не повторяющихся) цвета, которые они могут провести вместе и создать новый цвет. Игра отобразит 1-4 поля на экране, и игрок должен провести вместе цвета и угадать правильную комбинацию, чтобы перейти к следующему раунду. Я уже рассчитал все возможные комбинации, которые игрок может прокручивать, и сохранил цвет для этой комбинации в сценарии под названием «ColorDictionary.cs». Это статический скрипт, который содержит более 100 переменных Color32, которые другие скрипты могут использовать и захватывать в зависимости от того, что игрок проводит. Вот пара снимков экрана, чтобы лучше понять, что происходит.

Это просто, цвет, чтобы получить светло-красный, который требует, чтобы игрок смахнул красные и белые круги вместе

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

Это делается путем проверки того, какие цвета отправил игрок, затем перехода и получения правильной комбинации из скрипта ColorDictionary. Вот один очень маленький фрагмент ColorManager, выполняющий проверку для вычисления и получения правильного цвета из словаря:

            // YELLOW - RED
        if (redActive) {

            if (magentaActive) {

                if (blackActive) { currentColor = ColorDictionary.tallPoppy; } 
                else if (whiteActive) { currentColor = ColorDictionary.salmon; } 
                else { currentColor = ColorDictionary.sunsetOrange; }

            } else if (blueActive) {

                if (blackActive) { currentColor = ColorDictionary.nutmeg; } 
                else if (whiteActive) { currentColor = ColorDictionary.muddyWaters; } 
                else { currentColor = ColorDictionary.brownRust; }

            } else if (cyanActive) {

                if (blackActive) { currentColor = ColorDictionary.yellowMetal; } 
                else if (whiteActive) { currentColor = ColorDictionary.indianKhaki; }
                else { currentColor = ColorDictionary.teak; }

            } else if (greenActive) {

                if (blackActive) { currentColor = ColorDictionary.verdunGreen; } 
                else if (whiteActive) { currentColor = ColorDictionary.roti; } 
                else { currentColor = ColorDictionary.pirateGold; }

            } else {

                if (blackActive) { currentColor = ColorDictionary.chelseaGem; } 
                else if (whiteActive) { currentColor = ColorDictionary.texasRose; } 
                else { currentColor = ColorDictionary.flushOrange; }
            }
        } 

Это если лестница оператора продолжается некоторое время (хотя проверяет комбинации только для активных цветов)и цвет становится активным, только когда игрок щелкает по нему.

1 Ответ

1 голос
/ 31 октября 2019

То, как вы используете кучу операторов if, довольно грязно. Вместо этого сохраните поля как enum:

[Flags]
public enum ColorBox 
{
    Red = 1, Blue = 2, White = 4, Yellow = 8
}

и создайте словарь поиска комбинаций цветов следующим образом:

public static Dictionary<ColorBox, ColorDictionary> CreateComboTable() 
{
   var table = new Dictionary<ColorBox, ColorDictionary>();
   table[ColorBox.Red | ColorBox.Blue | ColorBox.White] =
     ColorDictionary.muddyWater;
   table[ColorBox.Red | ColorBox.Blue | ColorBox.Yellow] =
     ColorDictionary.brownRust;
   // And so on...
   return table;
}

Еще лучше использовать JSON иликак для сохранения цветовых комбинаций, но это только начало.

Затем, когда игрок выберет два цвета, найдите соответствующую комбинацию в словаре (используя синтаксис ContainsKey или [] какассигновать).

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