"Три в ряд" не перемещать объект

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

"Три в ряд" не перемещать объект

Сообщение olegmob 27 ноя 2018, 03:11

Добрый день! Новичок в Unity, наткнулся на игру "Три в ряд" с сайта http://wnfx.ru/kak-sozdat-igru-v-unity/. Все как бы получилось, но одно не могу понять, как запретить перемешать фрукт если нет совпадений?
Скрытый текст:
Изображение


И если можно отрывок кода можно :)
olegmob
UNец
 
Сообщения: 1
Зарегистрирован: 26 ноя 2018, 09:52

Re: "Три в ряд" не перемещать объект

Сообщение Xtir 27 ноя 2018, 06:07

Надеюсь у тебя уже есть двумерный массив твоих фруктов?
Xtir
UNIверсал
 
Сообщения: 498
Зарегистрирован: 21 окт 2016, 00:37

Re: "Три в ряд" не перемещать объект

Сообщение Ziza 28 ноя 2018, 02:24

Если брать за основу то что есть и не переписывать, то добавить в BoardManager.cs метод определения возможной комбинации
Синтаксис:
Используется csharp
public bool CheckCombination(GameObject objectForCheck)
{
    SpriteRenderer spriteRenderer = objectForCheck.GetComponent<SpriteRenderer>();
    if (spriteRenderer != null)
    {
        Sprite sprite = spriteRenderer.sprite;
        if (sprite != null)
        {
            int x = -1, y = -1;

            for (int i = 0; i < xSize; i++)
            {
                for (int j = 0; j < ySize; j++)
                {
                    GameObject tmp = tiles[i, j];
                    if (tmp == objectForCheck)
                    {
                        x = i;
                        y = j;
                        break;
                    }
                }
            }

            if (x != -1 && y != -1)
            {
                int minCombo = 3;
                int minNeighbours = minCombo - 1;

                // Horizontal
                int start = Mathf.Max(x - minNeighbours, 0);
                int end = Mathf.Min(x + minNeighbours, xSize - 1);
                int found = 0;

                for (int i = start; i <= end; i++)
                {
                    GameObject go = tiles[i, y];
                    if (go != null)
                    {
                        SpriteRenderer tmp = go.GetComponent<SpriteRenderer>();
                        if (tmp != null && tmp.sprite == sprite)
                        {
                            if (++found >= minCombo)
                                return true;
                        }
                        else
                        {
                            found = 0;

                            if (i > x)
                                break;
                        }
                    }
                }

                // Vertical
                start = Mathf.Max(y - minNeighbours, 0);
                end = Mathf.Min(y + minNeighbours, ySize - 1);
                found = 0;

                for (int i = start; i <= end; i++)
                {
                    GameObject go = tiles[x, i];
                    if (go != null)
                    {
                        SpriteRenderer tmp = go.GetComponent<SpriteRenderer>();
                        if (tmp != null && tmp.sprite == sprite)
                        {
                            if (++found >= minCombo)
                                return true;
                        }
                        else
                        {
                            found = 0;

                            if (i > y)
                                break;
                        }
                    }
                }
            }
        }
    }

    return false;
}
 

А в Tile.cs туда где происходит свап вместо
Синтаксис:
Используется csharp
SwapSprite(previousSelected.render);

написать
Синтаксис:
Используется csharp
if (BoardManager.instance.CheckCombination(gameObject))
{
   SwapSprite(previousSelected.render);
}
 

Вот и не лень мне было о_О )

И скажу вам честно, так как в игре с того сайта сделано - определение фишки по ее спрайту, комбинации на рейкастах, получение компонентов... да и все остальное - это лютая дичь) Так сказать - посмотрите как сделано и никогда так сами не делайте)
Аватара пользователя
Ziza
UNIт
 
Сообщения: 81
Зарегистрирован: 02 ноя 2018, 23:07


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20