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