const declination = (number, titles) => titles[
(number % 100 > 4 && number % 100 < 20)
? 2
: [2, 0, 1, 1, 1, 2][(number % 10 < 5) ? number % 10 : 5]
];
const games = {
rps: ['камень', 'ножницы', 'бумага'],
rpsls: ['камень', 'ножницы', 'бумага', 'ящерица', 'спок']
};
const beats = {
камень: ['ножницы', 'бумага'],
ножницы: ['бумага', 'ящерица'],
бумага: ['камень', 'спок'],
ящерица: ['бумага', 'спок'],
спок: ['ножницы', 'камень'],
};
const winMsgs = ['Ничья', 'Вы победили', 'Компьютер победил'];
const gameNames = Object.keys(games).map((k) => `${k} (${games[k].join('-')})`);
const selectGameMsg = `Выберите режим игры:\n${gameNames.join('\n')}\nдругое значение для завершения`;
while (true) {
let gameMode = prompt(selectGameMsg);
let choices = games[gameMode] ?? null;
if (choices === null) {
break;
}
let userChoiceMsg = `Выберите свой ход:\n${choices.join('\n')}\nочки - показать счётчик побед\nвыход - завершить игру`;
let userWins = 0;
let compWins = 0;
while (true) {
let userChoice = prompt(userChoiceMsg);
if (userChoice === 'выход') {
break;
}
if (userChoice === 'очки') {
alert(`Ваших побед: ${userWins}\nПобед компьютера: ${compWins}`);
}
if (!choices.includes(userChoice)) {
continue;
}
let compChoice = choices[Math.floor(Math.random() * choices.length)];
let winner = 0;
if (beats[userChoice].includes(compChoice)) {
winner = 1;
userWins += 1;
} else if (beats[compChoice].includes(userChoice)) {
winner = 2;
compWins += 1;
}
alert(`Ваш выбор: ${userChoice}\nВыбор компьютера: ${compChoice}\n${winMsgs[winner]}`);
}
let finalMsg = 'Ничья';
let diff = userWins - compWins;
if (diff > 0) {
finalMsg = `Вы выиграли с перевесом в ${diff} ${declination(diff, ['очко', 'очка', 'очков'])}`;
} else if (diff < 0) {
finalMsg = `Компьютер выиграл с перевесом в ${-diff} ${declination(-diff, ['очко', 'очка', 'очков'])}`;
}
alert(`Ваших побед: ${userWins}\nПобед компьютера: ${compWins}\n${finalMsg}`);
}