Я работал над текстовой боевой последовательностью RPG с ванильным JS, в которой кнопки используются для атаки игрока, используйте magi c, et c. Кнопки для обоих действий созданы отлично и правильно работают в моем проекте, но проблема возникает, когда я использую magi c. Есть несколько заклинаний на выбор. Таким образом, я настроил его так, чтобы кнопки генерировались для каждого соответствующего заклинания при нажатии кнопки «Magi c». Эти кнопки заклинаний также работают, но после применения заклинания мне нужно вернуться к исходным кнопкам «Атака» и «Маги c», чтобы можно было выполнить следующее действие в последовательности битвы. Я не уверен, как go сделать это с тем, как я настроил свой код для создания кнопок, и я ищу некоторые рекомендации о том, как действовать:
const optionButtonsElement = document.getElementById("option-btns");
class Spell {
constructor(name) {
this.name = name;
}
}
class Person {
constructor(magic) {
this.magic = magic;
this.actions = ["Attack", "Magic"];
}
}
//spells
var fire = new Spell("Fire");
var meteor = new Spell("Meteor");
var cure = new Spell("Cure");
var playerSpells = [fire, meteor, cure];
// create player
let player1 = new Person(playerSpells);
function combatSequence() {
while (optionButtonsElement.firstChild) {
optionButtonsElement.removeChild(optionButtonsElement.firstChild);
}
for (var i = 0; i < player1.actions.length; i++) {
const button = document.createElement("button");
button.innerText = player1.actions[i];
// Add enemy attack functions in 'if' statements to keep combat going
if (i === 0) {
// Add event listener to atk btn
} else if (i === 1) {
button.addEventListener("click", () => {
console.log("Magic btn clicked");
while (optionButtonsElement.firstChild) {
optionButtonsElement.removeChild(optionButtonsElement.firstChild);
}
for (var j = 0; j < player1.magic.length; j++) {
const magButton = document.createElement("button");
magButton.innerText = player1.magic[j].name;
// create btn for spell
if (j === 0) {
magButton.addEventListener("click", () => {
console.log("Player uses fire");
});
} else if (j === 1) {
magButton.addEventListener("click", () => {
console.log("Player uses meteor");
});
} else if (j === 2) {
magButton.addEventListener("click", () => {
console.log("Player uses heal");
while (optionButtonsElement.firstChild) {
optionButtonsElement.removeChild(optionButtonsElement.firstChild);
}
});
}
optionButtonsElement.appendChild(magButton);
}
});
}
optionButtonsElement.appendChild(button);
}
}
combatSequence();
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Text Adventure</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<div id="option-btns" class="btn-grid">
<button class="btn">Option 1</button>
<button class="btn">Option 2</button>
<button class="btn">Option 3</button>
<button class="btn">Option 4</button>
</div>
</div>
</body>
Любые мысли или советы будут оценены. Скорее всего, есть более простой вариант, который мне здесь не хватает. Я старался ограничить код только тем, что было необходимо, но если есть слишком много лишнего, дайте мне знать. Спасибо!