Создаем обработчик события загрузки DOM и функцию игры:
function createGame() {
}
document.addEventListener('DOMContentLoaded', createGame);Нам необходим массив возможных ответов и массив для отслеживания состояния счета:
const answers = ['Камень', 'Ножницы', 'Бумага']; const score = [0, 0];
Создаем основные блоки нашей игры через document.createElement
//Создаем основной контейнер игры
const containerElement = document.createElement('div');
containerElement.classList.add('container');
document.body.appendChild(containerElement);
//Добавляем в контейнер блок с вариантами кнопок
const containerAnswers = document.createElement('div');
containerAnswers.classList.add('answers');
containerElement.appendChild(containerAnswers);
//Добавляем в контенер блок со статусами выбора и счета игры
const containerStatus = document.createElement('div');
containerStatus.classList.add('status');
containerElement.appendChild(containerStatus);
//Добавляем в блок статуса игры заголовок
const elementTitle = document.createElement('div');
elementTitle.classList.add('title');
elementTitle.innerText = 'Счет игры:';
containerStatus.appendChild(elementTitle);
//Добавляем в блок статуса блок с со счетом игры
const containerScore = document.createElement('div');
containerScore.classList.add('container-score');
containerStatus.appendChild(containerScore);Добавляем блоки с текущим счетом и объявлеим их в объекты через document.querySelectorAll, чтобы можно было в будущем менять их
for (i = 0; i < score.length; i++) {
const elementScore = document.createElement('div');
elementScore.classList.add('score');
elementScore.innerText = score[i];
containerScore.appendChild(elementScore);
}
const scoresElements = document.querySelectorAll('.score');В блоке с вариантами выбора публикуем все содержание массива answers
answers.forEach((answer, i) => {
const elementAnswer = document.createElement('div');
elementAnswer.classList.add('answer');
elementAnswer.innerText = answer;
containerAnswers.appendChild(elementAnswer);
});К каждому варианту кнопки добавляем прослушиватель события на клик:
elementAnswer.addEventListener('click', function(event) {
});При клике получаем в переменную наш вариант шага:
const clickAnswer = this.textContent;
Через функцию случайного числа генерируем вариант ответа компьютера от 1 до длины списка вариантов answers:
const botAnswer = answers[Math.floor(Math.random() * answers.length)];
Создаем новый элемент истории игры:
const answerStep = document.createElement('div');Далее сравниваем наш ответ и ответ компьютера.
Ответы могут быть равны — это ничья. Обоим добавляем по одному очку и фиксируем класс шага как серый (нейтральный).
Для пользователя есть три комбинации проигрыша:
- Вариант пользователя: Камень, компьютера: Бумага
- Вариант пользователя: Ножницы, компьютера: Камень
- Вариант пользователя: Бумага, компьютера: Ножницы
Во всех этих случаях мы добавляем очко компьютеру и фиксируем класс шага как красный (проигрыш).
Во всех остальных случаях пользователь выиграл. Добавляем ему очко и фиксируем класс шага зеленым.
if (clickAnswer == botAnswer) {
answerStep.classList.add('answer-grey');
score[0]++;
score[1]++;
}
else if (
clickAnswer == 'Камень' && botAnswer == 'Бумага' ||
clickAnswer == 'Ножницы' && botAnswer == 'Камень' ||
clickAnswer == 'Бумага' && botAnswer == 'Ножницы'
) {
answerStep.classList.add('answer-red');
score[1]++;
}
else {
answerStep.classList.add('answer-green');
score[0]++;
}В историю игры добавляем сыгранный шаг.
answerStep.innerText = clickAnswer + ' — ' + botAnswer; containerStatus.appendChild(answerStep);
Нам осталось вывести измененное количество очков у обоих игроков:
scoresElements.forEach((scoreElement, scoreIndex) => {
scoreElement.innerText = score[scoreIndex];
});