flag1 = true
flag2 = true
while (flag1) {
var gameModeChange = prompt('Выберите режим игры - rps или rpsls (Rock-paper-scissors или Rock-paper-scissors-lizard-spock)\nЕсли захотите завершить игру, напишите "отмена"');
var computerScore = 0;
var userScore = 0;
if (gameModeChange === 'rps' || gameModeChange === 'rpsls') {
while (flag2) {
const computerRandChoice = () => {
let random = Math.random()
if (gameModeChange === 'rps') {
if (random <= 0.33) {
computer = 'камень';
} else if (0.34 <= random && random <= 0.66) {
computer = 'ножницы';
} else {
computer = 'бумага';
}
} else if (gameModeChange === 'rpsls') {
if (random <= 0.2) {
computer = 'камень';
} else if (0.21 <= random && random <= 0.4) {
computer = 'ножницы';
} else if (0.41 <= random && random <= 0.6) {
computer = 'бумага';
} else if (0.61 <= random && random <= 0.8) {
computer = 'ящерица';
} else {
computer = 'спок';
}
};
return computer
};
computerRandChoice()
let computerChoice = computerRandChoice();
if (gameModeChange === 'rps') {
let userChoice = prompt('Камень\nНожницы\nБумага\n(Отобразить) очки\nОтмена')
userChoice = userChoice.toLowerCase();
if (userChoice === 'камень' && computerChoice === 'ножницы' || userChoice === 'ножницы' && computerChoice === 'бумага' || userChoice === 'бумага' && computerChoice === 'камень') {
userScore += 1;
alert(`Вы получили очко, потому-что Вы выбрали ${userChoice}, а компьютер выбрал ${computerChoice}.`)
} else if (computerChoice === 'камень' && userChoice === 'ножницы' || computerChoice === 'ножницы' && userChoice === 'бумага' || computerChoice === 'бумага' && userChoice === 'камень') {
computerScore += 1;
alert(`Компьютер получил очко, потому-что вы выбрали ${userChoice}, а компьютер выбрал ${computerChoice}.`)
} else if (userChoice === 'очки') {
alert(`Вы: ${userScore}\nКомпьютер: ${computerScore}`)
} else if (userChoice === computerChoice) {
alert('Ничья');
} else if (userChoice === 'отмена') {
flag2 = false
}
} else if (gameModeChange === 'rpsls') {
let userChoice = prompt('Камень\nНожницы\nБумага\nЯщерица\nСпок\n(Отобразить) Очки\nОтмена')
userChoice = userChoice.toLowerCase();
if (userChoice === 'камень' && computerChoice === 'ножницы' || userChoice === 'камень' && computerChoice === 'ящерица' || userChoice === 'ящерица' && computerChoice === 'бумага' || userChoice === 'ящерица' && computerChoice === 'спок' || userChoice === 'спок' && computerChoice === 'ножницы' || userChoice === 'спок' && computerChoice === 'камень' || userChoice === 'ножницы' && computerChoice === 'бумага' || userChoice === 'ножницы' && computerChoice === 'ящерица' || userChoice === 'бумага' && computerChoice === 'спок' || userChoice === 'бумага' && computerChoice === 'камень') {
userScore += 1;
alert(`Вы получили очко, потому-что Вы выбрали ${userChoice}, а компьютер выбрал ${computerChoice}.`)
} else if (computerChoice === 'камень' && userChoice === 'ножницы' || computerChoice === 'камень' && userChoice === 'ящерица' || computerChoice === 'ящерица' && userChoice === 'бумага' || computerChoice === 'ящерица' && userChoice === 'спок' || computerChoice === 'спок' && userChoice === 'ножницы' || computerChoice === 'спок' && userChoice === 'камень' || computerChoice === 'ножницы' && userChoice === 'бумага' || computerChoice === 'ножницы' && userChoice === 'ящерица' || computerChoice === 'бумага' && userChoice === 'спок' || computerChoice === 'бумага' && userChoice === 'камень') {
computerScore += 1;
alert(`Компьютер получил очко, потому-что вы выбрали ${userChoice}, а компьютер выбрал ${computerChoice}.`)
} else if (userChoice === computerChoice) {
alert('Ничья');
} else if (userChoice === 'очки') {
alert(`Вы: ${userScore}\nКомпьютер: ${computerScore}`)
} else if (userChoice === 'отмена') {
flag2 = false
}
}
}
let diff = 0;
if (userScore > computerScore) {
diff += userScore - computerScore;
alert(`Вы победили с отрывом в ${diff} очко/очка/очков\nВы победили ${userScore} раз\nКомпьютер ${computerScore} раз`)
} else if (computerScore > userScore) {
diff += computerScore - userScore;
alert(`Компьютер победил вас с отрывом в ${diff} очко/очка/очков\nВы победили ${userScore} раз\nКомпьютер ${computerScore} раз`)
} else if (computerScore === userScore){
alert(`Ничья\nВы победили ${userScore} раз\nКомпьютер ${computerScore} раз`)
}
} else {
flag1 = false
}
}
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}`);
}