209 lines
5.1 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|