Second game
This commit is contained in:
@@ -27,9 +27,28 @@
|
||||
TELEVIZOR,
|
||||
DIMNJAK,
|
||||
AUTO,
|
||||
RUCNO_PRANJE_VESA
|
||||
RUCNO_PRANJE_VESA,
|
||||
STEDNA_SIJALICA,
|
||||
STRUJA,
|
||||
SOLARNI_PANEL,
|
||||
PAPIRI,
|
||||
EMAIL,
|
||||
KANTA_ZA_SMECE,
|
||||
FRIZIDER,
|
||||
FRIZIDER_PLUS,
|
||||
TERMOSTAT_28,
|
||||
TAMNA_FASADA,
|
||||
SVIJETLA_FASADA,
|
||||
PLASTICNA_KESA,
|
||||
CEKER,
|
||||
SUSILICA,
|
||||
PROZOR_BEZ_ROLETNE
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public class Answer
|
||||
{
|
||||
public Answer(AnswerObjectModel model, string caption)
|
||||
@@ -55,10 +74,10 @@ public class Answer
|
||||
|
||||
public class Question
|
||||
{
|
||||
public Question(string question, int [] correctAns)
|
||||
public Question(int [] correctAns, Answer[] possibleAns)
|
||||
{
|
||||
questionText = question;
|
||||
correctAnswers = correctAns;
|
||||
possibleAnswers = possibleAns;
|
||||
}
|
||||
|
||||
public Question(string question, int[] correctAns, Answer[] possibleAns)
|
||||
|
||||
263
Assets/Scripts/Quiz2Controller.cs
Normal file
263
Assets/Scripts/Quiz2Controller.cs
Normal file
@@ -0,0 +1,263 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class Quiz2Controller : MonoBehaviour {
|
||||
|
||||
public Text counterText;
|
||||
|
||||
public Text scoreText;
|
||||
|
||||
public GameObject[] answerModels;
|
||||
|
||||
// References to answers
|
||||
private List<GameObject> answers;
|
||||
|
||||
private const int numberOfAnswers = 2;
|
||||
|
||||
private const int scoreCorrectAnswer = 10;
|
||||
|
||||
private const int scoreIncorrectAnswer = -15;
|
||||
|
||||
private const int scoreTimedOut = 0;
|
||||
|
||||
private const int totalGameTime = 90;
|
||||
|
||||
private float totalTimePerQuestion;
|
||||
|
||||
private int scoreValue;
|
||||
|
||||
private int questionIdx = 0;
|
||||
|
||||
private float counterValue;
|
||||
|
||||
private float counterPerQuestionValue;
|
||||
|
||||
private int selectedAnswerIdx;
|
||||
|
||||
// Positions for answers 1, 2, 3 and 4
|
||||
private Vector3[] answerPositions = new Vector3[]
|
||||
{
|
||||
new Vector3(-10, 10, -5),
|
||||
new Vector3(10, 10, -5)
|
||||
};
|
||||
|
||||
private Vector3 answerScale = new Vector3(0.15f, 0.15f, 0.15f);
|
||||
|
||||
// List of questions and correct answers
|
||||
List<Question> questions = new List<Question>() {
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.ZARNA_SIJALICA, "Sijalica"),
|
||||
new Answer(AnswerObjectModel.STEDNA_SIJALICA, "Štedna sijalica")}),
|
||||
new Question(new int[] {1},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.KLIMA, "Klima"),
|
||||
new Answer(AnswerObjectModel.VENTILATOR, "Ventilator")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.STRUJA, "Struja"),
|
||||
new Answer(AnswerObjectModel.SOLARNI_PANEL, "Solarni panel")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.AUTO, "Auto"),
|
||||
new Answer(AnswerObjectModel.BICIKLO, "Biciklo")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.PAPIRI, "Papiri"),
|
||||
new Answer(AnswerObjectModel.EMAIL, "Email")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.STARI_PROZOR, "Stari prozor"),
|
||||
new Answer(AnswerObjectModel.NOVI_PROZOR, "Novi prozor")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.KANTA_ZA_SMECE, "Kanta za smeće"),
|
||||
new Answer(AnswerObjectModel.KANTA_ZA_RECIKLIRANJE, "Kanta za recikliranje")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.FRIZIDER, "Frižider"),
|
||||
new Answer(AnswerObjectModel.FRIZIDER_PLUS, "Frižider A++")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.TERMOSTAT_28, "Termostat 28°C"),
|
||||
new Answer(AnswerObjectModel.TERMOSTAT_25, "Termostat 25°C")}),
|
||||
new Question(new int[] {1},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.TAMNA_FASADA, "Tamna fasada"),
|
||||
new Answer(AnswerObjectModel.SVIJETLA_FASADA, "Svijetla fasada")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.PROZOR_BEZ_ROLETNE, "Prozor sa dignutom roletnom"),
|
||||
new Answer(AnswerObjectModel.PROZOR_SA_ROLETNOM, "Prozor sa spštenom roletnom")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.PLASTICNA_KESA, "Plastična kesa"),
|
||||
new Answer(AnswerObjectModel.CEKER, "Ceker")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.RUCNO_PRANJE_SUDJA, "Pranje suđa na ruke"),
|
||||
new Answer(AnswerObjectModel.MASINA_ZA_SUDJE, "Mašina za suđe")}),
|
||||
new Question(new int[] {2},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.UPALJENA_CESMA, "Voda curi dok četkaš zube"),
|
||||
new Answer(AnswerObjectModel.UGASENA_CESMA, "Gasiš vodu dok četkaš zube")}),
|
||||
new Question(new int[] {1},
|
||||
new Answer[] {
|
||||
new Answer(AnswerObjectModel.STRIK, "Štrik"),
|
||||
new Answer(AnswerObjectModel.SUSILICA, "Sušilica za veš")}),
|
||||
};
|
||||
|
||||
|
||||
// Use this for initialization
|
||||
void Start () {
|
||||
scoreValue = 0;
|
||||
counterValue = 0;
|
||||
counterPerQuestionValue = 0;
|
||||
totalTimePerQuestion = totalGameTime / questions.Count;
|
||||
answers = new List<GameObject>();
|
||||
UpdateCounter();
|
||||
UpdateScore();
|
||||
InstantiateAnswers();
|
||||
UpdateScene();
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
void Update () {
|
||||
|
||||
// TODO: Game over
|
||||
if (counterValue > totalGameTime)
|
||||
Debug.Log("Game over!");
|
||||
counterValue += Time.deltaTime;
|
||||
|
||||
UpdateCounter();
|
||||
|
||||
// Next pair
|
||||
if(counterPerQuestionValue > totalTimePerQuestion)
|
||||
{
|
||||
counterPerQuestionValue = 0;
|
||||
LoadNextPair();
|
||||
}
|
||||
else
|
||||
counterPerQuestionValue += Time.deltaTime;
|
||||
|
||||
// Select answers event handler
|
||||
if (Input.GetMouseButtonDown(0))
|
||||
{
|
||||
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
||||
RaycastHit hit;
|
||||
|
||||
if (Physics.Raycast(ray, out hit, 100))
|
||||
{
|
||||
Debug.Log(hit.transform.gameObject.name);
|
||||
selectedAnswerIdx = GetAnswerIdx(hit.transform.gameObject.name);
|
||||
counterPerQuestionValue = 0;
|
||||
LoadNextPair();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates all answer objects
|
||||
/// </summary>
|
||||
private void InstantiateAnswers()
|
||||
{
|
||||
for (int qIdx = 0; qIdx < questions.Count; ++qIdx)
|
||||
{
|
||||
for (int ansIdx = 0; ansIdx < numberOfAnswers; ++ansIdx)
|
||||
{
|
||||
Answer ans = questions[qIdx].getPossibleAnswers()[ansIdx];
|
||||
string answerName = "Answer" + (qIdx * numberOfAnswers + ansIdx + 1).ToString();
|
||||
InstantiateAnswerObject(answerName, ansIdx, ans.getAnswerModel(), ans.getAnswerCaption());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Instantiates answer object according to its type and sets its transform
|
||||
/// </summary>
|
||||
/// <param name="answerName"></param>
|
||||
/// <param name="answerIdx"></param>
|
||||
/// <param name="model"></param>
|
||||
/// <param name="answerCaption"></param>
|
||||
private void InstantiateAnswerObject(string answerName, int answerIdx, AnswerObjectModel model, string answerCaption)
|
||||
{
|
||||
GameObject answerGameObject = Instantiate(answerModels[(int)model]) as GameObject;
|
||||
answerGameObject.SetActive(true);
|
||||
answerGameObject.name = answerName;
|
||||
answerGameObject.transform.position = answerPositions[answerIdx];
|
||||
answerGameObject.transform.localScale = answerScale;
|
||||
answerGameObject.GetComponent<ObjectController>().modelCaption.text = answerCaption;
|
||||
answers.Add(answerGameObject);
|
||||
}
|
||||
|
||||
void LoadNextPair()
|
||||
{
|
||||
scoreValue += GetScore();
|
||||
UpdateScore();
|
||||
questionIdx = (questionIdx + 1) % questions.Count;
|
||||
UpdateScene();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates score value - called from Update() method
|
||||
/// </summary>
|
||||
private void UpdateScore()
|
||||
{
|
||||
scoreText.text = scoreValue.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates counter value - called from Update() method
|
||||
/// </summary>
|
||||
private void UpdateCounter()
|
||||
{
|
||||
counterText.text = counterValue.ToString("f0");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Updates scene with new question and related answers
|
||||
/// </summary>
|
||||
private void UpdateScene()
|
||||
{
|
||||
// Set answers for selected question
|
||||
for (int i = 0; i < answers.Count; i++)
|
||||
{
|
||||
if (i >= numberOfAnswers * questionIdx && i < numberOfAnswers * (questionIdx + 1))
|
||||
{
|
||||
answers[i].SetActive(true);
|
||||
}
|
||||
else
|
||||
answers[i].SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns answer index (X) from answer's name (AnswerX)
|
||||
/// </summary>
|
||||
/// <param name="gameObjName">GameObject's name</param>
|
||||
/// <returns></returns>
|
||||
private int GetAnswerIdx(string gameObjName)
|
||||
{
|
||||
string resultString = Regex.Match(gameObjName, @"\d+").Value;
|
||||
return System.Int32.Parse(resultString);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns score for a particular question
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private int GetScore()
|
||||
{
|
||||
return IsAnswerCorrect(selectedAnswerIdx, questions[questionIdx].getCorrectAnswers()) ? scoreCorrectAnswer : scoreIncorrectAnswer;
|
||||
}
|
||||
|
||||
private bool IsAnswerCorrect(int selectedAnswerIdx, int[] correctAnswers)
|
||||
{
|
||||
return ((selectedAnswerIdx % 2) ^ (correctAnswers[0] % 2)) == 0;
|
||||
}
|
||||
|
||||
}
|
||||
12
Assets/Scripts/Quiz2Controller.cs.meta
Normal file
12
Assets/Scripts/Quiz2Controller.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e795f009de99b684ca761ef26e3ea75b
|
||||
timeCreated: 1495277635
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -4,7 +4,7 @@ using System.Text.RegularExpressions;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
public class QuizController : MonoBehaviour {
|
||||
public class Quiz4Controller : MonoBehaviour {
|
||||
|
||||
// References to answers
|
||||
private List<GameObject> answers;
|
||||
@@ -81,12 +81,12 @@ public class QuizController : MonoBehaviour {
|
||||
new Answer(AnswerObjectModel.PREKIDAC_ZA_SVJETLO, "Prekidač za svjetlo"),
|
||||
new Answer(AnswerObjectModel.PROFESOR_ATOM_10, "Profesor Atom +10"),
|
||||
new Answer(AnswerObjectModel.ADAPTER, "Adapter")}),
|
||||
new Question("6. Ako je vani temperatura 33oC, koja je optimalna temperatura u kući? ", new int[] {4},
|
||||
new Question("6. Ako je vani temperatura 33°C, koja je optimalna temperatura u kući? ", new int[] {4},
|
||||
new Answer[]{
|
||||
new Answer(AnswerObjectModel.KUCICA_17, "Kućica 17oC"),
|
||||
new Answer(AnswerObjectModel.KUCICA_22, "Kućica 22oC"),
|
||||
new Answer(AnswerObjectModel.KUCICA_33, "Kućica 33oC"),
|
||||
new Answer(AnswerObjectModel.KUCICA_26, "Kućica 26oC")}),
|
||||
new Answer(AnswerObjectModel.KUCICA_17, "Kućica 17°C"),
|
||||
new Answer(AnswerObjectModel.KUCICA_22, "Kućica 22°C"),
|
||||
new Answer(AnswerObjectModel.KUCICA_33, "Kućica 33°C"),
|
||||
new Answer(AnswerObjectModel.KUCICA_26, "Kućica 26°C")}),
|
||||
new Question("7. Kakvim načinom pranja posuđa, i uz koji uređaj od navedenih, trošimo 60% manje električne energije i do 85% manje vode?", new int[] {2, 3},
|
||||
new Answer[]{
|
||||
new Answer(AnswerObjectModel.RUCNO_PRANJE_SUDJA, "Ručno pranje suđa"),
|
||||
Reference in New Issue
Block a user