✌️

バブルソートのコード②(色の追加)

2024/02/21に公開

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

public class BubbleSortManager : MonoBehaviour
{
public GameObject[] sortableObjects; // ソート対象のオブジェクトを保持する配列

// ソートの際に使用する色
public Color swapColor1 = Color.blue;
public Color swapColor2 = Color.red;

void Start()
{
    StartCoroutine(BubbleSortCoroutine());
}

IEnumerator BubbleSortCoroutine()
{
    int n = sortableObjects.Length;

    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            int currentValue = GetValue(sortableObjects[j]);
            int nextValue = GetValue(sortableObjects[j + 1]);

            // ソート対象の整数を比較して、必要に応じて入れ替える
            if (currentValue > nextValue)
            {
                StartCoroutine(SwapObjectsWithColorChange(j, j + 1));
                LogArrayOrder();
            }

            yield return new WaitForSeconds(1f); // ソートの過程を見やすくするために待機
        }
    }
}

int GetValue(GameObject obj)
{
    string[] nameParts = obj.name.Split('_');
    if (nameParts.Length == 2)
    {
        int value;
        if (int.TryParse(nameParts[1], out value))
        {
            return value;
        }
    }

    return 0;
}

IEnumerator SwapObjectsWithColorChange(int index1, int index2)
{
    // 配列内の2つのオブジェクトを入れ替える
    GameObject temp = sortableObjects[index1];
    sortableObjects[index1] = sortableObjects[index2];
    sortableObjects[index2] = temp;

    // オブジェクトの位置を交換
    Vector3 tempPosition = sortableObjects[index1].transform.position;
    sortableObjects[index1].transform.position = sortableObjects[index2].transform.position;
    sortableObjects[index2].transform.position = tempPosition;

    // オブジェクトの色を変更(入れ替え瞬間のみ)
    SetObjectColor(sortableObjects[index1], swapColor1);
    SetObjectColor(sortableObjects[index2], swapColor2);

    yield return new WaitForSeconds(1f); // 色を変更した状態を見やすくするために待機

    // オブジェクトの色を元に戻す
    SetObjectColor(sortableObjects[index1], Color.white);
    SetObjectColor(sortableObjects[index2], Color.white);
}

// オブジェクトの色を設定するメソッド
void SetObjectColor(GameObject obj, Color color)
{
    Renderer renderer = obj.GetComponent<Renderer>();
    if (renderer != null)
    {
        renderer.material.color = color;
    }
}

void LogArrayOrder()
{
    Debug.Log("Current Array Order: " + string.Join(", ", sortableObjects.Select(obj => obj.name)));
}

}

Discussion