用代码画一只小兔子给大家拜年啦!
新的一年,祝大家前兔似锦、谈兔不凡、颜值兔出、成绩兔出!
前言
春节将至必须把节日气氛搞起来。
使用 Go
语言创作,想到了一丢丢的创意,打算在终端动态打印小兔子,给大家拜年!
先来看看效果吧:
创作过程
小兔子模型制作
大部分的时间,都花在了画兔子图案的工作上。
创建一个 txt
文档,在文档里通过特殊符号,一步一步将模型搭好,然后附上一副春节对联。
实现思路
整个动态过程是由几个不同的图案依次打印而成,一共有 7 个图案。起初我是将这 7 个图案放到 txt
文件里,然后通过读取文件,分割图案,最后打印图案,这样做的好处是图案和代码分开了,降低图案与代码间的耦合度。
到最后,由于代码要放到码上掘金上面,而码上掘金不支持读取文件的操作,因此只能将图案放到代码里,用字符串变量接收。
代码
package main
import (
"fmt"
"os"
"os/exec"
"time"
)
var r1 = "\n /\ /\" +
"\n / : / |" +
"\n : :` /" +
"\n \ ." +
"\n \ :." +
"\n .` `." +
"\n : 0 \" +
"\n ..` ;" +
"\n . ` `.¯" +
"\n .` :" +
"\n .` ." +
"\n .` :" +
"\n . Happy New Year ." +
"\n . .`" +
"\n .. ` .`" +
"\n: `` ;. `、" +
"\n`..`._____________::____)"
var r2 = "\n /\ /\" +
"\n / : / |" +
"\n : :` /" +
"\n \ ." +
"\n \ :." +
"\n .` `." +
"\n : 0 \" +
"\n ..` ;" +
"\n . ` `.¯" +
"\n .` :" +
"\n .` ." +
"\n .` :" +
"\n . Happy New Year ." +
"\n . .`" +
"\n .. ` .`" +
"\n : `` ;. `、" +
"\n `..`._____________::____)"
var r3 = "\n /\ /\" +
"\n / : / |" +
"\n : :` /" +
"\n \ ." +
"\n \ :." +
"\n .` `." +
"\n : 0 \" +
"\n ..` ;" +
"\n . ` `.¯" +
"\n .` :" +
"\n .` ." +
"\n .` :" +
"\n . Happy New Year ." +
"\n . .`" +
"\n .. ` .`" +
"\n : `` ;. `、" +
"\n `..`._____________::____)"
var r4 = "\n /\ /\" +
"\n / : / |" +
"\n : :` /" +
"\n \ . ________________" +
"\n \ :. | 喜 辞 旧 岁 |" +
"\n .` `. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" +
"\n : 0 \" +
"\n ..` ;" +
"\n . ` `.¯" +
"\n .` :" +
"\n .` ." +
"\n .` :" +
"\n . Happy New Year ." +
"\n . .`" +
"\n .. ` .`" +
"\n : `` ;. `、" +
"\n `..`._____________::____)"
var r5 = "\n /\ /\" +
"\n / : / |" +
"\n : :` /" +
"\n \ . ________________" +
"\n \ :. | 喜 辞 旧 岁 |" +
"\n .` `. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" +
"\n : 0 \ ____" +
"\n ..` ; | 兔 |" +
"\n . ` `.¯ | 跃 |" +
"\n .` : | 龙 |" +
"\n .` . | 腾 |" +
"\n .` : | 辞 |" +
"\n . Happy New Year . | 旧 |" +
"\n . .` | 岁 |" +
"\n .. ` .` ¯¯¯" +
"\n : `` ;. `、" +
"\n `..`._____________::____)"
var r6 = "\n /\ /\" +
"\n / : / |" +
"\n : :` /" +
"\n \ . ________________" +
"\n \ :. | 喜 辞 旧 岁 |" +
"\n .` `. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" +
"\n : 0 \ ____ ____" +
"\n ..` ; | 兔 | | 龙 |" +
"\n . ` `.¯ | 跃 | | 腾 |" +
"\n .` : | 龙 | | 虎 |" +
"\n .` . | 腾 | | 跃 |" +
"\n .` : | 辞 | | 贺 |" +
"\n . Happy New Year . | 旧 | | 新 |" +
"\n . .` | 岁 | | 春 |" +
"\n .. ` .` ¯¯¯ ¯¯¯" +
"\n : `` ;. `、" +
"\n `..`._____________::____)"
var r7 = "\n /\ /\" +
"\n / : / |" +
"\n : :` /" +
"\n \ . ________________" +
"\n \ :. | 喜 辞 旧 岁 |" +
"\n .` `. ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯" +
"\n : 0 \ ____ ____" +
"\n ..` ; | 兔 | | 龙 |" +
"\n . ` `.¯ | 跃 | 2 | 腾 |" +
"\n .` : | 龙 | 0 | 虎 |" +
"\n .` . | 腾 | 2 | 跃 |" +
"\n .` : | 辞 | 3 | 贺 |" +
"\n . Happy New Year . | 旧 | | 新 |" +
"\n . .` | 岁 | | 春 |" +
"\n .. ` .` ¯¯¯ ¯¯¯" +
"\n : `` ;. `、" +
"\n `..`._____________::____)"
func main() {
rabbits := []string{r1, r2, r3, r4, r5, r6, r7}
for _, rabbit := range rabbits {
// 通过终端控制符进行清屏
//fmt.Println("\033c")
cmd := exec.Command("cmd", "/c", "cls")
cmd.Stdout = os.Stdout
cmd.Run()
// 打印图案
fmt.Printf("%s", rabbit)
time.Sleep(time.Millisecond * 500)
}
}
详解一下
-
首先,使用七个字符串变量,保存七个不同的图案,用于后续打印。
-
其次,将七个字符串变量放入字符串切片里,后续易于操作。
-
接下来,循环遍历切片,打印图案。
-
打印图案之前,先通过
exec.Command
函数,执行cls
命令,达到在windows
系统上清屏的效果。cls
的缺点就是清屏时会闪屏,而上面注释掉的一行代码是通过终端控制符进行清屏,基本上不闪烁,适用于linux
终端,在windows
的命令行模式下清屏无效。同时cls
命令和终端控制符在码上掘金上也没有看到清屏的效果,如果读者有好的方法,请多多指教!
-
打印图案之前,先通过
-
打印一个图案之后,延时
0.5
秒后打印下一个图案,让肉眼可观察到整个过程。
注意问题
除了动手制作图案以外,本次创作遇到最大困难是如何在终端清屏时不闪烁。通过打印 \033c
终端控制符进行清屏,基本上不闪烁,但是此操作在 windows cmd
终端下不起作用,无奈只能通过执行 cls
命令,达到清屏的效果。
也来试试
相信看完之后,你也想体验一下,满足你。
已经把代码开源出来了,分享到自带运行环境的1024Code平台,大家可以点击下面的链接直接运行:
https://1024code.com/codecubes/ahKzVWY
有好的想法和创意也欢迎和我们交流哈,欢迎在评论区留言。
PS:你想拥有自己独一无二的红包封面吗?你想做春节最靓的崽吗?彰显个性,表达心意,你也可以送一个红包封面给TA哦,欢迎找我咨询。
推荐明勇
原文链接是明勇的掘金首页, 推荐大家关注,见证又一位技术博主的成长 。
新的一年,一起加油!❤️❤️❤️