Показать элемент в произвольном порядке из одного массива, если щелкнуть другой отдельный элемент в другом массиве, а также удалить этот элемент из первого массива? - PullRequest
0 голосов
/ 17 декабря 2018

Я работаю над своим первым реальным проектом, игрой в стиле «Палач».Я пытаюсь, чтобы это действие имело место, и я не уверен, в чем я ошибаюсь: если щелкнуть «неправильную букву», показать одну из «частей тела» случайным образом и удалить из массива, чтобы она не могла повториться.

let wrongAmount = 0
let wrongLettersArray = ["#alphabetLetterA", "#alphabetLetterB", "#alphabetLetterC", "#alphabetLetterD", "#alphabetLetterE", "#alphabetLetterF", "#alphabetLetterG", "#alphabetLetterH", "#alphabetLetterJ", "#alphabetLetterK", "#alphabetLetterM", "#alphabetLetterN", "#alphabetLetterQ", "#alphabetLetterR", "#alphabetLetterU", "#alphabetLetterV", "#alphabetLetterW", "#alphabetLetterX", "#alphabetLetterY", "#alphabetLetterZ"]
let bodyPartsArray = ["#losingTorso", "#losingRightArm", "#losingLeftArm", "#losingRightLeg", "#losingLeftLeg"]
let correctLettersArray = ["#correctLetterP", "#correctLetterI", "#correctLetterS", "#correctLetterT", "#correctLetterO", "#correctLetterL"]

function wrongGuess() {
    $(wrongLettersArray).on('click', function () {
        $(bodyPartsArray).show()
        wrongGuess()
    })
}

//if a wrong letter is clicked show one of the body parts at random
//remove from list so it cannot repeat
//add 1 to the wrong amount

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Первая проблема с вашим кодом заключается в том, что он никогда не выполняется.Вам нужно настроить запуск своего кода, но поскольку вы никогда не выполняете функцию вне самой функции, она никогда не настраивает наблюдателя.

Вы можете сделать это так:

$(document).ready(function () {
  wrongGuess();
});

К сожалению, код, который вы написали, не правильно делает то, что вам нужно, поэтому я предоставил вам следующее решение:

Сначала я настроил некоторый базовый HTML, чтобы проиллюстрировать плохое ихорошие буквы:

<h2>wrong</h2>
<button id="a">A</button>
<button id="b">B</button>

<h2>correct</h2>
<button id="p">P</button>
<button id="s">S</button>

<hr>

<h1 id="torso">torso</h1>
<h1 id="right-arm">right arm</h1>

<hr>

wrong count: <span id="wrong">0</span>

Затем я настроил функцию, чтобы изначально скрыть все части тела:

function hideAllBodyParts() {
  var bodyPartsSelector = bodyPartsArray.join(', ');

  $(bodyPartsSelector).hide();
}

Вы не можете передать массив в jQuery как селектор, он долженбудет строкой, то есть '#a, #b' вместо ['#a', '#b'].

Тогда ваша основная функция, которая показывает одну часть тела за раз и увеличивает неправильный счет:

function watchForWrongGuesses() {
  // Your selector needs to be a string, e.g. '#a, #b' not an array ['#a', '#b']
  var wrongLettersSelectors = wrongLettersArray.join(', ');

    $(wrongLettersSelectors).on('click', function () {
      // Choose one body part and show it
      var bodyPart = bodyPartsArray.pop();
      $(bodyPart).show();

      // Increment wrong count
      wrongAmount++;
      $('#wrong').text(wrongAmount);
    });
}

Затем,последняя, ​​но самая важная часть - связать его при загрузке документа:

$(document).ready(function () {
  hideAllBodyParts();
  watchForWrongGuesses();
});

Этот метод изначально скрывает все части тела, а затем настраивает наблюдатель для нажатий кнопки.

Решение: https://codepen.io/tinacious/pen/xmOgJj

0 голосов
/ 17 декабря 2018

Если я правильно понимаю, вы хотите выбрать элемент из массива частей тела и удалить его, чтобы его нельзя было выбрать снова?Для этого вы можете использовать splice () .

const ar = [0, 1, 2, 3, 4, 5, 6]
const idx = Math.floor(Math.random() * ar.length)
const item = ar.splice(idx, 1)

console.log(item, ar)

В приведенном выше примере у нас есть массив (в данном случае это будет массив ваших частей тела).Затем мы выбираем индекс, который находится где-то в пределах длины этого массива.Затем splice удаляет элемент из массива по этому индексу и возвращает его.

...