😎
バブルソートのコード①
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BubbleSortManager : MonoBehaviour
{
public GameObject[] sortableObjects; // ソート対象のオブジェクトを保持する配列
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)
{
SwapObjects(j, j + 1);
}
yield return new WaitForSeconds(1f); // ソートの過程を見やすくするために待機
}
}
}
int GetValue(GameObject obj)
{
// オブジェクトの名前から整数を取得
// 名前が "Square_1" のような形式であることを仮定しています。
string[] nameParts = obj.name.Split('_');
if (nameParts.Length == 2)
{
int value;
if (int.TryParse(nameParts[1], out value))
{
return value;
}
}
// デフォルトの値(何らかのエラーが発生した場合)
return 0;
}
void SwapObjects(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;
// デバッグのためにオブジェクトの名前と座標をログに出力
Debug.Log("Swapped: " + sortableObjects[index1].name + " and " + sortableObjects[index2].name);
Debug.Log("New Positions: " + sortableObjects[index1].transform.position + " and " + sortableObjects[index2].transform.position);
}
}
Discussion