确保随机不是最后一个索引



所以我从一个数组中随机选择一个字母,如下所示:

const letters = [
"W",
"A",
"S",
"D"
]

现在我想随机选择一个,比如说它选择了D。现在一旦它选择了一次D,下一次跑,它就不能做同样的事情,所以它必须选择W、A或S,但不能选择D。这不是永远永久的,这只是为了让随机选择不会被重新选择。

我有这个变量来检查最后一个索引,当选择随机字母时,最后一个指数将等于随机字母。

如何使下一个随机字母不是最后一个索引?

代码:

const RandomLetterGUI = document.getElementById("RandomLetters")
const TimerGUI = document.getElementById("Timer")
const LivesGUI = document.getElementById("Lives")
const ScoreGUI = document.getElementById("Score")
const letters = [
"W",
"A",
"S",
"D"
]
var seconds = 60;
var lives = 3;
var score = 0;
var timerId = setInterval(countdown, 1000);
var gameIsPlaying = true;
function countdown() {
if (lives == 0) {
clearTimeout(timerId);
}
if (seconds == -1) {
clearTimeout(timerId);
gameIsPlaying = false
} else {
if (seconds > 9) {
TimerGUI.innerHTML = ':' + seconds;
} else {
TimerGUI.innerHTML = ':0' + seconds;
}
seconds--;
}
}
countdown()
setInterval(displayLives, 0)
setInterval(updateScore, 0)
function updateScore() {
ScoreGUI.innerHTML = "Score: " + score
}
function displayLives() {
LivesGUI.innerHTML = "Remaining Lives: " + lives
if (lives == 0) {
gameIsPlaying = false
}
}
var lastIndex
function letter() {
var item = letters[Math.floor(Math.random() * letters.length)];
console.log(item, lastIndex)
if (lastIndex != item) {
RandomLetterGUI.innerHTML = "Next Letter: " + item
} else {
letter()
}
document.onkeypress = function (e) {
if (gameIsPlaying) {
var key = e.key
if (key.toUpperCase() != item) {
lives -= 1;
} else {
lastIndex = item
score += 150;
letter()
}
}
};
}
letter()

法律编辑:

const RandomLetterGUI = document.getElementById("RandomLetters")
const TimerGUI = document.getElementById("Timer")
const LivesGUI = document.getElementById("Lives")
const ScoreGUI = document.getElementById("Score")
var seconds = 60;
const letters = [
"W",
"A",
"S",
"D"
]
var lives = 3;
var score = 0;
var timerId = setInterval(countdown, 1000);
var gameIsPlaying = true;
function countdown() {
if (lives == 0) {
clearTimeout(timerId);
}
if (seconds == -1) {
clearTimeout(timerId);
gameIsPlaying = false
} else {
if (seconds > 9) {
TimerGUI.innerHTML = ':' + seconds;
} else {
TimerGUI.innerHTML = ':0' + seconds;
}
seconds--;
}
}
countdown()
setInterval(displayLives, 0)
setInterval(updateScore, 0)
function updateScore() {
ScoreGUI.innerHTML = "Score: " + score
}
function displayLives() {
LivesGUI.innerHTML = "Remaining Lives: " + lives
if (lives == 0) {
gameIsPlaying = false
}
}
function letterFactory(letters) {
let live = []
const refill = () => {
live = [...letters]
for (let i = live.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
const temp = live[i];
live[i] = live[j];
live[j] = temp;
}
}
return () => {
if (!live.length) refill()

return live.shift()
}
}
function letter() {
console.log(item, lastIndex)
RandomLetterGUI.innerHTML = "Next Letter: " + letterFactory(letters)
document.onkeypress = function (e) {
if (gameIsPlaying) {
var key = e.key
if (key.toUpperCase() != item) {
lives -= 1;
} else {
lastIndex = item
score += 150;
letter()
}
}
};
}
letter()

洗牌是防止任何重复的好主意,但如果您只想排除前一个rand,只需抓住它,并在拾取元素时将其从数组中排除。

const letters = ['W', 'A', 'S', 'D'];
let previous;
const randLetter = () => {
let array = previous ? letters.filter(el => el !== previous) : letters;
previous = array[Math.floor(Math.random()*array.length)]; 
return previous;
}

最新更新