const LAST_QUESTION = 9;
var selectedIndexes = [];
var questionIndex = undefined;
var selectedAnswers = [null, null, null, null, null];
const startTest = () => {
//generate 5 random questions indexes
selectedIndexes = [];
let count = 0;
while (count < 9) {
let number = null;
do {
number = Math.floor(Math.random() * 10);
} while (selectedIndexes.includes(number));
selectedIndexes.push(number);
count++;
}
//show
questionIndex = 0;
let questionObj = questions[selectedIndexes[questionIndex]];
//console.log(questionObj);
//show new question
displayQuestion(questionObj);
//set the question number
document.getElementById("counter").innerHTML = questionIndex + 1;
//disable previous button and next button
document.getElementById("next").style.pointerEvents = "none";
document.getElementById("next").style.color = "gray";
document.getElementById("previous").style.pointerEvents = "none";
document.getElementById("previous").style.color = "gray";
//hide the intro page an show the test
document.getElementsByClassName("welcome")[0].style.display = "none";
document.getElementsByClassName("container")[0].style.display = "flex";
//don't show test result
document.getElementById("test-result").style.display = "none";
//hide restart button
document.getElementById("restart").style.display = "none";
//hide the right side
document.getElementsByClassName("your-answers")[0].style.display = "none";
};
const resetPreviousStyles = () => {
//reset styles added previously
document.getElementById("div-ans-a").style.border = "none";
document.getElementById("div-ans-b").style.border = "none";
document.getElementById("div-ans-c").style.border = "none";
document.getElementById("div-ans-d").style.border = "none";
};
const displaySelectedAnswer = (answer) => {
if (answer === 0) {
document.getElementById("div-ans-a").style.border = "2px solid blue";
} else if (answer === 1) {
document.getElementById("div-ans-b").style.border = "2px solid blue";
} else if (answer === 2) {
document.getElementById("div-ans-c").style.border = "2px solid blue";
} else {
document.getElementById("div-ans-d").style.border = "2px solid blue";
}
};
const displayQuestion = (questionObj) => {
document.getElementById("question").innerHTML = questionObj.question;
document.getElementById("ans-a").innerHTML = questionObj.answers[0].text;
document.getElementById("ans-b").innerHTML = questionObj.answers[1].text;
document.getElementById("ans-c").innerHTML = questionObj.answers[2].text;
document.getElementById("ans-d").innerHTML = questionObj.answers[3].text;
//enable previous button if there's a previous question
if (questionIndex > 0) {
document.getElementById("previous").style.pointerEvents = "auto";
document.getElementById("previous").style.color = "black";
} else {
document.getElementById("previous").style.pointerEvents = "none";
document.getElementById("previous").style.color = "gray";
}
//enable the next button only if there's an existing answer
if (selectedAnswers[questionIndex] !== null) {
document.getElementById("next").style.pointerEvents = "auto";
document.getElementById("next").style.color = "black";
} else {
document.getElementById("next").style.pointerEvents = "none";
document.getElementById("next").style.color = "gray";
}
//next 'next question to finish' if question is the last
if (questionIndex === LAST_QUESTION - 1) {
document.getElementById("next").innerHTML = "Finish";
} else {
document.getElementById("next").innerHTML = "Next question >";
}
};
const nextQuestion = () => {
if (questionIndex < selectedIndexes.length - 1) {
questionIndex++;
let questionObj = questions[selectedIndexes[questionIndex]];
//console.log(questionObj);
//reset styles added previously
resetPreviousStyles();
//show new question
displayQuestion(questionObj);
if (selectedAnswers[questionIndex] !== null) {
//previous answer exist
//set the selected answer since user can change the answer
let answer = selectedAnswers[questionIndex];
displaySelectedAnswer(answer);
}
//set the question number
document.getElementById("counter").innerHTML = questionIndex + 1;
} else {
showAllQuestionAndAnswer();
}
};
const previousQuestion = () => {
console.log(questionIndex);
if (questionIndex > 0) {
questionIndex--;
let questionObj = questions[selectedIndexes[questionIndex]];
//console.log(questionObj);
resetPreviousStyles();
//show new question
displayQuestion(questionObj);
//set the question number
document.getElementById("counter").innerHTML = questionIndex + 1;
//set the selected answer since user can change the answer
let answer = selectedAnswers[questionIndex];
displaySelectedAnswer(answer);
}
};
const selectedAnswer = (ans) => {
//reset styles added previously
resetPreviousStyles();
//setSelected answers
displaySelectedAnswer(ans);
//when answer is selected, enable the next button
document.getElementById("next").style.pointerEvents = "auto";
document.getElementById("next").style.color = "black";
//user answer so we can display it at the end
selectedAnswers[questionIndex] = ans;
//console.log(selectedAnswers);
};
//function to show the chosen question and answer. For summary at the end of the test
const showElement = (questionObj, chosenAnswer, index) => {
let element = "";
switch (chosenAnswer) {
case 0:
element = `
Question ${index}/9
${questionObj.question}
A${questionObj.answers[0].text}
B${questionObj.answers[1].text}
C${questionObj.answers[2].text}
D${questionObj.answers[3].text}
`;
break;
case 1:
element = `Question ${index}/9
${questionObj.question}
A${questionObj.answers[0].text}
B${questionObj.answers[1].text}
C${questionObj.answers[2].text}
D${questionObj.answers[3].text}
`;
break;
case 2:
element = `Question ${index}/9
${questionObj.question}
A${questionObj.answers[0].text}
B${questionObj.answers[1].text}
C${questionObj.answers[2].text}
D${questionObj.answers[3].text}
`;
break;
case 3:
element = `Question ${index}/9
${questionObj.question}
A${questionObj.answers[0].text}
B${questionObj.answers[1].text}
C${questionObj.answers[2].text}
D${questionObj.answers[3].text}
`;
break;
default:
element = `Question ${index}/9
${questionObj.question}
A${questionObj.answers[0].text}
B${questionObj.answers[1].text}
C${questionObj.answers[2].text}
D${questionObj.answers[3].text}
`;
}
return element;
};
const showAllQuestionAndAnswer = () => {
//store the count for later comparison
let programmerOrDesignerCount = 0;
let artistOrAnimatorCount = 0;
//get the questions and selected answer in order to display the summary
for (let i = 0; i < selectedIndexes.length; i++) {
let questionObj = questions[selectedIndexes[i]];
let answer = selectedAnswers[i];
let element = showElement(questionObj, answer, i + 1);
document.getElementById("answers").innerHTML += element;
let cat = questionObj.answers[answer].cat;
if (cat === "PROGRAMMER or DESIGNER") {
programmerOrDesignerCount++;
} else {
artistOrAnimatorCount++;
}
}
//console.log(introvertCount);
//console.log(extrovertCount);
showPersonalities(programmerOrDesignerCount, artistOrAnimatorCount);
//hide the previous and finish button and show restart button
document.getElementById("next").style.display = "none";
document.getElementById("previous").style.display = "none";
};
const showPersonalities = (introvert, extrovert) => {
if (introvert > extrovert) {
//show image
document.getElementById("image").src ="P OR D.png";
document.getElementById("trait-title").innerText = "You are a programmer or designer" ;
//append personality traits
let element = ` تحويل الأفكار إلى واقع: يتعين على المبرمج تحويل رؤية المصمم للعبة إلى شفرات برمجية قابلة للتنفيذ.
يقوم بتحويل العناصر المختلفة في اللعبة إلى كود يمكن أن يتفاعل معه اللاعبون.
برمجة الميكانيكيات والتفاعلات: يقوم المبرمج بتصميم وتنفيذ الميكانيكيات والتفاعلات داخل اللعبة.
يعمل على برمجة حركة الشخصيات والأعداء، وتفاعل اللاعب مع العناصر المختلفة، والنظام الفيزيائي للعالم الافتراضي.
إدارة الذكاء الاصطناعي: في حالة وجود شخصيات ذكاء اصطناعي في اللعبة،
يكون على المبرمج برمجة سلوكها واتخاذ القرارات المنطقية والتفاعل مع اللاعبين بطريقة ذكية.
تحسين الأداء والأداء التقني: يقوم المبرمج بتحسين أداء اللعبة وتحسين الأداء التقني لتشغيلها بسلاسة وبدون مشاكل.
يعمل على تحسين أداء الرسومات والتحسينات التقنية الأخرى لتقديم تجربة سلسة ومريحة للاعب.
تصميم العوالم والمراحل: يقوم مصمم المراحل بتصميم العوالم والمراحل داخل اللعبة،
بما في ذلك تحديد الهياكل والمشاهد والعناصر المختلفة. يضمن توجيه اللاعبين عبر مراحل متنوعة ومثيرة.
إنشاء الألغاز والتحديات: يقوم مصمم المراحل بتصميم ألغاز وتحديات ممتعة ومثيرة لتحفيز اللاعبين على التفكير وحل المشكلات.
يعمل على توفير تجربة لعب تحفز اللاعبين على الاستمرار والتقدم.
توجيه اللاعبين: يقوم مصمم المراحل بتوجيه اللاعبين وتوجيههم عبر اللعبة من خلال توفير إشارات ودلائل ومؤشرات للمسار الصحيح.
يعمل على توجيه اللاعبين وإبقائهم مستمتعين ومتحمسين للاستكشاف.
اختبار وتعديل المراحل: يتعين على مصمم المراحلال تصميماته وتجربتها من خلال الاختبار
وجمع الملاحظات وإجراء التعديلات اللازمة لتحسين الألعاب وجعلها أكثر تحفيزًا وممتعة.`;
document.getElementById("personalities").innerHTML += element;
} else {
//show image
document.getElementById("image").src ="A OR AN.png";
document.getElementById("trait-title").innerText = "You are an artist or animator";
let element = `تصميم الشخصيات والعناصر: يقوم الفنان أو الرسام بتصميم شخصيات اللعبة والعناصر المختلفة فيها.
إنشاء العوالم والمشاهد: يعمل الفنان أو الرسام على إنشاء العوالم والمشاهد داخل اللعبة.
تصميم الرسوم المتحركة والحركة: يستخدم الفنان أو الرسام مهاراته في إنشاء رسوم متحركة وحركات للشخصيات والعناصر في اللعبة.
تصميم الواجهات والرموز: يقوم الفنان أو الرسام بتصميم واجهات المستخدم والرموز والرسوم التوضيحية التي تظهر في اللعبة.
إضفاء الأجواء والمزج اللوني: يعمل الفنان أو الرسام على إضفاء الأجواء المناسبة للعبة من خلال استخدام الألوان والإضاءة والظلال.
تصميم الأصوات والمؤثرات الصوتية: يساهم الفنان أو الرسام في تصميم الأصوات والمؤثرات الصوتية التي تعزز تجربة اللعبة وتضيف لها واقعية وتشويقًا.
اختبار وتعديل الرسومات: يتعين على الفنان أو الرسام اختبار وتقييم الرسومات التي يقوم بإنشائها وإجراء التعديلات اللازمة لتحسينها.
التعاون مع فريق التطوير: يتعاون الفنان أو الرسام مع باقي أعضاء فريق التطوير مثل المبرمجين ومصممي المراحل لضمان التنسيق والتكامل السلس بين جميع عناصر اللعبة.
`;
document.getElementById("personalities").innerHTML += element;
}
//show test result
document.getElementById("test-result").style.display = "flex";
//show restart button
document.getElementById("restart").style.display = "block";
//show the right side
document.getElementsByClassName("your-answers")[0].style.display = "block";
};
const restartQuestion = () => {
window.location.reload();
};