我正在参与「兔了个兔」构思投稿大赛,详情请看:「兔了个兔」构思投稿大赛
耐心和持久胜过激烈和疯狂。
哈喽我们好,我是陈明勇,今天分享的内容是 运用 Go 言语完成小兔子在终端给我们拜年。如果觉得著作有趣,不妨点个赞,如果本文有错误的地方,欢迎指出!
前言
看了「兔了个兔」构思投稿大赛规矩,思来想去,运用 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
命令,到达清屏的作用。可是码上上面,两种方式都没有到达清屏作用。
新的一年,祝我们前兔似锦、谈兔不凡、颜值兔出、成果兔出!