控制台下的字符图像界面
// 输出流 var stream = process.stdout; // 输出 var write = function (str) { stream.write(str); }; // 生成ANSI escape sequences代码:http://en.wikipedia.org/wiki/ANSI_escape_code var CSI = exports.CSI = function (str, c) { return '\x1b[' + str + c; }; // 生成带颜色的文本 var color = exports.color = function (text, c, bgc) { if (isNaN(bgc)) bgc = 0; c = Number(c) + 30; bgc = Number(bgc) + 40; var ret = CSI(c + ';' + bgc, 'm' ) + text + CSI( '37;40' , 'm' ); return ret; }; // 设置光标位置,位置从1开始 var setCursor = exports.setCursor = function (row, column) { write(CSI(row + ';' + column, 'H' )); }; // 清屏 var clear = function (bgcolor) { setCursor(1, 1); for ( var i = 0; i < stream.rows; i++) { var line = '' ; for ( var j = 0; j < stream.columns; j++) { line += ' ' ; } write(color(line, 0, 6)); } }; // 画矩形 var DOUBLE_LINE = '══════════════════════════════════════════════════════════' + '══════════════════════════════════════════' ; var SPACE_LINE = ' ' + ' ' ; var drawRect = function (top, left, width, height, bgcolor) { setCursor(top, left); var w = width / 2 - 2; var c = function (str) { return color(str, 0, 7); }; write(c( '╔' ) + c(DOUBLE_LINE.substr(0, w)) + c( '╗' )); for ( var i = 1; i < height - 1; i++) { setCursor(top + i, left) write(c( '‖' ) + color(SPACE_LINE.substr(0, w), 0, bgcolor) + color(SPACE_LINE.substr(0, w), 0, bgcolor) + c( '‖' )); } setCursor(top + height - 1, left); write(c( '╚' ) + c(DOUBLE_LINE.substr(0, w)) + c( '╝' )); setCursor(top + 1, left + 2); }; // ----------------------------------------------------------------------------- // --------------- 开始 -------------------------------------------------------- // 开始 clear(); // 要绘制的窗口宽度和高度 var w = 68; var h = 5; var t = (stream.rows - h) / 2; var l = (stream.columns - w) / 2; drawRect(t, l, w, h, 7); var randomColor = function () { var r = Math.round(Math.random() * 5); return r + 1; }; var updateTime = function () { setCursor(t + 2, (stream.columns - 48) / 2); write(color( new Date().toLocaleString() + ' ' , randomColor(), 7)); }; updateTime(); setInterval(updateTime, 1000); |
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码


机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2012-01-31 mass Framework support模块 v2