UNPKG

console-fun

Version:

Some stuff in the console: utils, printing, games and other fun

617 lines (597 loc) 21.4 kB
import readline from "readline"; import ansiEscapes from "ansi-escapes"; import delay from "delay"; import figureSet from "figures"; import { times } from "rambda"; import { fiveTimes, fourTimes, goToRel, randPos, threeTimes, twoTimes, writeCur, writeRel, } from "../utils"; import { shuffle } from "fast-shuffle"; const drawOne = () => { process.stdout.write(figureSet.lineSlash); process.stdout.write(ansiEscapes.cursorMove(0, -1)); process.stdout.write(figureSet.lineSlash); process.stdout.write(figureSet.lineVerticalBold); times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineVerticalBold); }, 5); }; const drawTwo = () => { writeRel(2, 2, figureSet.lineUpDoubleRightDouble); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); // writeRel(0, -1, figureSet.lineVerticalDouble); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); writeRel(-1, -1, figureSet.lineDownDoubleRightDouble); times(() => { // process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineDouble); }, 5); process.stdout.write(figureSet.lineDownDoubleLeftDouble); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); times(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }, 3); writeRel(-1, 0, figureSet.lineUpDoubleLeftDouble); fiveTimes(() => { writeRel(-2, 0, figureSet.lineDouble); }); writeRel(-2, 0, figureSet.lineDownDoubleRightDouble); twoTimes(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }); writeRel(-1, 1, figureSet.lineUpDoubleRightDouble); fiveTimes(() => { writeRel(0, 0, figureSet.lineDouble); }); writeCur(figureSet.lineUpDoubleLeftDouble); }; const drawThree = (restorePos = false) => { if (restorePos) { writeCur(ansiEscapes.cursorSavePosition); } writeRel(0, 0, figureSet.lineDownDoubleRightDouble); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); // writeRel(0, -1, figureSet.lineVerticalDouble); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); fiveTimes(() => { // process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineDouble); }); process.stdout.write(figureSet.lineDownDoubleLeftDouble); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); threeTimes(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }); // writeRel(-1, 0, figureSet.lineUpDoubleLeftDouble); // process.stdout.write(ansiEscapes.cursorMove(-1, 0)); // process.stdout.write(ansiEscapes.cursorSavePosition); fiveTimes(() => { writeRel(-2, 0, figureSet.lineDouble); }); goToRel(4, 0); // process.stdout.write(ansiEscapes.cursorRestorePosition); writeRel(0, 0, figureSet.lineUpDoubleDownDoubleLeftDouble); // writeRel(-2, 0, figureSet.lineDownDoubleRightDouble); twoTimes(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }); writeRel(-1, 1, figureSet.lineUpDoubleLeftDouble); fiveTimes(() => { writeRel(-2, 0, figureSet.lineDouble); }); writeRel(-2, 0, figureSet.lineUpDoubleRightDouble); if (restorePos) { writeCur(ansiEscapes.cursorRestorePosition); } }; const drawFour = () => { threeTimes((i) => { if (i === 0) { writeRel(0, 0, figureSet.lineVerticalDouble); } else { writeRel(-1, 1, figureSet.lineVerticalDouble); } }); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); // goToRel(-1, -2); writeRel(-1, 1, figureSet.lineUpDoubleRightDouble); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); // writeRel(-1, -1, figureSet.lineDownDoubleRightDouble); times(() => { writeRel(0, 0, figureSet.lineDouble); }, 4); writeRel(0, 0, figureSet.lineUpDoubleDownDoubleLeftDouble); // process.stdout.write(figureSet.lineDownDoubleLeftDouble); writeRel(-1, -1, figureSet.lineVerticalDouble); writeRel(-1, -1, figureSet.lineVerticalDouble); times((i) => { if (i === 0) { writeRel(-1, 3, figureSet.lineVerticalDouble); } else { writeRel(-1, 1, figureSet.lineVerticalDouble); } }, 3); // writeRel(-1, 0, figureSet.lineUpDoubleLeftDouble); // fiveTimes(() => { // writeRel(-2, 0, figureSet.lineDouble); // }); // writeRel(-2, 0, figureSet.lineDownDoubleRightDouble); // twoTimes(() => { // writeRel(-1, 1, figureSet.lineVerticalDouble); // }); // writeRel(-1, 1, figureSet.lineUpDoubleRightDouble); // fiveTimes(() => { // writeRel(0, 0, figureSet.lineDouble); // }); // writeCur(figureSet.lineUpDoubleLeftDouble); }; const drawFive = () => { goToRel(4, 0); writeRel(-2, 0, figureSet.lineDownDoubleLeftDouble); times((i) => { // process.stdout.write(ansiEscapes.cursorMove(-1, 1)); if (i !== 0) { writeRel(-2, 0, figureSet.lineDouble); } else { writeRel(-2, 0, figureSet.lineDouble); } }, 5); writeRel(-2, 0, figureSet.lineDownDoubleRightDouble); // // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); twoTimes(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }); writeRel(-1, 1, figureSet.lineUpDoubleRightDouble); fiveTimes(() => { writeRel(0, 0, figureSet.lineDouble); }); writeRel(0, 0, figureSet.lineDownDoubleLeftDouble); twoTimes(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }); writeRel(-1, 1, figureSet.lineUpDoubleLeftDouble); fiveTimes(() => { writeRel(-2, 0, figureSet.lineDouble); }); writeRel(-2, 0, figureSet.lineUpDoubleRightDouble); }; const drawSix = () => { goToRel(4, 0); writeRel(-2, 0, figureSet.lineDownDoubleLeftDouble); times((i) => { // process.stdout.write(ansiEscapes.cursorMove(-1, 1)); if (i !== 0) { writeRel(-2, 0, figureSet.lineDouble); } else { writeRel(-2, 0, figureSet.lineDouble); } }, 5); writeRel(-2, 0, figureSet.lineDownDoubleRightDouble); // // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); fiveTimes(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }); writeRel(-1, 1, figureSet.lineUpDoubleRightDouble); fiveTimes(() => { writeRel(0, 0, figureSet.lineDouble); }); writeRel(0, 0, figureSet.lineUpDoubleLeftDouble); twoTimes(() => { writeRel(-1, -1, figureSet.lineVerticalDouble); }); writeRel(-1, -1, figureSet.lineDownDoubleLeftDouble); fiveTimes(() => { writeRel(-2, 0, figureSet.lineDouble); }); writeRel(-2, 0, figureSet.lineUpDoubleDownDoubleRightDouble); // writeRel(-1, 1, figureSet.lineUpDoubleLeftDouble); // fiveTimes(() => { // writeRel(-2, 0, figureSet.lineDouble); // }); // writeRel(-2, 0, figureSet.lineUpDoubleRightDouble); }; const drawFiveWithRestore = () => { goToRel(4, 0); writeRel(-2, 0, figureSet.lineDownDoubleLeftDouble); times((i) => { // process.stdout.write(ansiEscapes.cursorMove(-1, 1)); if (i !== 0) { writeRel(-2, 0, figureSet.lineDouble); } else { writeRel(-2, 0, figureSet.lineDouble); } }, 5); writeRel(-2, 0, figureSet.lineDownDoubleRightDouble); // // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); twoTimes(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }); writeRel(-1, 1, figureSet.lineUpDoubleRightDouble); fiveTimes(() => { writeRel(0, 0, figureSet.lineDouble); }); writeRel(0, 0, figureSet.lineDownDoubleLeftDouble); twoTimes(() => { writeRel(-1, 1, figureSet.lineVerticalDouble); }); writeRel(-1, 1, figureSet.lineUpDoubleLeftDouble); fiveTimes(() => { writeRel(-2, 0, figureSet.lineDouble); }); writeRel(-2, 0, figureSet.lineUpDoubleRightDouble); }; const drawX = async () => { process.stdout.write(ansiEscapes.cursorMove(14, 10)); // await delay(100); // process.stdout.write(figureSet.lineDownDoubleRightDouble); // await delay(100); // process.stdout.write(figureSet.lineDouble); await delay(100); // process.stdout.write(figureSet.lineUpDoubleLeftDouble); times(async (i) => { if (i > 0) { // await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, -1)); } // await delay(100); process.stdout.write(figureSet.lineVerticalDouble); }, 2); // process.stdout.write(ansiEscapes.cursorMove(-1, -1)); // await delay(100); // process.stdout.write(figureSet.lineVerticalDouble); // await delay(1000); process.stdout.write(ansiEscapes.cursorMove(-1, -1)); await delay(100); process.stdout.write(figureSet.lineDownDoubleRightDouble); times(() => { process.stdout.write(figureSet.lineDouble); }, 6); await delay(100); process.stdout.write(figureSet.lineDownDoubleLeftDouble); times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); // process.stdout.write(ansiEscapes.cursorMove(-1, 1)); // process.stdout.write(figureSet.lineVerticalDouble); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, 1)); await delay(100); process.stdout.write(figureSet.lineUpDoubleRightDouble); times(() => { process.stdout.write(figureSet.lineDouble); }, 6); // await delay(100); // process.stdout.write(figureSet.lineDouble); // await delay(100); // process.stdout.write(figureSet.lineDouble); // await delay(100); // process.stdout.write(figureSet.squareSmall); // await delay(100); // process.stdout.write(figureSet.lineDouble); await delay(100); process.stdout.write(figureSet.lineDownDoubleLeftDouble); await delay(100); times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, 1)); await delay(100); process.stdout.write(figureSet.lineUpDoubleLeftDouble); times(() => { process.stdout.write(ansiEscapes.cursorMove(-2)); process.stdout.write(figureSet.lineDouble); }, 6); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-2)); await delay(100); process.stdout.write(figureSet.lineDownDoubleRightDouble); await delay(100); times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, 1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, 1)); await delay(100); process.stdout.write(figureSet.lineUpDoubleLeftDouble); times(() => { process.stdout.write(ansiEscapes.cursorMove(-2)); process.stdout.write(figureSet.lineDouble); }, 6); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-2)); process.stdout.write(figureSet.lineUpDoubleRightDouble); await delay(100); times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, -1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, -1)); await delay(100); process.stdout.write(figureSet.lineDownDoubleLeftDouble); times(() => { process.stdout.write(ansiEscapes.cursorMove(-2)); process.stdout.write(figureSet.lineDouble); }, 6); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-2)); await delay(100); process.stdout.write(figureSet.lineUpDoubleRightDouble); await delay(100); times(() => { process.stdout.write(ansiEscapes.cursorMove(-1, -1)); process.stdout.write(figureSet.lineVerticalDouble); }, 2); await delay(100); process.stdout.write(ansiEscapes.cursorMove(-1, -1)); await delay(100); process.stdout.write(figureSet.lineDownDoubleRightDouble); // await delay(100); // process.stdout.write(figureSet.lineDouble); // await delay(2100); // process.stdout.write(figureSet.lineDownDoubleLeftDouble); await delay(100); // await delay(100); // process.stdout.write(figureSet.lineDouble); times(() => { // await delay(100); process.stdout.write(figureSet.lineDouble); }, 6); process.stdout.write(figureSet.lineUpDoubleLeftDouble); await delay(100); // process.stdout.write(figureSet.lineDownDoubleLeftDouble); }; const traction = async (movingType = "chaotic-devouring") => { readline.emitKeypressEvents(process.stdin); process.stdin.setRawMode(true); process.stdin.on("keypress", async (_chunk, key) => { if (true) { if (key.name === "n") { process.stdout.write(ansiEscapes.cursorBackward(2)); process.stdout.write(" "); process.stdout.write(figureSet.lineUpLeftDoubleRightDouble); process.stdout.write(ansiEscapes.cursorForward(1)); } } if (key && key.name == "s") { process.stdout.write(ansiEscapes.cursorForward(2)); process.stdout.write(" "); process.stdout.write(figureSet.lineUpDoubleRightDouble); process.stdout.write(ansiEscapes.cursorBackward(1)); } if (key && key.name == "c") { process.exit(0); } }); process.stdout.write(ansiEscapes.clearScreen); process.stdout.write(ansiEscapes.cursorMove(14, 10)); drawSix(); let pntr = 0; let singleDirCounter = 1; let isStarted = false; if (movingType !== "sequential") { process.stdout.write(ansiEscapes.cursorMove(0, 1)); singleDirCounter--; } let firstStepIter = true; let positions = [ [3, 3], [-3, -1], [4, 2], [-2, -2], [-2, -2], [1, 1], [-1, -2], [0, 1], ]; // process.stdout.write(ansiEscapes.cursorMove(1, 1)); const intrv = setInterval(() => { // if (movingType === "sequential") { // let dirs = [ // "tl1", // "tr1", // "m1", // "tr2", // "br1", // "m2", // "br2", // "bl1", // "m3", // "bl2", // "tl2", // "m4", // ]; // let zeroSteppedDirs = ["br1", "tl2"]; // let oneSteppedDirs = ["bl1"]; // let twoSteppedDirs = ["tl1", "m1", "br2", "m3", "bl2"]; // let threeSteppedDirs = ["m2"]; // let fourSteppedDirs = ["tr1"]; // let fiveSteppedDirs = ["m4"]; // let sixSteppedDirs = ["tr2"]; // if (isStarted) { // process.stdout.write(ansiEscapes.cursorRestorePosition); // process.stdout.write(" "); // process.stdout.write(ansiEscapes.cursorMove(-1)); // } else { // isStarted = true; // } // // process.stdout.write(ansiEscapes.cursorSavePosition); // if (dirs[pntr] === "tl1") { // process.stdout.write(ansiEscapes.cursorMove(0, -1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "tr1") { // process.stdout.write(ansiEscapes.cursorMove(1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "m1") { // process.stdout.write(ansiEscapes.cursorMove(0, 1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "tr2") { // process.stdout.write(ansiEscapes.cursorMove(1, 0)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "br1") { // process.stdout.write(ansiEscapes.cursorMove(0, 1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "m2") { // process.stdout.write(ansiEscapes.cursorMove(-2, 0)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "br2") { // process.stdout.write(ansiEscapes.cursorMove(0, 1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "bl1") { // process.stdout.write(ansiEscapes.cursorMove(-2, 0)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "m3") { // process.stdout.write(ansiEscapes.cursorMove(0, -1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "bl2") { // process.stdout.write(ansiEscapes.cursorMove(-2, 0)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "tl2") { // process.stdout.write(ansiEscapes.cursorMove(0, -1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "m4") { // process.stdout.write(ansiEscapes.cursorMove(1, 0)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } // singleDirCounter++; // if (twoSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 2) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else if (oneSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 1) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else if (fourSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 4) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else if (threeSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 3) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else if (fiveSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 5) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else if (sixSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 6) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else if (zeroSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 0) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else { // if (singleDirCounter > 3) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } // } else if (movingType === "chaotic-devouring") { // if (singleDirCounter >= positions.length) { // singleDirCounter = 0; // positions = shuffle(positions); // } // if (isStarted) { // process.stdout.write(ansiEscapes.cursorRestorePosition); // process.stdout.write(" "); // process.stdout.write(ansiEscapes.cursorMove(-1)); // } else { // isStarted = true; // } // const currCoord = positions[singleDirCounter]; // process.stdout.write(ansiEscapes.cursorMove(currCoord[0], currCoord[1])); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // singleDirCounter++; // } else { // if (isStarted) { // process.stdout.write(ansiEscapes.cursorRestorePosition); // process.stdout.write(" "); // process.stdout.write(ansiEscapes.cursorMove(-1)); // } else { // isStarted = true; // } // const dirs = ["m1", "m2", "m3", "m4"]; // const twoSteppedDirs = ["m2", "m4"]; // const threeSteppedDirs = ["m3"]; // if (twoSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 0) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else if (threeSteppedDirs.includes(dirs[pntr])) { // if (singleDirCounter > 1) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // if (firstStepIter) { // firstStepIter = false; // } // } // } else { // if (firstStepIter) { // if (singleDirCounter > 4) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } else { // if (singleDirCounter > 3) { // pntr = (pntr + 1) % dirs.length; // singleDirCounter = 0; // } // } // } // singleDirCounter++; // if (dirs[pntr] === "m1") { // process.stdout.write(ansiEscapes.cursorMove(1, 0)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "m2") { // process.stdout.write(ansiEscapes.cursorMove(0, 1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "m3") { // process.stdout.write(ansiEscapes.cursorMove(-2, 0)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } else if (dirs[pntr] === "m4") { // process.stdout.write(ansiEscapes.cursorMove(0, -1)); // process.stdout.write(ansiEscapes.cursorSavePosition); // process.stdout.write(figureSet.bullet); // } // } }, 560); }; export { traction };