MIF_E31211986/Assets/KUIS/Soal.cs

209 lines
5.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Soal : MonoBehaviour
{
public TextAsset assetSoal;
private string[] soal;
private string[,] soalBag;
int indexSoal;
int maxSoal;
bool ambilSoal;
char kunciJ;
bool[] soalSelesai;
public 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 Text txtJumlahBenar;
public Text txtJumlahSalah;
public Text txtNilai;
int indexRiwayatNilai = 0;
public int level;
// Variabel untuk menyimpan indeks riwayat nilai terbaru untuk setiap level
private int[] indexRiwayatNilaiLevel = new int[4];
// Start is called before the first frame update
void Start()
{
durasi = durasiPenilaian;
soal = assetSoal.ToString().Split('#');
soalSelesai = new bool[soal.Length];
soalBag = new string[soal.Length, 6];
maxSoal = soal.Length;
OlahSoal();
ambilSoal = true;
TampilkanSoal();
print(soalBag[1,3]);
}
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 TampilkanSoal()
{
if (indexSoal<maxSoal)
{
if(ambilSoal)
{
int cobaPertama = Random.Range(0, soal.Length);
for (int coba = 0; coba < soal.Length; coba++)
{
int randomIndexSoal = (cobaPertama + coba) % soal.Length;
if(!soalSelesai[randomIndexSoal])
{
txtSoal.text = soalBag[randomIndexSoal, 0];
txtOpsiA.text = soalBag[randomIndexSoal, 1];
txtOpsiB.text = soalBag[randomIndexSoal, 2];
txtOpsiC.text = soalBag[randomIndexSoal, 3];
txtOpsiD.text = soalBag[randomIndexSoal, 4];
kunciJ = soalBag[randomIndexSoal, 5][0];
soalSelesai[randomIndexSoal] = true;
ambilSoal = false;
break;
}
else
{
continue;
}
}
}
}
}
public void Opsi(string opsiHuruf)
{
CheckJawaban(opsiHuruf[0]);
// Menyimpan nilai terbaru ke PlayerPrefs sesuai dengan level
PlayerPrefs.SetFloat("RiwayatNilai_Level" + level + "_" + indexRiwayatNilaiLevel[level], HitungNilai());
PlayerPrefs.Save();
if(indexSoal == maxSoal - 1)
{
isHasil = true;
// Memperbarui indeks riwayat nilai terbaru untuk level ini
indexRiwayatNilaiLevel[level]++;
// Simpan indeks riwayat nilai terbaru ke PlayerPrefs untuk level ini
PlayerPrefs.SetInt("IndexRiwayatNilai_Level" + level, indexRiwayatNilaiLevel[level]);
PlayerPrefs.Save();
}
else
{
indexSoal++;
ambilSoal = true;
}
panel.SetActive(true);
}
private float HitungNilai()
{
return nilai = (float)jwbBenar / maxSoal * 100;
}
public GameObject BenarObj;
public GameObject SalahObj;
private void CheckJawaban(char huruf)
{
if (huruf.Equals(kunciJ))
{
BenarObj.SetActive(true);
SalahObj.SetActive(false);
jwbBenar++;
}
else
{
SalahObj.SetActive(true);
BenarObj.SetActive(false);
jwbSalah++;
}
}
// 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)
{
// Mengatur teks jumlah benar, jumlah salah, dan nilai
txtJumlahBenar.text = jwbBenar.ToString(); // Mengonversi jwbBenar ke string
txtJumlahSalah.text = jwbSalah.ToString(); // Mengonversi jwbSalah ke string
txtNilai.text = HitungNilai().ToString("F0"); // Mengonversi nilai float ke string dengan format angka bulat
PlayerPrefs.SetFloat("RiwayatNilai", nilai);
imgPenilaian.SetActive(false);
imgHasil.SetActive(true);
durasiPenilaian = 0;
}
}
else
{
imgPenilaian.SetActive(true);
imgHasil.SetActive(false);
if (durasiPenilaian <= 0)
{
panel.SetActive(false);
durasiPenilaian = durasi;
TampilkanSoal();
}
}
}
}
}