@hp4k1h5/terminordle
Version:
> multiplayer [wordle](https://www.powerlanguage.co.uk/wordle/) clone in your terminal
90 lines (89 loc) • 2.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.repl = exports.question = exports.resetRl = exports.rl = exports._rl = void 0;
const readline = require("readline");
const structs_1 = require("../lib/structs");
require("./args");
const __1 = require("../");
const printer_1 = require("./printer");
const msg_1 = require("../ws/client/msg");
const util_1 = require("../util");
const _rl = function () {
return readline.createInterface({
input: process.stdin,
output: process.stdout,
});
};
exports._rl = _rl;
function resetRl(cnx) {
const rl = (0, exports._rl)();
// handle ctrl-c
rl.on('SIGINT', () => {
// kill cnx
cnx && cnx.terminate();
// update player
printer_1.display.alterMessage('goodbye', printer_1.MsgColors.green);
printer_1.display.print();
// exit
process.exit(0);
});
return rl;
}
exports.resetRl = resetRl;
async function question(query, rl_ = exports.rl) {
return new Promise(keep => {
rl_.question(query, function (answer) {
keep(answer);
});
});
}
exports.question = question;
const wordList = Object.keys(util_1.words);
// returns main event loop for player interaction
async function repl(cnx = undefined) {
let answer;
if (!cnx) {
const filteredWordList = wordList.filter(word => word.length === 5);
answer = (0, __1.wordToRow)((0, util_1.getRand)(filteredWordList));
exports.rl = (0, exports._rl)();
}
else {
exports.rl = resetRl(cnx);
}
const guesses = [];
let guess = (0, __1.wordToRow)(' ');
// loop
while (!(0, __1.isCorrect)(guess)) {
printer_1.display.print();
let response;
try {
response = await question('');
(0, __1.validateResponse)({ type: structs_1.ServerMsgType.guess, content: response });
}
catch (e) {
printer_1.display.alterMessage(e);
continue;
}
guess = (0, __1.wordToRow)(response);
// handle network connections
if (cnx) {
(0, msg_1.msg)(cnx, {
type: structs_1.ServerMsgType.guess,
content: response,
user_id: cnx.user_id,
session_id: cnx.session_id,
});
continue;
}
// otherwise continue locally
(0, __1.evaluateGuess)(guess, answer);
guesses.push(guess);
printer_1.display.addToGuesses(guess);
// prints at top of loop
}
// game over print and exit
printer_1.display.print();
console.log('CORRECT!');
process.exit(0);
}
exports.repl = repl;