using UnityEngine; using System.Collections.Generic; public class AcakPuzzle : MonoBehaviour { [Header("Masukkan Keping_Kosong ke sini:")] public Transform ruangKosong; void Start() { // Pas game mulai, langsung geser acak 100 kali dalam sekejap! for (int i = 0; i < 100; i++) { GeserAcakSatuLangkah(); } } void GeserAcakSatuLangkah() { // Siapkan daftar kepingan mana saja yang bisa digeser saat ini List tetangga = new List(); int indexKosong = ruangKosong.GetSiblingIndex(); // Cek semua kepingan di dalam PapanGrid foreach (Transform keping in transform) { if (keping == ruangKosong) continue; int indexSaya = keping.GetSiblingIndex(); int jarak = Mathf.Abs(indexSaya - indexKosong); bool bisaGeser = false; // Aturan geser (sama seperti script kepingan) if (jarak == 3) bisaGeser = true; if (jarak == 1 && (indexSaya / 3 == indexKosong / 3)) bisaGeser = true; // Kalau kepingan ini posisinya di sebelah ruang kosong, masukkan ke daftar if (bisaGeser) { tetangga.Add(keping); } } // Pilih satu kepingan secara acak dari daftar, lalu tukar posisinya! if (tetangga.Count > 0) { int acak = Random.Range(0, tetangga.Count); Transform kepingPilihan = tetangga[acak]; int indexPilihan = kepingPilihan.GetSiblingIndex(); kepingPilihan.SetSiblingIndex(indexKosong); ruangKosong.SetSiblingIndex(indexPilihan); } } }