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

function computerPlay() {
  const number = Math.floor(Math.random() * 1000);
  if (number % 3 === 0) {
    return "rock";
  }
  if (number % 3 === 1) {
    return "paper";
  } else {
    return "scissors";
  }
}
function playRound(playerSelection, computerSelection) {
  playerSelection = "rock";
  computerSelection = computerPlay();
  if (
    (playerSelection == "rock" && computerSelection == "scissors") ||
    (playerSelection == "scissors" && computerSelection == "paper") ||
    (playerSelection == "paper" && computerSelection == "rock")
  ) {
    return "Player Wins!";
  } else if (
    (playerSelection == "rock" && computerSelection == "paper") ||
    (playerSelection == "paper" && computerSelection == "scissors") ||
    (playerSelection == "scissors" && computerSelection == "rock")
  ) {
    return "Computer Wins!";
  } else {
    return "Tie";
  }
}
playerSelection = "rock";
computerSelection = computerPlay();
console.log(playRound(playerSelection, computerSelection));
1
HakaKuti 24 Ноя 2020 в 03:22

3 ответа

Лучший ответ

Добавить цикл для последних 3 строк

    for (i=0; i<5; i++){
       playerSelection = "rock";
       computerSelection = computerPlay();
       console.log(playRound(playerSelection, computerSelection));
    }

Изменить: обратите внимание, что у вас есть избыточная функция вызова компьютерной функции Play () в помещении playgRound, поскольку выбор компьютера передается во втором аргументе

0
poetrasapoetra 24 Ноя 2020 в 00:50

Надеюсь, этот пример дает подсказку, как правильно программировать.

// rock = 0
// paper = 1
// scissor = 2
const valueMap = {
  0: 'rock',
  1: 'paper',
  2: 'scissor'
}

function pick() {
  return Math.floor(Math.random() * 3)
}

function decide(p1, p2) {
  const pool = [p1, p2]
  const sortedPool = pool.sort((a, b) => b.value - a.value)
  const diff = sortedPool[0].value - sortedPool[1].value

  if (diff === 2) {
    return sortedPool[1].name
  } else if (diff === 0) {
    return 'draw'
  } else {
    return pool.find(v => v.value === sortedPool[0].value).name
  }
}

function play(times, cb) {
  let n = 1
  while (n <= times) {
    cb(n)
    n++
  }
}

play(5, function(n) {
  const player1 = {
    name: 'Player',
    value: pick()
  }
  const player2 = {
    name: 'Computer',
    value: pick()
  }
  const result = decide(player1, player2)
  console.log(
    `Game ${n}`,
    `${player1.name} ${valueMap[player1.value]}`,
    ` vs `,
    `${player2.name} ${valueMap[player2.value]}`,
    `>>> Winner ${result}
    `
  )
})
1
Medet Tleukabiluly 24 Ноя 2020 в 01:13

Если я правильно понял, что вы хотите, вы можете выполнить цикл while с помощью counter, также я немного улучшил ваш код, сделав строгое равенство (от == до === ) и удален избыточный код

let counter = 1;

function computerPlay() {
  const number = Math.floor(Math.random() * 1000);
  if (number % 3 === 0) {
    return "rock";
  } else if (number % 3 === 1) {
    return "paper";
  } else {
    return "scissors";
  }
}

function playRound(playerSelection, computerSelection) {
  counter++;
  if (
    (playerSelection === "rock" && computerSelection === "scissors") ||
    (playerSelection === "scissors" && computerSelection === "paper") ||
    (playerSelection === "paper" && computerSelection === "rock")
  ) {
    return "Player Wins!";
  } else if (
    (playerSelection === "rock" && computerSelection == "paper") ||
    (playerSelection === "paper" && computerSelection === "scissors") ||
    (playerSelection === "scissors" && computerSelection === "rock")
  ) {
    return "Computer Wins!";
  } else {
    return "Tie";
  }
}
playerSelection = "rock";

while (counter < 6) {
  console.log(playRound(playerSelection, computerPlay()));
}
1
dippas 24 Ноя 2020 в 00:49
64978538