Симуляция вытягивания карты не возвращает значения - PullRequest
2 голосов
/ 24 января 2020

Я хочу смоделировать раунды вытягивания 2-х карт и выбора карты с более высоким значением из убывающей колоды.

Кажется, что работает каждая область кода, кроме окончательного возврата массива playHistory, который пуст когда я верну его в Google Sheets. Нет ошибок, нет данных. Если я вызову только функцию playCard или верну массив колоды, выведите правильные значения.

//Global Vars
var deck = [1, 1, 1, 2, 2, 2, 3, 3, 3];
var playHistory = [];
var cardsPlayed = -1; //So first card played is index 0 in playHistory array

function simGame(turns) {
  var i;
  for (i = 0; i < turns; i++) {
    playCard();
  }

  return playHistory;
}


function playCard() {
  var draw1 = 0;
  var draw2 = 0;

  draw1 = [deck.splice(Math.floor(Math.random() * deck.length), 1)];
  draw2 = [deck.splice(Math.floor(Math.random() * deck.length), 1)];
  if (draw1 > draw2) {
    playHistory.push(draw1);
  } else {
    playHistory.push(draw2);
  }
  
  cardsPlayed = cardsPlayed + 1;
  return playHistory[cardsPlayed];
}

Ответы [ 3 ]

1 голос
/ 24 января 2020

Просто чтобы оставить четкое решение, проблема была связана с синтаксической ошибкой:

  draw1 = [deck.splice(Math.floor(Math.random() * deck.length), 1)];
  draw2 = [deck.splice(Math.floor(Math.random() * deck.length), 1)];

Там, где сращивание излишне заключено в скобки:

  draw1 = deck.splice(Math.floor(Math.random() * deck.length), 1);
  draw2 = deck.splice(Math.floor(Math.random() * deck.length), 1);
0 голосов
/ 25 января 2020

Я сделал это проще, перетасовывая колоду заранее с помощью rando js .com и затем выталкивая из колоды вместо сращивания. Все, что вам нужно сделать, чтобы перемешать с рандо js, это сказать randoSequence(deck).

var deck = [1, 1, 1, 2, 2, 2, 3, 3, 3];

function simGame(turns) {
  var playHistory = []
  var shuffledDeck = randoSequence(deck);
  for (var i = 0; i < turns && shuffledDeck.length > 0; i++) {
    var draw1 = (shuffledDeck.pop() || {value: 0}).value;
    var draw2 = (shuffledDeck.pop() || {value: 0}).value;
    playHistory.push(Math.max(draw1, draw2));
  }
  return playHistory;
}

console.log(simGame(5));
<script src="https://randojs.com/1.0.0.js"></script>

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

(shuffledDeck.pop() || {value: 0}).value

Это просто говорит о том, что если массив shuffledDeck пуст и, следовательно, pop() возвращает undefined, используйте значение 0 в качестве значения по умолчанию вместо разрешения undefined.value выполнить, что приведет к ошибке.

0 голосов
/ 24 января 2020

Это, вероятно, не стоит ответа, но когда вы запускаете свою функцию, верные данные возвращаются? Я полагаю, что проблема заключается в ваших листах Google, а не в JS.

//Global Vars
var deck = [1, 1, 1, 2, 2, 2, 3, 3, 3];
var playHistory = [];
var cardsPlayed = -1; //So first card played is index 0 in playHistory array

console.log(simGame(3));

function simGame(turns) {
  var i;
  for (i = 0; i < turns; i++) {
    playCard();
  }

  return playHistory;
}


function playCard() {
  var draw1 = 0;
  var draw2 = 0;

  draw1 = [deck.splice(Math.floor(Math.random() * deck.length), 1)];
  draw2 = [deck.splice(Math.floor(Math.random() * deck.length), 1)];
  if (draw1 > draw2) {
    playHistory.push(draw1);
  } else {
    playHistory.push(draw2);
  }
  
  cardsPlayed = cardsPlayed + 1;
  return playHistory[cardsPlayed];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...