console-fun
Version:
Some stuff in the console: utils, printing, games and other fun
617 lines (597 loc) • 21.4 kB
JavaScript
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 };