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

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

大部分的時間,都花在了畫兔子圖案的工作上。創(chuàng)建一個 txt 文檔,在文檔里通過特殊符號,一步一步將模型搭好,然后附上一副春節(jié)對聯(lián)。
實現(xiàn)思路
整個動態(tài)過程是由幾個不同的圖案依次打印而成,一共有 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)
}
}首先,使用七個字符串變量,保存七個不同的圖案,用于后續(xù)打印。
其次,將七個字符串變量放入字符串切片里,后續(xù)易于操作。
接下來,循環(huán)遍歷切片,打印圖案。
打印圖案之前,先通過 exec.Command 函數(shù),執(zhí)行 cls 命令,達到在 windows 系統(tǒng)上清屏的效果。cls 的缺點就是清屏時會閃屏,而上面注釋掉的一行代碼是通過終端控制符進行清屏,基本上不閃爍,適用于 linux 終端,在 windows 的命令行模式下清屏無效。同時 cls 命令和終端控制符在碼上掘金上也沒有看到清屏的效果,如果讀者有好的方法,請多多指教!
打印一個圖案之后,延時 0.5 秒后打印下一個圖案,讓肉眼可觀察到整個過程。
小結(jié)
動一動手指,讓小兔子在終端給大家拜年,簡單又有趣。
除了動手制作圖案以外,本次創(chuàng)作遇到最大困難是如何在終端清屏時不閃爍。通過打印 \033c 終端控制符進行清屏,基本上不閃爍,但是此操作在 windows cmd 終端下不起作用,無奈只能通過執(zhí)行 cls 命令,達到清屏的效果。但是碼上掘金上面,兩種方式都沒有達到清屏效果。
到此這篇關(guān)于利用Go語言實現(xiàn)在終端繪制小兔子的文章就介紹到這了,更多相關(guān)Go語言終端繪制兔子內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹
這篇文章主要為大家介紹了Golang高性能持久化解決方案BoltDB數(shù)據(jù)庫介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11
Golang正整數(shù)指定規(guī)則排序算法問題分析
這篇文章主要介紹了Golang正整數(shù)指定規(guī)則排序算法問題,結(jié)合實例形式分析了Go語言排序算法操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2017-01-01
Go?panic的三種產(chǎn)生方式細節(jié)探究
這篇文章主要介紹了Go?panic的三種產(chǎn)生方式細節(jié)探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
Golang?sync.Once實現(xiàn)單例模式的方法詳解
Go?語言的?sync?包提供了一系列同步原語,其中?sync.Once?就是其中之一。本文將深入探討?sync.Once?的實現(xiàn)原理和使用方法,幫助大家更好地理解和應(yīng)用?sync.Once,需要的可以參考一下2023-05-05

