Я строю простую игру в кости.
У меня есть 2 массива, которые представляют счет каждого игрока и компьютера.
Каждый раз, когда я нажимаю функцию reRoll (), я очищаю все мои дополнительные элементы, представляющие кости, и я пытаюсь очистить массив, потому что я хочу, чтобы массивы очков были пустыми, прежде чем выдвигать новые оценки для новой игры.
У меня есть несколько различных функций, основной из которых является Функция кости, которая генерирует кости и генерирует для них html элементов. Затем у меня есть функция-обертка для моей кнопки, которая вызывает кости 2 раза (я делаю это, чтобы бросить кости 2 раза для каждого игрока. Если есть лучшее решение, чем создание функции-оболочки для вызова другой функции 2 раза, пожалуйста, просветите меня ). После нажатия на оболочку я скрываю кнопку и заменяю ее новой кнопкой «reRoll ()», которая, как указано выше, очищает элементы div дочерних костей и позволяет мне играть снова.
Единственная проблема, которую я Я имею в виду, что каждый раз, когда я нажимаю «reRoll ()», массив не очищается, и счет костей добавляется в массив.
Я предполагаю, что массив не очистится, потому что он находится в локальной области видимости в то время как реальный массив, к которому я обращаюсь, находится в глобальном.
Вот фрагмент кода ...
var playerScore = [];
var compScore = [];
function wrapper() {
dice();
dice();
document.getElementById("rollBtn").style.display = "none";
document.getElementById("reRollBtn").style.visibility = "visible";
console.log(playerScore);
console.log(compScore);
}
function reRoll() {
var playerScore = [];
var compScore = [];
console.log(playerScore);
document.getElementById("playerRow").innerHTML = "";
document.getElementById("compRow").innerHTML = "";
wrapper();
}
function dice() {
let compRoll = 1 + Math.floor(Math.random() * Math.floor(7));
var dDiceDiv = document.getElementById("compRow");
let newDRoll = document.createElement("div");
newDRoll.innerHTML = compRoll;
dDiceDiv.appendChild(newDRoll);
newDRoll.setAttribute("id", "compDice");
compScore.push(compRoll);
let playerRoll = 1 + Math.floor(Math.random() * Math.floor(7));
var pDiceDiv = document.getElementById("playerRow");
let newPRoll = document.createElement("div");
newPRoll.innerHTML = playerRoll;
pDiceDiv.appendChild(newPRoll);
newPRoll.setAttribute("id", "playerDice");
playerScore.push(playerRoll);
var playerSum = playerScore.reduce(function (a, b) {
return a + b;
}, 0);
var compSum = compScore.reduce(function (a, b) {
return a + b;
}, 0);
console.log(playerSum);
console.log(compSum);
document.getElementById("playerScore").innerHTML = playerSum;
document.getElementById("compScore").innerHTML = compSum;
}
#playerRow,
#compRow {
flex: 1;
justify-content: space-evenly;
text-align: center;
}
#playerDice,
#compDice {
background-color: white;
width: 50px;
height: 50px;
margin: 10px;
padding-top: 5px;
}
<body>
<div
class="container"
style="
width: 50%;
background-color: lightslategray;
margin: auto;
text-align: center;
padding: 20px;
"
>
<h3 id="compScore"></h3>
<div id="compRow" style="display: flex;"></div>
<div id="playerRow" style="display: flex;"></div>
<h3 id="playerScore"></h3>
<button onclick="wrapper();" id="rollBtn">Roll Dice</button>
<button onclick="reRoll();" id="reRollBtn" style="visibility: hidden;">
Re-Roll
</button>
</div>
</body>
Пожалуйста, извините за мои посредственные способности программирования. Я все еще учусь javascript и буду очень рад, если кто-нибудь поможет решить мою проблему и покажет мне, где я ошибаюсь. У меня такое чувство, что я мог бы сделать это намного чище и не сталкиваться с такими проблемами.
PS: Пожалуйста, только чистый JS. Я учусь JS, нет Jquery:)