我正在参与「兔了个兔」构思投稿大赛,详情请看:「兔了个兔」构思投稿大赛

耐心和持久胜过激烈和疯狂。

哈喽我们好,我是陈明勇,今天分享的内容是 运用 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 命令,到达清屏的作用。可是码上上面,两种方式都没有到达清屏作用。

新的一年,祝我们前兔似锦、谈兔不凡、颜值兔出、成果兔出!