using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using System.IO; // Tambahan public class Quis : MonoBehaviour { public TextAsset assetSoal; private string[] soal; private string[,] soalBag; int indexSoal; int maxSoal; bool ambilSoal; char kunciJ; private int[] soalAcak; public TMP_Text txtSoal, txtOpsiA, txtOpsiB, txtOpsiC, txtOpsiD; bool isHasil; private float durasi; public float durasiPenilaian; int jwbBenar, jwbSalah; float nilai; public GameObject panel; public GameObject imgPenilaian, imgHasil; public TMP_Text txtHasil; public TMP_Text txtPenilaian; public AudioClip suaraBenar; public AudioClip suaraSalah; private AudioSource audioSource; void Start() { durasi = durasiPenilaian; soal = assetSoal.ToString().Split('#'); soalBag = new string[soal.Length, 6]; maxSoal = soal.Length; OlahSoal(); AcakSoal(); ambilSoal = true; TampilkanSoal(); audioSource = GetComponent(); } private void OlahSoal() { for (int i = 0; i < soal.Length; i++) { string[] tempSoal = soal[i].Split('+'); for (int j = 0; j < tempSoal.Length; j++) { soalBag[i, j] = tempSoal[j]; } } } private void AcakSoal() { soalAcak = new int[maxSoal]; for (int i = 0; i < maxSoal; i++) { soalAcak[i] = i; } for (int i = 0; i < maxSoal; i++) { int rnd = Random.Range(i, maxSoal); int temp = soalAcak[i]; soalAcak[i] = soalAcak[rnd]; soalAcak[rnd] = temp; } } private void TampilkanSoal() { if (indexSoal < maxSoal && ambilSoal) { int currentIndex = soalAcak[indexSoal]; txtSoal.text = soalBag[currentIndex, 0]; txtOpsiA.text = soalBag[currentIndex, 1]; txtOpsiB.text = soalBag[currentIndex, 2]; txtOpsiC.text = soalBag[currentIndex, 3]; txtOpsiD.text = soalBag[currentIndex, 4]; kunciJ = soalBag[currentIndex, 5][0]; ambilSoal = false; } } public void Opsi(string opsiHuruf) { CheckJawaban(opsiHuruf[0]); if (indexSoal == maxSoal - 1) { isHasil = true; } else { indexSoal++; ambilSoal = true; } panel.SetActive(true); } private float HitungNilai() { return nilai = (float)jwbBenar / maxSoal * 100; } private void CheckJawaban(char huruf) { string penilaian; if (huruf.Equals(kunciJ)) { penilaian = "Benar"; jwbBenar++; txtPenilaian.color = new Color32(0x00, 0x4a, 0xab, 0xFF); // biru if (audioSource && suaraBenar) audioSource.PlayOneShot(suaraBenar); } else { penilaian = "Salah"; jwbSalah++; txtPenilaian.color = new Color32(0xbf, 0x06, 0x25, 0xFF); // merah if (audioSource && suaraSalah) audioSource.PlayOneShot(suaraSalah); } txtPenilaian.text = penilaian; } void Update() { if (panel.activeSelf) { durasiPenilaian -= Time.deltaTime; if (isHasil) { imgPenilaian.SetActive(true); imgHasil.SetActive(false); if (durasiPenilaian <= 0) { txtHasil.text = "Nilai: " + HitungNilai() + "\n\n\n\nJumlah Benar: " + jwbBenar + "\n\nJumlah Salah: " + jwbSalah; imgPenilaian.SetActive(false); imgHasil.SetActive(true); // Simpan skor ke JSON SkorData dataSkor = new SkorData((int)HitungNilai()); List dataList = new List { dataSkor }; FileHandler.SaveToJSON(dataList, "skor.json"); } } else { imgPenilaian.SetActive(true); imgHasil.SetActive(false); if (durasiPenilaian <= 0) { panel.SetActive(false); durasiPenilaian = durasi; TampilkanSoal(); } } } } } /* using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; public class Quis : MonoBehaviour { public TextAsset assetSoal; private string[] soal; private string[,] soalBag; int indexSoal; //menentukan indek soal yg keberapa int maxSoal; //jumlah seluruh soal bool ambilSoal; //mengambil soal char kunciJ; //kunci jawaban private int[] soalAcak; //TAMBAHAN //KOMPONEN UI public TMP_Text txtSoal, txtOpsiA, txtOpsiB, txtOpsiC, txtOpsiD; bool isHasil; private float durasi; public float durasiPenilaian; //NEW PART 4 int jwbBenar, jwbSalah; float nilai; public GameObject panel; public GameObject imgPenilaian, imgHasil; public TMP_Text txtHasil; public AudioClip suaraBenar; // [TAMBAHAN] Audio saat jawaban benar======================================================================================= public AudioClip suaraSalah; // [TAMBAHAN] Audio saat jawaban salah======================================================================================= private AudioSource audioSource; // [TAMBAHAN] Komponen audio============================================================================================= // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { durasi = durasiPenilaian; soal = assetSoal.ToString().Split('#'); soalBag = new string[soal.Length, 6]; maxSoal = soal.Length; OlahSoal(); AcakSoal(); //TAMBAHAN ambilSoal = true; TampilkanSoal(); //agar program saat pertama kali jalan, soal pertama bisa langsung tampil print(soalBag[1,3]); audioSource = GetComponent(); // [TAMBAHAN]============================================================================================= } private void OlahSoal() { for (int i = 0; i < soal.Length; i++) { string[] tempSoal = soal[i].Split('+'); for (int j = 0; j < tempSoal.Length; j++) { soalBag[i, j] = tempSoal[j]; continue; } continue; } } private void AcakSoal() { soalAcak = new int[maxSoal]; for (int i = 0; i < maxSoal; i++) { soalAcak[i] = i; } for (int i = 0; i < maxSoal; i++) { int rnd = Random.Range(i, maxSoal); int temp = soalAcak[i]; soalAcak[i] = soalAcak[rnd]; soalAcak[rnd] = temp; } } private void TampilkanSoal() { if (indexSoal < maxSoal && ambilSoal) { int currentIndex = soalAcak[indexSoal]; txtSoal.text = soalBag[currentIndex, 0]; txtOpsiA.text = soalBag[currentIndex, 1]; txtOpsiB.text = soalBag[currentIndex, 2]; txtOpsiC.text = soalBag[currentIndex, 3]; txtOpsiD.text = soalBag[currentIndex, 4]; kunciJ = soalBag[currentIndex, 5][0]; ambilSoal = false; } } public void Opsi(string opsiHuruf) //berfungsi saat menekan tombol UI pilihan(opsi ABCD) { CheckJawaban(opsiHuruf[0]); if (indexSoal ==maxSoal - 1) { isHasil = true; } else { indexSoal++; //supaya index soal berubah ke soal berikutnya ambilSoal = true; } panel.SetActive(true); } private float HitungNilai() { return nilai = (float)jwbBenar / maxSoal * 100; } public TMP_Text txtPenilaian; private void CheckJawaban(char huruf) { string penilaian; if (huruf.Equals(kunciJ)) { penilaian = "Benar"; jwbBenar++; txtPenilaian.color = new Color32(0x00, 0x4a, 0xab, 0xFF); // biru #004aab // === MAIN AUDIO BENAR ====================================================================================================================== if (audioSource && suaraBenar) audioSource.PlayOneShot(suaraBenar); // [TAMBAHAN] } else { penilaian = "Salah"; jwbSalah++; txtPenilaian.color = new Color32(0xbf, 0x06, 0x25, 0xFF); // merah #bf0625 // === MAIN AUDIO SALAH ======================================================================================================================= if (audioSource && suaraSalah) audioSource.PlayOneShot(suaraSalah); // [TAMBAHAN] } txtPenilaian.text = penilaian; } // Update is called once per frame void Update() { if (panel.activeSelf) { durasiPenilaian -= Time.deltaTime; if (isHasil) { imgPenilaian.SetActive(true); imgHasil.SetActive(false); if(durasiPenilaian <= 0) { txtHasil.text = "Nilai: " + HitungNilai() + "\n\n\n\nJumlah Benar: " + jwbBenar + "\n\nJumlah Salah: " + jwbSalah; imgPenilaian.SetActive(false); imgHasil.SetActive(true); } } else { imgPenilaian.SetActive(true); imgHasil.SetActive(false); if (durasiPenilaian <= 0) { panel.SetActive(false); durasiPenilaian = durasi; TampilkanSoal(); } } } } } */