MIF_E31221480/Assets/SCRIPT/Quis.cs

390 lines
10 KiB
C#

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<AudioSource>();
}
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<SkorData> dataList = new List<SkorData> { 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<AudioSource>(); // [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();
}
}
}
}
}
*/