javascript-millionaire icon indicating copy to clipboard operation
javascript-millionaire copied to clipboard

Refactored the code

Open Harsh-0-7 opened this issue 1 year ago • 0 comments

#!/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();

Harsh-0-7 avatar Jun 23 '23 12:06 Harsh-0-7