Ekosistem_Game/Assets/Script/AcakPuzzle.cs

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);
}
}
}