mirror of
https://github.com/FranP-code/Rock-Paper-and-Scissors-CLI-Game.git
synced 2025-10-13 00:32:38 +00:00
347 lines
8.5 KiB
JavaScript
347 lines
8.5 KiB
JavaScript
const inquirer = require('inquirer')
|
|
const colors = require('colors')
|
|
|
|
const messagesList = {
|
|
|
|
welcome: {
|
|
|
|
english: 'Welcome to the Rock Paper and Scissors CLI game!',
|
|
spanish: '¡Bienvenido al juego de Piedra Papel o Tijeras desde la consola!'
|
|
},
|
|
|
|
gameTitle: {
|
|
|
|
english: 'Rock Paper and Scissors CLI game',
|
|
spanish: 'Piedra Papel o Tijeras desde la consola'
|
|
},
|
|
|
|
play: {
|
|
|
|
english: 'Select one option:',
|
|
spanish: 'Selecciona una opción'
|
|
},
|
|
|
|
options: {
|
|
|
|
english: ['Rock', 'Paper', 'Scissors'],
|
|
spanish: ['Piedra', 'Papel', 'Tijeras']
|
|
},
|
|
|
|
resultTitle: {
|
|
|
|
english: 'Results:',
|
|
spanish: 'Resultados:'
|
|
},
|
|
|
|
tie: {
|
|
|
|
english: ' - The result is a draw! GG',
|
|
spanish: ' - Empate! Bien Jugado.'
|
|
},
|
|
|
|
victory: {
|
|
|
|
english: ' - You win!',
|
|
spanish: ' - Ganaste!'
|
|
},
|
|
|
|
defeat: {
|
|
|
|
english: ' - You lost...',
|
|
spanish: ' - Perdiste...'
|
|
},
|
|
|
|
computerSelectionTitle: {
|
|
|
|
english: 'Computer selection:',
|
|
spanish: 'Selección de la computadora:'
|
|
},
|
|
|
|
computerSelection: {
|
|
|
|
english: ' - Computer selection is ',
|
|
spanish: ' - La selección de la computadora es '
|
|
},
|
|
|
|
stats: {
|
|
|
|
title: {
|
|
|
|
english: 'Stats:',
|
|
spanish: 'Estadisticas:'
|
|
},
|
|
|
|
victory: {
|
|
|
|
english: ' - Victory count: ',
|
|
spanish: ' - Victorias: '
|
|
},
|
|
|
|
consecutiveVictory: {
|
|
|
|
english: ' - Consecutive victory count: ',
|
|
spanish: ' - Victorias consecutivas: ',
|
|
},
|
|
|
|
defeat: {
|
|
|
|
english: ' - Defeat count: ',
|
|
spanish: ' - Derrotas: ',
|
|
},
|
|
},
|
|
|
|
playAgain: {
|
|
|
|
title: {
|
|
|
|
english: 'Do you wanna play again?',
|
|
spanish: '¿Quieres jugar otra vez?'
|
|
},
|
|
|
|
options: {
|
|
|
|
english: ['Yes', 'No'],
|
|
spanish: ['Sí', 'No']
|
|
}
|
|
},
|
|
|
|
thanksForPlay: {
|
|
|
|
english: 'Thanks for playing! Francisco Pessano',
|
|
spanish: 'Gracias por jugar! Francisco Pessano'
|
|
}
|
|
}
|
|
|
|
victoryCount = 0
|
|
consecutiveVictoryCount = 0
|
|
defeatCount = 0
|
|
|
|
function gameLogic(languageSelection) {
|
|
|
|
function showStats() {
|
|
|
|
console.log()
|
|
console.log(messagesList.stats.title[languageSelection].underline.bold)
|
|
console.log(messagesList.stats.victory[languageSelection] + victoryCount.toString().bold)
|
|
console.log(messagesList.stats.consecutiveVictory[languageSelection] + consecutiveVictoryCount.toString().bold)
|
|
console.log(messagesList.stats.defeat[languageSelection] + defeatCount.toString().bold)
|
|
}
|
|
|
|
function victoryMessage() {
|
|
|
|
victoryCount++
|
|
consecutiveVictoryCount++
|
|
console.log(messagesList.victory[languageSelection].bold.green)
|
|
}
|
|
|
|
function defeatMessage() {
|
|
|
|
defeatCount++
|
|
consecutiveVictoryCount = 0
|
|
console.log(messagesList.defeat[languageSelection].bold.red)
|
|
}
|
|
|
|
function translateOption(userSelection, actualLanguage, targetLanguage) {
|
|
|
|
const index = messagesList.options[actualLanguage].findIndex((element) => element === userSelection)
|
|
|
|
return messagesList.options[targetLanguage][index]
|
|
}
|
|
|
|
function translatePlayAgainOption(userSelection, actualLanguage, targetLanguage) {
|
|
|
|
const index = messagesList.playAgain.options[actualLanguage].findIndex((element) => element === userSelection)
|
|
|
|
return messagesList.playAgain.options[targetLanguage][index]
|
|
}
|
|
|
|
inquirer.prompt({
|
|
|
|
name: 'userSelecction',
|
|
message: messagesList.play[languageSelection],
|
|
type: 'list',
|
|
|
|
choices: [...messagesList.options[languageSelection]]
|
|
})
|
|
|
|
.then((answer) => {
|
|
|
|
const options = [...messagesList.options['english']]
|
|
const computerSelection = options[Math.floor(Math.random() * options.length)]
|
|
|
|
let userSelection = answer.userSelecction
|
|
userSelection = translateOption(userSelection, languageSelection, 'english')
|
|
|
|
console.log()
|
|
console.log(messagesList.computerSelectionTitle[languageSelection].underline.bold)
|
|
console.log(messagesList.computerSelection[languageSelection] + colors.bold(translateOption(computerSelection, 'english', languageSelection)))
|
|
console.log()
|
|
|
|
console.log(messagesList.resultTitle[languageSelection].underline.bold)
|
|
|
|
if (computerSelection === userSelection) {
|
|
|
|
console.log(messagesList.tie[languageSelection].bold.yellow)
|
|
}
|
|
|
|
// if (computerSelection === 'Rock') {
|
|
|
|
// if (userSelection === 'Paper') {
|
|
|
|
// victoryMessage()
|
|
// return
|
|
// }
|
|
|
|
// if (userSelection === 'Scissors') {
|
|
|
|
// defeatMessage()
|
|
// return
|
|
// }
|
|
|
|
// return
|
|
// }
|
|
|
|
// if (computerSelection === 'Paper') {
|
|
|
|
// if (userSelection === 'Rock') {
|
|
|
|
// defeatMessage()
|
|
// return
|
|
// }
|
|
|
|
// if (userSelection === 'Scissors') {
|
|
|
|
// victoryMessage()
|
|
// return
|
|
// }
|
|
|
|
// return
|
|
// }
|
|
|
|
// if (computerSelection === 'Scissors') {
|
|
|
|
// if (userSelection === 'Rock') {
|
|
|
|
// victoryMessage()
|
|
// return
|
|
// }
|
|
|
|
// if (userSelection === 'Paper') {
|
|
|
|
// defeatMessage()
|
|
// return
|
|
// }
|
|
|
|
// return
|
|
// }
|
|
|
|
switch (computerSelection) {
|
|
|
|
case 'Rock':
|
|
|
|
if (userSelection === 'Paper') {
|
|
|
|
victoryMessage()
|
|
}
|
|
|
|
if (userSelection === 'Scissors') {
|
|
|
|
defeatMessage()
|
|
}
|
|
|
|
break;
|
|
|
|
case 'Paper':
|
|
|
|
if (userSelection === 'Rock') {
|
|
|
|
defeatMessage()
|
|
}
|
|
|
|
if (userSelection === 'Scissors') {
|
|
|
|
victoryMessage()
|
|
}
|
|
|
|
break;
|
|
|
|
case 'Scissors':
|
|
|
|
if (userSelection === 'Rock') {
|
|
|
|
victoryMessage()
|
|
}
|
|
|
|
if (userSelection === 'Paper') {
|
|
|
|
defeatMessage()
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
showStats()
|
|
|
|
console.log('')
|
|
|
|
inquirer.prompt({
|
|
|
|
name: 'playAgain',
|
|
message: messagesList.playAgain.title[languageSelection],
|
|
type: 'list',
|
|
|
|
choices: [...messagesList.playAgain.options[languageSelection]]
|
|
})
|
|
.then((answer) => {
|
|
|
|
const response = translatePlayAgainOption(answer.playAgain, languageSelection, 'english')
|
|
|
|
if (response === 'Yes') {
|
|
|
|
console.clear()
|
|
console.log()
|
|
console.log(messagesList.gameTitle[languageSelection].bold.brightBlue)
|
|
console.log()
|
|
|
|
gameLogic(languageSelection)
|
|
return
|
|
}
|
|
|
|
if (response === 'No') {
|
|
|
|
console.log()
|
|
console.log(messagesList.thanksForPlay[languageSelection].bold.brightYellow)
|
|
console.log()
|
|
return
|
|
}
|
|
|
|
})
|
|
})
|
|
}
|
|
|
|
console.clear()
|
|
|
|
inquirer.prompt({
|
|
|
|
name: 'languageSelect',
|
|
message: 'Select language:',
|
|
default: 'English',
|
|
type: 'list',
|
|
|
|
choices: ['English', 'Spanish']
|
|
})
|
|
|
|
.then((answer) => {
|
|
|
|
const languageSelection = answer.languageSelect.toLowerCase()
|
|
|
|
console.log('')
|
|
console.log(messagesList.welcome[languageSelection].bold.brightBlue)
|
|
console.log('')
|
|
|
|
gameLogic(languageSelection)
|
|
|
|
}) |