用代码画一只小兔子给大家拜年啦!

编程三分钟

共 8224字,需浏览 17分钟

 · 2023-01-14

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

前言

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

使用 Go 语言创作,想到了一丢丢的创意,打算在终端动态打印小兔子,给大家拜年!

先来看看效果吧:

创作过程

小兔子模型制作

9400839bd100523e7c1d00b03064b66f.webp

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

创建一个 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哦,欢迎找我咨询。

推荐明勇

原文链接是明勇的掘金首页, 推荐大家关注,见证又一位技术博主的成长

新的一年,一起加油!❤️❤️❤️

浏览 106
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报