javascript-millionaire
javascript-millionaire copied to clipboard
Refactored the code
#!/usr/bin/env node
import chalk from "chalk";
import chalkAnimation from "chalk-animation";
import figlet from "figlet";
import gradient from "gradient-string";
import inquirer from "inquirer";
import { createSpinner } from "nanospinner";
let playerName;
const sleep = (ms = 2000) => new Promise((r) => setTimeout(r, ms));
async function welcome() {
const rainbowTitle = chalkAnimation.rainbow(
"Who wants to be javascript millionaire?"
);
await sleep();
rainbowTitle.stop();
console.log(`
${chalk.bgBlue("HOW TO PLAY")}
I am a process on your computer.
If you get any question wrong I will be ${chalk.bgRed("killed")}
So get all the questions right...
`);
}
async function handleAnswer(isCorrect) {
const spinner = createSpinner("Checking answer...").start();
await sleep();
if (isCorrect) {
spinner.success({ text: `Nice work ${playerName}. That's a legit answer` });
} else {
spinner.error({ text: `💀💀💀 Game over, you lose ${playerName}!` });
process.exit(1); //1 is for error,0 is for success
}
}
async function askName() {
const answers = await inquirer.prompt({
name: "player_name",
type: "input",
message: "What is your name?",
default() {
return "Player";
},
});
playerName = answers.player_name;
}
function winner() {
console.clear();
figlet(`Congrats , ${playerName} !\n $ 1 , 0 0 0 , 0 0 0`, (err, data) => {
console.log(gradient.pastel.multiline(data) + "\n");
console.log(
chalk.green(
`Programming isn't about what you know; it's about making the command line look cool`
)
);
process.exit(0);
});
}
async function question(index) {
console.log("\n");
const answers = await inquirer.prompt({
name: "question",
type: "list",
...mcqs[index],
});
return handleAnswer(
answers.question === mcqs[index].choices[mcqs[index].answer]
);
}
let mcqs = [
{
message: 'What is x? var x = 1_1 + "1" + Number(1)\n',
choices: ["4", '"4"', '"1111"', "69420"],
answer: 2,
},
{
message: "JavaScript was created in 10 days then released on\n",
choices: [
"May 23rd, 1995",
"Nov 24th, 1995",
"Dec 4th, 1995",
"Dec 17, 1996",
],
answer: 2,
},
{
message: `What is the first element in the array?\n\t['🐏', '🦙', '🐍'].length = 0\n`,
choices: ["0", "🐏", "🐍", "undefined"],
answer: 3,
},
{
message: "Which of the following is NOT a primitive type?\n",
choices: [
"boolean",
"number",
"null",
"object", // Correct
],
answer: 3,
},
{
message: `JS is a high-level single-threaded, garbage-collected,
interpreted(or just-in-time compiled), prototype-based,
multi-paradigm, dynamic language with a ____ event loop`,
choices: ["multi-threaded", "non-blocking", "synchronous", "promise-based"],
answer: 1,
},
];
async function main() {
console.clear();
await welcome();
await askName();
for (let i = 0; i < mcqs.length; i++) {
await question(i);
}
winner();
}
// Run it with top-level await
main();