之前接到的一个项目,需求是如许:
平台:挪动端HTML5,悉数前端完成
完胜利用:答题闯关,答对一道题进入下一道,问题随机从题库中拔取。
划定规矩:累计答对9道题则闯关胜利,然则累计答错4道题则闯关失利,游戏停止。
剖析该怎样取题:
假如题库中有50道题,再取题的时刻是不必没答完一道题,随机取下一道题的。假如如许的话效力就比较低,逻辑还庞杂。
所以最好的要领是,盘算每次游戏须要的最大问题数就好,这里能够盘算一下,不管用户答对若干,答错若干,每次最多只会运用12道问题。
所以,需求就简化成: 在这个长度50的数组里,随机猎取个中12项。
要领以下:
function getRandomArray(arr,num){
//新建一个数组,将传入的数组复制过来,用于运算,而不要直接操纵传入的数组;
var temp_array = new Array();
for (var index in arr) {
temp_array.push(arr[index]);
}
//掏出的数值项,保留在此数组
var return_array = new Array();
for (var i = 0; i<num; i++) {
//推断假如数组另有能够掏出的元素,以防下标越界
if (temp_array.length>0) {
//在数组中发生一个随机索引
var arrIndex = Math.floor(Math.random()*temp_array.length);
//将此随机索引的对应的数组元素值复制出来
return_array[i] = temp_array[arrIndex];
//然后删掉此索引的数组元素,这时刻temp_array变成新的数组
temp_array.splice(arrIndex, 1);
} else {
//数组中数据项取完后,退出轮回,比方数组原本只要10项,但要求掏出20项.
break;
}
}
return return_array;
}
代码解释迥殊清楚,很轻易邃晓,代码不是我写的,出处我找不到了,以为写得很好进修一下。
本项目中,我的数组中都是问题对象,包含了问题题目、答案列表、准确答案、每道问题的失利提醒语。如许就很轻易处置惩罚需求中的逻辑了。