来源 |程序员升职加薪之旅

作者 |陈明勇&王中阳


(资料图片仅供参考)

前言

春节将至,必须把节日气氛搞起来。

今天打算使用 Go语言,在终端动态打印一只小兔子,给大家拜年!

创作过程

小兔子模型制作

大部分的时间,都花在了画兔子图案的工作上。

创建一个 txt文档,在文档里通过特殊符号,一步一步将模型搭好,然后附上一副春节对联。

实现思路

整个动态过程是由几个不同的图案依次打印而成,一共有 7 个图案。

起初我是将这 7 个图案放到 txt文件里,然后通过读取文件,分割图案,最后打印图案,这样做的好处是图案和代码分开了,降低图案与代码间的耦合度。

到最后,由于代码要放到码上掘金上面,而码上掘金不支持读取文件的操作,因此只能将图案放到代码里,用字符串变量接收。

代码

packagemainimport(\"fmt\"\"os\"\"os/exec\"\"time\")varr1=\"\n/\/\\"+\"\n/:/|\"+\"\n::`/\"+\"\n\.\"+\"\n\:.\"+\"\n.``.\"+\"\n:0\\"+\"\n..`;\"+\"\n.``.¯\"+\"\n.`:\"+\"\n.`.\"+\"\n.`:\"+\"\n.HappyNewYear.\"+\"\n..`\"+\"\n..`.`\"+\"\n:``;.`、\"+\"\n`..`._____________::____)\"varr2=\"\n/\/\\"+\"\n/:/|\"+\"\n::`/\"+\"\n\.\"+\"\n\:.\"+\"\n.``.\"+\"\n:0\\"+\"\n..`;\"+\"\n.``.¯\"+\"\n.`:\"+\"\n.`.\"+\"\n.`:\"+\"\n.HappyNewYear.\"+\"\n..`\"+\"\n..`.`\"+\"\n:``;.`、\"+\"\n`..`._____________::____)\"varr3=\"\n/\/\\"+\"\n/:/|\"+\"\n::`/\"+\"\n\.\"+\"\n\:.\"+\"\n.``.\"+\"\n:0\\"+\"\n..`;\"+\"\n.``.¯\"+\"\n.`:\"+\"\n.`.\"+\"\n.`:\"+\"\n.HappyNewYear.\"+\"\n..`\"+\"\n..`.`\"+\"\n:``;.`、\"+\"\n`..`._____________::____)\"varr4=\"\n/\/\\"+\"\n/:/|\"+\"\n::`/\"+\"\n\.________________\"+\"\n\:.|喜辞旧岁|\"+\"\n.``.¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\"+\"\n:0\\"+\"\n..`;\"+\"\n.``.¯\"+\"\n.`:\"+\"\n.`.\"+\"\n.`:\"+\"\n.HappyNewYear.\"+\"\n..`\"+\"\n..`.`\"+\"\n:``;.`、\"+\"\n`..`._____________::____)\"varr5=\"\n/\/\\"+\"\n/:/|\"+\"\n::`/\"+\"\n\.________________\"+\"\n\:.|喜辞旧岁|\"+\"\n.``.¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\"+\"\n:0\____\"+\"\n..`;|兔|\"+\"\n.``.¯|跃|\"+\"\n.`:|龙|\"+\"\n.`.|腾|\"+\"\n.`:|辞|\"+\"\n.HappyNewYear.|旧|\"+\"\n..`|岁|\"+\"\n..`.`¯¯¯\"+\"\n:``;.`、\"+\"\n`..`._____________::____)\"varr6=\"\n/\/\\"+\"\n/:/|\"+\"\n::`/\"+\"\n\.________________\"+\"\n\:.|喜辞旧岁|\"+\"\n.``.¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\"+\"\n:0\________\"+\"\n..`;|兔||龙|\"+\"\n.``.¯|跃||腾|\"+\"\n.`:|龙||虎|\"+\"\n.`.|腾||跃|\"+\"\n.`:|辞||贺|\"+\"\n.HappyNewYear.|旧||新|\"+\"\n..`|岁||春|\"+\"\n..`.`¯¯¯¯¯¯\"+\"\n:``;.`、\"+\"\n`..`._____________::____)\"varr7=\"\n/\/\\"+\"\n/:/|\"+\"\n::`/\"+\"\n\.________________\"+\"\n\:.|喜辞旧岁|\"+\"\n.``.¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯\"+\"\n:0\________\"+\"\n..`;|兔||龙|\"+\"\n.``.¯|跃|2|腾|\"+\"\n.`:|龙|0|虎|\"+\"\n.`.|腾|2|跃|\"+\"\n.`:|辞|3|贺|\"+\"\n.HappyNewYear.|旧||新|\"+\"\n..`|岁||春|\"+\"\n..`.`¯¯¯¯¯¯\"+\"\n:``;.`、\"+\"\n`..`._____________::____)\"funcmain(){rabbits:=[]string{r1,r2,r3,r4,r5,r6,r7}for_,rabbit:=rangerabbits{//通过终端控制符进行清屏//fmt.Println(\"\033c\")cmd:=exec.Command(\"cmd\",\"/c\",\"cls\")cmd.Stdout=os.Stdoutcmd.Run()//打印图案fmt.Printf(\"%s\",rabbit)time.Sleep(time.Millisecond*500)}}

详解一下

首先,使用 7 个字符串变量,保存 7 个不同的图案,用于后续打印。

其次,将 7 个字符串变量放入字符串切片里,后续易于操作。

接下来,循环遍历切片,打印图案。

打印图案之前,先通过 exec.Command函数,执行 cls命令,达到在 windows系统上清屏的效果。 cls的缺点就是清屏时会闪屏,而上面注释掉的一行代码是通过终端控制符进行清屏,基本上不闪烁,适用于 linux终端,在 windows的命令行模式下清屏无效。同时 cls命令和终端控制符在码上掘金上也没有看到清屏的效果,如果大家有好的方法,请多多指教!

打印一个图案之后,延时 0.5秒后打印下一个图案,让肉眼可观察到整个过程。

注意问题

除了动手制作图案以外,本次创作遇到最大困难是如何在终端清屏时不闪烁。通过打印 \033c终端控制符进行清屏,基本上不闪烁,但是此操作在 windows cmd终端下不起作用,无奈只能通过执行 cls命令,达到清屏的效果。

最后

代码已经开源出来了,分享到自带运行环境的 1024Code 平台,大家可以点击下面的链接直接运行:

https://1024code.com/codecubes/ahKzVWY

新的一年,祝大家前兔似锦、谈兔不凡、颜值兔出、成绩兔出!一起加油!❤️❤️❤️

关键词: 终端控制 一起加油 只能通过