console-fun
Version:
Some stuff in the console: utils, printing, games and other fun
79 lines (71 loc) • 1.88 kB
JavaScript
import figureSet from "figures";
import chalk from "chalk";
import readline from "readline";
import ansiEscapes from "ansi-escapes";
import { randPos } from "../utils";
import { shuffle } from "fast-shuffle";
let score = 0;
const drawMixFigures = ({ colored }) => {
process.stdout.write(ansiEscapes.clearScreen);
const taken = [];
const interval = setInterval(() => {
let tries = 0;
let x;
let y;
while (tries < 7) {
[x, y] = randPos();
if (taken.some((a) => a[0] === x && a[1] === y)) {
tries++;
} else {
taken.push([x, y]);
tries = 0;
break;
}
}
if (tries > 5) {
clearInterval(interval);
process.stdout.write(ansiEscapes.cursorTo(0, process.stdout.rows - 1));
process.stdout.write(ansiEscapes.eraseEndLine);
process.stdout.write(
ansiEscapes.cursorTo(
process.stdout.columns / 2,
process.stdout.rows - 1,
),
);
process.stdout.write(
chalk.cyan(`${chalk.bold("r")} - run again ${chalk.bold("q")} - exit`),
);
}
process.stdout.write(ansiEscapes.cursorTo(x, y));
const figure = shuffle([
figureSet.hamburger,
figureSet.squareCenter,
figureSet.circle,
figureSet.checkboxOff,
])[0];
if (colored) {
const color = shuffle([
chalk.cyan,
chalk.blue,
chalk.gray,
chalk.green,
chalk.yellow,
chalk.magenta,
])[0];
process.stdout.write(color(figure));
} else {
process.stdout.write(figure);
}
});
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
process.stdin.on("keypress", async (_chunk, key) => {
if (key.name == "r") {
drawHamburgers();
}
if (key && key.name == "q") {
process.exit();
}
});
};
export { drawMixFigures };