我在用angular 4制作的学习型游戏应用程序中添加了一个功能。我有一个功能,该功能可从区域填充countrys数组,并随机显示国家名称,然后要求用户找到它。作为点/值的记录,我想遍历所有国家/地区,即使在第一次迭代中甚至没有纠正用户答案,下一个周期/迭代都应该从用户未纠正答案的地方开始。我想提供帮助,非常感谢!
用户界面 这是一个基于网络的学习查找地图游戏/应用。当用户打开站点时,它将重定向到登录名,如果本地计算机/计算机中不存在该用户名,则会自动创建一个用户名,并显示对___用户名的欢迎!
欢迎
选择游戏模式
选择地区
根据所选地区开始游戏
然后询问随机国家名称以查找。如果用户单击了正确的国家/地区,则计数并移动到下一个要查找的国家。
注意 所有国家和地区都来自SVG文件,因此,该图像包含所有区域以及具有自己区域的国家。
代码
populateCountriesArray(): void {
this.selectedRegions.forEach(region => {
const randomizedRegion = Array.prototype.slice.call(region.children);
for (let i = randomizedRegion.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[randomizedRegion[i], randomizedRegion[j]] = [
randomizedRegion[j],
randomizedRegion[i]
];
}
for (let i = 0; i < randomizedRegion.length; i++) {
this.countries.push({
name: randomizedRegion[i].id,
selected: false,
numCorrect: 0,
numTries: 0,
regionID: +randomizedRegion[i].attributes.region_id.nodeValue
});
}
});
}
迭代1: 西班牙-错误(答案) 意大利-对(答案) 葡萄牙-错误(答案)
迭代2: 西班牙:错(答案) 葡萄牙:对(答案)
迭代3: 西班牙:对(答案)
答案 0 :(得分:0)
我会这样:将县初始化为二维数组([region] [country])。随机分配国家/地区的顺序(就像您已经做过的那样)。从区域数组开始设置第一个国家。 然后,如果用户选择正确,则搜索下一个。如果所有国家都正确,则转到下一个区域。 那是一个局部代码,可能是
currentRegionIndex = 0;
countrySelected = null;
populateCountriesArray() {
this.counties = this.selectedRegions.map(region =>
region.children
.sort(() => Math.random() - 0.5)
.map(c => ({
name: c.id,
correct: false,
numTries: 0,
regionID: +c.attributes.region_id.nodeValue
}))
);
this.countrySelected = this.counties[0][0];
}
pick(point) {
this.countrySelected.numTries++;
if(checkCorrect(point, this.countrySelected)){
this.countrySelected.correct = true;
}
if(!this.goNextCountry()) {
this.currentRegionIndex++;
if(this.countries.length === this.currentRegionIndex) {
return alert('Finish!');
}
this.countrySelected = this.counties[this.currentRegionIndex][0];
}
}
goNextCountry() {
const region = this.counties[this.currentRegionIndex];
const currentIndex = region.indexOf(this.countrySelected);
// looking next not completed country from current index
let next = region.find(c => !c.correct, currentIndex);
if(!next) {
// looking from array start
next = region.find(c => !c.correct);
}
if(next) {
this.countrySelected = next;
}
return next;
}