no frequent repetitions, choices are a bit less obviuos
This commit is contained in:
@@ -335,6 +335,7 @@ function startGame() {
|
|||||||
game.currentRound = 0;
|
game.currentRound = 0;
|
||||||
game.correctCount = 0;
|
game.correctCount = 0;
|
||||||
game.mistakes = [];
|
game.mistakes = [];
|
||||||
|
game.lastAnswer = null;
|
||||||
|
|
||||||
document.getElementById('score-correct').textContent = '0';
|
document.getElementById('score-correct').textContent = '0';
|
||||||
document.getElementById('score-total').textContent = '0';
|
document.getElementById('score-total').textContent = '0';
|
||||||
@@ -352,7 +353,12 @@ function nextRound() {
|
|||||||
|
|
||||||
game.currentRound++;
|
game.currentRound++;
|
||||||
game.answered = false;
|
game.answered = false;
|
||||||
game.correctAnswer = randInt(game.range.min, game.range.max);
|
let num;
|
||||||
|
do {
|
||||||
|
num = randInt(game.range.min, game.range.max);
|
||||||
|
} while (num === game.lastAnswer && game.range.min !== game.range.max);
|
||||||
|
game.correctAnswer = num;
|
||||||
|
game.lastAnswer = num;
|
||||||
|
|
||||||
document.getElementById('score-total').textContent = game.currentRound;
|
document.getElementById('score-total').textContent = game.currentRound;
|
||||||
document.getElementById('score-correct').textContent = game.correctCount;
|
document.getElementById('score-correct').textContent = game.correctCount;
|
||||||
@@ -382,7 +388,8 @@ function renderChoices() {
|
|||||||
choiceArea.classList.remove('hidden');
|
choiceArea.classList.remove('hidden');
|
||||||
numpadArea.classList.add('hidden');
|
numpadArea.classList.add('hidden');
|
||||||
|
|
||||||
const choices = generateChoices(game.correctAnswer, [game.range.min, game.range.max], 3);
|
const nonpos = ['roman', 'greek', 'slavonic', 'hebrew'];
|
||||||
|
const choices = generateChoices(game.correctAnswer, [game.range.min, game.range.max], 3, nonpos.includes(game.system));
|
||||||
choices.forEach((val, i) => {
|
choices.forEach((val, i) => {
|
||||||
const btn = document.getElementById('choice-' + i);
|
const btn = document.getElementById('choice-' + i);
|
||||||
btn.textContent = val;
|
btn.textContent = val;
|
||||||
|
|||||||
+3
-3
@@ -10,7 +10,7 @@
|
|||||||
<link rel="manifest" href="manifest.json">
|
<link rel="manifest" href="manifest.json">
|
||||||
<link rel="icon" type="image/svg+xml" href="icon.svg">
|
<link rel="icon" type="image/svg+xml" href="icon.svg">
|
||||||
<link rel="apple-touch-icon" href="icon-192.png">
|
<link rel="apple-touch-icon" href="icon-192.png">
|
||||||
<link rel="stylesheet" href="styles.css?v=37">
|
<link rel="stylesheet" href="styles.css?v=38">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app">
|
<div id="app">
|
||||||
@@ -155,10 +155,10 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="module" src="app.js?v=37"></script>
|
<script type="module" src="app.js?v=38"></script>
|
||||||
<script>
|
<script>
|
||||||
if ('serviceWorker' in navigator) {
|
if ('serviceWorker' in navigator) {
|
||||||
navigator.serviceWorker.register('/sw.js?v=37').catch(() => {});
|
navigator.serviceWorker.register('/sw.js?v=38').catch(() => {});
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
+15
-6
@@ -191,17 +191,19 @@ function toHebrew(num) {
|
|||||||
return letters.slice(0, -1).join('') + HEB_GERSHAYIM + letters[letters.length - 1];
|
return letters.slice(0, -1).join('') + HEB_GERSHAYIM + letters[letters.length - 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function generateChoices(correctAnswer, allRanges, count = 3) {
|
export function generateChoices(correctAnswer, allRanges, count = 3, matchLastDigit = false) {
|
||||||
const choices = new Set([correctAnswer]);
|
const choices = new Set([correctAnswer]);
|
||||||
const [min, max] = allRanges;
|
const [min, max] = allRanges;
|
||||||
|
const useLastDigit = matchLastDigit && correctAnswer > 10;
|
||||||
let attempts = 0;
|
let attempts = 0;
|
||||||
while (choices.size < count && attempts < 100) {
|
while (choices.size < count && attempts < 100) {
|
||||||
let wrong;
|
let wrong;
|
||||||
const offset = Math.floor(Math.random() * 20) + 1;
|
if (useLastDigit) {
|
||||||
if (Math.random() < 0.5) {
|
const offset = (Math.floor(Math.random() * 20) + 1) * 10;
|
||||||
wrong = correctAnswer + offset;
|
wrong = Math.random() < 0.5 ? correctAnswer + offset : correctAnswer - offset;
|
||||||
} else {
|
} else {
|
||||||
wrong = correctAnswer - offset;
|
const offset = Math.floor(Math.random() * 20) + 1;
|
||||||
|
wrong = Math.random() < 0.5 ? correctAnswer + offset : correctAnswer - offset;
|
||||||
}
|
}
|
||||||
if (wrong >= min && wrong <= max && wrong !== correctAnswer) {
|
if (wrong >= min && wrong <= max && wrong !== correctAnswer) {
|
||||||
choices.add(wrong);
|
choices.add(wrong);
|
||||||
@@ -209,7 +211,14 @@ export function generateChoices(correctAnswer, allRanges, count = 3) {
|
|||||||
attempts++;
|
attempts++;
|
||||||
}
|
}
|
||||||
while (choices.size < count) {
|
while (choices.size < count) {
|
||||||
const r = min + Math.floor(Math.random() * (max - min + 1));
|
let r;
|
||||||
|
if (useLastDigit) {
|
||||||
|
do {
|
||||||
|
r = min + Math.floor(Math.random() * (max - min + 1));
|
||||||
|
} while (r % 10 !== correctAnswer % 10 && choices.size < count + 50);
|
||||||
|
} else {
|
||||||
|
r = min + Math.floor(Math.random() * (max - min + 1));
|
||||||
|
}
|
||||||
choices.add(r);
|
choices.add(r);
|
||||||
}
|
}
|
||||||
const arr = Array.from(choices);
|
const arr = Array.from(choices);
|
||||||
|
|||||||
Reference in New Issue
Block a user