Функция не работает после нажатия кнопки сброса - PullRequest
1 голос
/ 08 апреля 2019

Кнопка «Очистить» очищает массивы до значений по умолчанию, но функция newGame отказывается запускаться впоследствии.Функция newGame отлично работает, как и предполагалось, до вызова функции Clear.Я полагаю, что новая игровая функция является виновником, но я понятия не имею, какая ее часть может ее сломать.

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

let shuffledBoxes = [];
let boxes = []
let boxMax = 16;
let boxCount = 0;

const newGame = () => {
  for (let i = boxes.length; i != boxMax; i++) {
    if (boxes.length === boxMax) {
      return null;
    }
    if (boxCount != Math.floor(boxMax * 0.4)) {
      if (boxes.includes(2) === false) {
        boxes.push(2);
      }
      boxes.push(1);
      boxCount++;
    } else {
      boxes.push(0);
    }
  }
};

const randomBoxes = () => {
  for (let i = boxes.length - 1; i >= 0; i--) {
    math = Math.floor(Math.random() * boxMax);
    shuffledBoxes.push(boxes[math]);
    boxes.splice([math], 1);
    boxMax--;
  }
};

const boxesClear = () => {
  for (let i = shuffledBoxes.length - 1; i > -1; i--) {
    shuffledBoxes.pop();
  }
  for (let j = boxes.length - 1; j > -1; j--) {
    boxes.pop();
  }
  boxCount = 0;
};

newGame();
randomBoxes();
boxesClear();
//After this point, newGame does not like to run.
newGame();
randomBoxes();

Logging boxes and shuffledBoxes show that
newGame is working before boxClear is called.

boxes =  []
shuffledBoxes =  [ 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 2, 1, 0, 0, 0, 0 ]
boxCount = 6

boxes =  []
shuffledBoxes =  []
boxCount =  0

1 Ответ

3 голосов
/ 08 апреля 2019

Вам нужно reset boxMax до 16, потому что оно становится 0 в randomBoxes из-за

boxMax--;

let shuffledBoxes = [];
let boxes = []
let boxMax = 16;
let boxCount = 0;

const newGame = () => {
  for (let i = boxes.length; i != boxMax; i++) {
    if (boxes.length === boxMax) {
      return null;
    }
    if (boxCount != Math.floor(boxMax * 0.4)) {
      if (boxes.includes(2) === false) {
        boxes.push(2);
      }
      boxes.push(1);
      boxCount++;
    } else {
      boxes.push(0);
    }
  }
};

const randomBoxes = () => {
  for (let i = boxes.length - 1; i >= 0; i--) {
    math = Math.floor(Math.random() * boxMax);
    shuffledBoxes.push(boxes[math]);
    boxes.splice([math], 1);
    boxMax--;
  }
};

const boxesClear = () => {
  for (let i = shuffledBoxes.length - 1; i > -1; i--) {
    shuffledBoxes.pop();
  }
  for (let j = boxes.length - 1; j > -1; j--) {
    boxes.pop();
  }
  boxCount = 0;
  boxMax = 16
};

newGame();
randomBoxes();



boxesClear();
//After this point, newGame does not like to run.


newGame();
randomBoxes();


console.log(shuffledBoxes);
console.log(boxes);

Вы также можете сократить boxesClear функцию

const boxesClear = () => {
  shuffleBoxes = [];
  boxes = [];
  boxCount = 0;
};

Вы также можете иметь один вкладыш.

const boxesClear = () => shuffleBoxes.length = boxes.length = boxCount = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...