namastejs
Version:
A spiritual greeting from your JavaScript code. Because every function deserves a 'Namaste π'
84 lines (68 loc) β’ 1.97 kB
JavaScript
const readline = require("readline");
const WIDTH = 100;
const BODY_HEIGHT = 15;
const BODY_WIDTH = WIDTH - 2;
function line(char = "β") {
return char.repeat(WIDTH);
}
function pad(text = "") {
return text.padEnd(WIDTH - 1);
}
function initScreen() {
process.stdout.write("\x1Bc"); // clear screen
console.log("β" + line() + "β");
console.log("β " + pad("") + "β");
console.log("β" + line() + "β€");
for (let i = 0; i < BODY_HEIGHT; i++) {
console.log("β " + pad("") + "β");
}
console.log("β" + line() + "β€");
console.log("β " + pad("") + "β");
console.log("β" + line() + "β");
}
function updateHeader({ score, lives, dropped, isPaused }) {
readline.cursorTo(process.stdout, 15, 1);
readline.clearLine(process.stdout, 0);
process.stdout.write(
`Score: ${score} β Lives: ${"β€".repeat(
lives
)} β Dropped: ${dropped} | Press "Space" for ${
isPaused ? "βΆοΈ Resumed" : "βΈοΈ Paused"
}`
);
}
function renderBody(words) {
const grid = Array.from({ length: BODY_HEIGHT }, () =>
Array(BODY_WIDTH).fill(" ")
);
words.forEach(({ text, x, y }) => {
if (y >= 0 && y < BODY_HEIGHT) {
for (let i = 0; i < text.length; i++) {
if (x + i < BODY_WIDTH) {
grid[y][x + i] = text[i];
}
}
}
});
for (let row = 0; row < BODY_HEIGHT; row++) {
readline.cursorTo(process.stdout, 2, row + 3);
process.stdout.write(grid[row].join(""));
}
}
function renderInput(input) {
readline.cursorTo(process.stdout, 2, BODY_HEIGHT + 4);
readline.clearLine(process.stdout, 0);
process.stdout.write(`Type here β ${input}`);
}
function parkCursor() {
readline.cursorTo(process.stdout, 2, BODY_HEIGHT + 4);
}
module.exports = {
initScreen,
updateHeader,
renderBody,
renderInput,
parkCursor,
BODY_HEIGHT,
BODY_WIDTH,
};