Как выбрать ближайшее целое число к случайному числу? - PullRequest
0 голосов
/ 10 октября 2019

Я пытался сделать небольшую игру, где нужно было угадать, какое число выберет компьютер. Пик, который ближе к числу, должен выиграть. Теперь я не знаю, как написать переключатель if /, который сравнивает значения и выбирает тот, который ближе к secretNumber.

. Это мой текущий код для оценки того, кто победил. Как видите, я могу работать только с победителями, чье число совпадает с секретным.

    if (user1Guess == user2Guess && user1Guess == secretGuess) {
        console.log(`TIE!`)
    } else if (user1Guess == secretNumber && user2Guess !== secretNumber){
        console.log(`Player 1 wins!`)
    } else if (user1Guess !== secretNumber && user2Guess == secretNumber) 
        {
        console.log(`Player 2 wins!`)
    };

Ответы [ 3 ]

1 голос
/ 10 октября 2019

Возьмите абсолютное значение разницы между каждым предположением и secretNumber. Ближайшим предположением будет тот, чья разница меньше:

const user1Diff = Math.abs(user1Guess - secretGuess);
const user2Diff = Math.abs(user2Guess - secretGuess);
if (user1Diff === user2Diff) {
  console.log('Tie');
} else if (user1Diff > user2Diff) {
  console.log('Player 2 wins');
} else {
  console.log('Player 1 wins');
}
0 голосов
/ 10 октября 2019

Давайте подумаем о том, что значит для догадки быть ближе.

Если x ближе к n, чем y. Тогда расстояние от x до n должно быть меньше расстояния от y до n.

Для чисел расстояние от x до n равно abs(n - x),что является абсолютным значением разницы. Абсолютное значение всегда является неотрицательным числом. Например, абсолютное значение -3 равно 3.

Поэтому, если x ближе к n, чем y, это должно означать, что также верно следующее:

Math.abs(n - x) < Math.abs(n - y)

Затем вы можете использовать их в своих условиях заявления.

const user1Distance = Math.abs(secretNumber - user1Guess);
const user2Distance = Math.abs(secretNumber - user2Guess);

if (user1Distance === user2Distance) {
    console.log("TIE!");
} else if (user1Distance < user2Distance) {
    console.log("Player 1 wins!");
} else {
    console.log("Player 2 wins!");
}
0 голосов
/ 10 октября 2019

Вы можете использовать Math.abs(), чтобы получить разницу между догадками пользователей, и secretNumber, чтобы сравнить и решить, кто победит.

Надеюсь, этот фрагмент поможет:

const user1Guess = Math.floor(Math.random() * 100) + 1, // Random number between 1-100 to mock user input
  user2Guess = Math.floor(Math.random() * 100) + 1, // Random number between 1-100 to mock user input
  secretNumber = Math.floor(Math.random() * 100) + 1, // Random number between 1-100 to mock computer pick
  user1Diff = Math.abs(user1Guess - secretNumber),
  user2Diff = Math.abs(user2Guess - secretNumber);

if (user1Diff === user2Diff) {
  console.log(`TIE!`)
} else if (user1Diff < user2Diff) {
  console.log(`Player 1 wins!`)
} else if (user1Diff > user2Diff) {
  console.log(`Player 2 wins!`)
} else {
  console.log(`You broke the game, congrats!`)
}

Кстати, сначала вы опечатка if утверждение: secretGuess должно быть secretNumber

...