用代码画一只小兔子给大家拜年啦!
新的一年,祝大家前兔似锦、谈兔不凡、颜值兔出、成绩兔出!
前言
春节将至必须把节日气氛搞起来。
使用 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哦,欢迎找我咨询。
推荐明勇
原文链接是明勇的掘金首页, 推荐大家关注,见证又一位技术博主的成长 。
新的一年,一起加油!❤️❤️❤️
