UNPKG

@hp4k1h5/terminordle

Version:

> multiplayer [wordle](https://www.powerlanguage.co.uk/wordle/) clone in your terminal

90 lines (89 loc) 2.72 kB
"use strict"; 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;