55 lines
1.7 KiB
C#
55 lines
1.7 KiB
C#
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<Transform> tetangga = new List<Transform>();
|
|
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);
|
|
}
|
|
}
|
|
} |