Javascript 如何为文本编写ASCII艺术(使用任何语言)?

Javascript 如何为文本编写ASCII艺术(使用任何语言)?,javascript,node.js,ascii-art,Javascript,Node.js,Ascii Art,我想写一个程序来打印文本“NUOSPIN”的以下模式: 我正在研究Javascript(NodeJS)。我必须在控制台上输出它。任何语言的实现都适合我,包括java、C、javascript。我知道我可以通过使用预构建的npm包(比如asciify)来做到这一点,但我想做的是原始的。我的方法应该是什么?我必须分别为每个角色的模式编写代码吗?然后通过逐个运行每个字符模式的逻辑来打印它们?通常,您会在某个地方有一个大型地图,将字符映射到其外观,尤其是对于此类定制字体。然后检查输入字符串,查找图片中的

我想写一个程序来打印文本“NUOSPIN”的以下模式:


我正在研究Javascript(NodeJS)。我必须在控制台上输出它。任何语言的实现都适合我,包括java、C、javascript。我知道我可以通过使用预构建的npm包(比如asciify)来做到这一点,但我想做的是原始的。我的方法应该是什么?我必须分别为每个角色的模式编写代码吗?然后通过逐个运行每个字符模式的逻辑来打印它们?

通常,您会在某个地方有一个大型地图,将字符映射到其外观,尤其是对于此类定制字体。然后检查输入字符串,查找图片中的字符,将其放入缓冲区,完成后打印缓冲区

您也可以通过逐行直接打印到屏幕上,查找每个字符的第一行,打印该行,查找每个字符的第二行,等等


如果你想真正发挥创意,你也可以用特定字体在文本的内存中绘制一幅图像,然后在控制台上绘制带有星号和空格的图像。

每一行文本都必须写几次。 首先是ASCII艺术图示符的上面几行

#!/usr/bin/python

import sys

# Each item in `font` is a list of `font_height` strings.
# The glyphs are not limited to asterisks and spaces.
font_height = 7
margin_left = 1
margin_right = 1
font = {
    'N': [
        "*   *",
        "*   *",
        "**  *",
        "* * *",
        "*  **",
        "*   *",
        "*   *",
    ],
    'U': [
        "*   *",
        "*   *",
        "*   *",
        "*   *",
        "*   *",
        "*   *",
        " *** ",
    ],
    'O': [
        " *** ",
        "*   *",
        "*   *",
        "*   *",
        "*   *",
        "*   *",
        " *** ",
    ],
    'S': [
        " *** ",
        "*   *",
        "*    ",
        " *** ",
        "    *",
        "*   *",
        " *** ",
    ],
    'P': [
        "**** ",
        "*   *",
        "*   *",
        "**** ",
        "*    ",
        "*    ",
        "*    ",
    ],
    'I': [
        "  *  ",
        "  *  ",
        "  *  ",
        "  *  ",
        "  *  ",
        "  *  ",
        "  *  ",
    ],
}

def printline(text):
    for row in range(font_height):
        for ch in text:
            sys.stdout.write(' ' * margin_left)
            sys.stdout.write(font[ch][row])
            sys.stdout.write(' ' * margin_right)
        sys.stdout.write('\n')

printline('NUOSPIN')
给我

sshoskar@oskog97:~$ ./test.py 
 *   *  *   *   ***    ***   ****     *    *   * 
 *   *  *   *  *   *  *   *  *   *    *    *   * 
 **  *  *   *  *   *  *      *   *    *    **  * 
 * * *  *   *  *   *   ***   ****     *    * * * 
 *  **  *   *  *   *      *  *        *    *  ** 
 *   *  *   *  *   *  *   *  *        *    *   * 
 *   *   ***    ***    ***   *        *    *   * 

您可以使用位图并根据需要将点组合成ASCII样式

函数getWord(s){ var ascii=[], 字体={ N:[7,5,5,5], U:[5,5,5,7], O:[7,5,5,7], S:[7,4,7,7], P:[7,7,4,4], I:[1,1,1,1] }; s、 拆分('').forEach(函数(c){ 变量大小=(字体[c]。减少(函数(r,a){ 返回r|a; }toString(2)、长度; font[c].forEach(函数(a,i){ var temp=a.toString(2).拆分(“”).映射(函数(c){ 返回+c?'*':''; }); 同时(温度长度<尺寸){ 未移位温度(“”); } ascii[i]=ascii[i]| |[]; ascii[i].push(临时连接(“”)); }); }); 返回ascii.map(函数(a){ 返回a.join(“”); }).join(“\n”) } document.getElementById('tt').innerHTML=getWord('NUOSPIN')
“我想做这个原始的”-1)为什么,当已有库可以这样做的时候?2) 查看这些库的源代码,了解如何实现这一点。或者,您也可以做一些更复杂但仍然足够简单的事情,以满足像这样的初学者的需要
sshoskar@oskog97:~$ ./test.py 
 *   *  *   *   ***    ***   ****     *    *   * 
 *   *  *   *  *   *  *   *  *   *    *    *   * 
 **  *  *   *  *   *  *      *   *    *    **  * 
 * * *  *   *  *   *   ***   ****     *    * * * 
 *  **  *   *  *   *      *  *        *    *  ** 
 *   *  *   *  *   *  *   *  *        *    *   * 
 *   *   ***    ***    ***   *        *    *   *