利用Go語(yǔ)言實(shí)現(xiàn)在終端繪制小兔子
前言
思來(lái)想去,使用 Go 語(yǔ)言創(chuàng)作,沒(méi)有想到好的創(chuàng)意,最后打算在終端動(dòng)態(tài)打印小兔子,給大家拜年!
先來(lái)看看效果圖:

創(chuàng)作過(guò)程
小兔子模型制作

大部分的時(shí)間,都花在了畫(huà)兔子圖案的工作上。創(chuàng)建一個(gè) txt 文檔,在文檔里通過(guò)特殊符號(hào),一步一步將模型搭好,然后附上一副春節(jié)對(duì)聯(lián)。
實(shí)現(xiàn)思路
整個(gè)動(dòng)態(tài)過(guò)程是由幾個(gè)不同的圖案依次打印而成,一共有 7 個(gè)圖案。起初我是將這 7 個(gè)圖案放到 txt 文件里,然后通過(guò)讀取文件,分割圖案,最后打印圖案,這樣做的好處是圖案和代碼分開(kāi)了,降低圖案與代碼間的耦合度。
到最后,由于代碼要放到碼上掘金上面,而碼上掘金不支持讀取文件的操作,因此只能將圖案放到代碼里,用字符串變量接收。
代碼
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 {
// 通過(guò)終端控制符進(jìn)行清屏
//fmt.Println("\033c")
cmd := exec.Command("cmd", "/c", "cls")
cmd.Stdout = os.Stdout
cmd.Run()
// 打印圖案
fmt.Printf("%s", rabbit)
time.Sleep(time.Millisecond * 500)
}
}首先,使用七個(gè)字符串變量,保存七個(gè)不同的圖案,用于后續(xù)打印。
其次,將七個(gè)字符串變量放入字符串切片里,后續(xù)易于操作。
接下來(lái),循環(huán)遍歷切片,打印圖案。
打印圖案之前,先通過(guò) exec.Command 函數(shù),執(zhí)行 cls 命令,達(dá)到在 windows 系統(tǒng)上清屏的效果。cls 的缺點(diǎn)就是清屏?xí)r會(huì)閃屏,而上面注釋掉的一行代碼是通過(guò)終端控制符進(jìn)行清屏,基本上不閃爍,適用于 linux 終端,在 windows 的命令行模式下清屏無(wú)效。同時(shí) cls 命令和終端控制符在碼上掘金上也沒(méi)有看到清屏的效果,如果讀者有好的方法,請(qǐng)多多指教!
打印一個(gè)圖案之后,延時(shí) 0.5 秒后打印下一個(gè)圖案,讓肉眼可觀(guān)察到整個(gè)過(guò)程。
小結(jié)
動(dòng)一動(dòng)手指,讓小兔子在終端給大家拜年,簡(jiǎn)單又有趣。
除了動(dòng)手制作圖案以外,本次創(chuàng)作遇到最大困難是如何在終端清屏?xí)r不閃爍。通過(guò)打印 \033c 終端控制符進(jìn)行清屏,基本上不閃爍,但是此操作在 windows cmd 終端下不起作用,無(wú)奈只能通過(guò)執(zhí)行 cls 命令,達(dá)到清屏的效果。但是碼上掘金上面,兩種方式都沒(méi)有達(dá)到清屏效果。
到此這篇關(guān)于利用Go語(yǔ)言實(shí)現(xiàn)在終端繪制小兔子的文章就介紹到這了,更多相關(guān)Go語(yǔ)言終端繪制兔子內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫(kù)介紹
這篇文章主要為大家介紹了Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫(kù)介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-11-11
使用Golong實(shí)現(xiàn)JWT身份驗(yàn)證的詳細(xì)過(guò)程
JWT提供了一種強(qiáng)大而靈活的方法來(lái)處理Web應(yīng)用程序中的身份驗(yàn)證和授權(quán),本教程將引導(dǎo)您逐步實(shí)現(xiàn)Go應(yīng)用程序中的JWT身份驗(yàn)證過(guò)程,感興趣的朋友跟隨小編一起看看吧2024-03-03
Golang正整數(shù)指定規(guī)則排序算法問(wèn)題分析
這篇文章主要介紹了Golang正整數(shù)指定規(guī)則排序算法問(wèn)題,結(jié)合實(shí)例形式分析了Go語(yǔ)言排序算法操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
Go?panic的三種產(chǎn)生方式細(xì)節(jié)探究
這篇文章主要介紹了Go?panic的三種產(chǎn)生方式細(xì)節(jié)探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
Golang?sync.Once實(shí)現(xiàn)單例模式的方法詳解
Go?語(yǔ)言的?sync?包提供了一系列同步原語(yǔ),其中?sync.Once?就是其中之一。本文將深入探討?sync.Once?的實(shí)現(xiàn)原理和使用方法,幫助大家更好地理解和應(yīng)用?sync.Once,需要的可以參考一下2023-05-05
簡(jiǎn)單聊聊為什么說(shuō)Go語(yǔ)言字符串是不可變的
最近有讀者留言說(shuō),平時(shí)在寫(xiě)代碼的過(guò)程中,是會(huì)對(duì)字符串進(jìn)行修改的,但網(wǎng)上都說(shuō) Go 語(yǔ)言字符串是不可變的,這是為什么呢,本文就來(lái)和大家簡(jiǎn)單講講2023-05-05

