利用Go语言实现在终端绘制小兔子

 更新时间:2023年01月13日 14:19:57   作者:陈明勇  
这篇文章主要为大家详细介绍了如何利用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 命令,达到清屏的效果。但是码上掘金上面,两种方式都没有达到清屏效果。

到此这篇关于利用Go语言实现在终端绘制小兔子的文章就介绍到这了,更多相关Go语言终端绘制兔子内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang高性能持久化解决方案BoltDB数据库介绍

    Golang高性能持久化解决方案BoltDB数据库介绍

    这篇文章主要为大家介绍了Golang高性能持久化解决方案BoltDB数据库介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2021-11-11
  • Golang检查变量类型的四种方式

    Golang检查变量类型的四种方式

    Go提供几种方法检查变量的类型,在字符串格式化标识%T, 反射方式:reflect.TypeOf, reflect.ValueOf.Kind,另外还有使用类型断言,switch case方式,下面通过实例分别介绍这四类方法,需要的朋友可以参考下
    2022-10-10
  • 使用Golong实现JWT身份验证的详细过程

    使用Golong实现JWT身份验证的详细过程

    JWT提供了一种强大而灵活的方法来处理Web应用程序中的身份验证和授权,本教程将引导您逐步实现Go应用程序中的JWT身份验证过程,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Go实践反向代理ReverseProxy解析

    Go实践反向代理ReverseProxy解析

    这篇文章主要为大家介绍了Go实践反向代理示例ReverseProxy解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Golang正整数指定规则排序算法问题分析

    Golang正整数指定规则排序算法问题分析

    这篇文章主要介绍了Golang正整数指定规则排序算法问题,结合实例形式分析了Go语言排序算法操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Go panic的三种产生方式细节探究

    Go panic的三种产生方式细节探究

    这篇文章主要介绍了Go panic的三种产生方式细节探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • 详解Go语言中net/http包的使用

    详解Go语言中net/http包的使用

    Go语言内置的 net/http 包十分的优秀,提供了HTTP客户端和服务端的实现,本文主要就来和大家聊聊net/http包的使用,感兴趣的可以了解一下
    2023-07-07
  • Golang sync.Once实现单例模式的方法详解

    Golang sync.Once实现单例模式的方法详解

    Go 语言的 sync 包提供了一系列同步原语,其中 sync.Once 就是其中之一。本文将深入探讨 sync.Once 的实现原理和使用方法,帮助大家更好地理解和应用 sync.Once,需要的可以参考一下
    2023-05-05
  • go json转换实践中遇到的坑

    go json转换实践中遇到的坑

    在使用 go 语言开发过程中,经常需要使用到 json 包来进行 json 和 struct 的互相转换,这篇文章主要介绍了go json转换实践中遇到的坑,非常具有实用价值,需要的朋友可以参考下
    2018-12-12
  • 简单聊聊为什么说Go语言字符串是不可变的

    简单聊聊为什么说Go语言字符串是不可变的

    最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢,本文就来和大家简单讲讲
    2023-05-05

最新评论