利用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)文章
go語言日志實現(xiàn)詳解(打印日志、日志寫入文件和日志切割)
golang內(nèi)置了log包,實現(xiàn)簡單的日志服務,下面這篇文章主要給大家介紹了關(guān)于go語言日志實現(xiàn)(打印日志、日志寫入文件和日志切割)的相關(guān)資料,需要的朋友可以參考下2022-10-10GoAdminGroup/go-admin的安裝和運行的教程詳解
這篇文章主要介紹了GoAdminGroup/go-admin的安裝和運行的教程詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09簡單談談Golang中的字符串與字節(jié)數(shù)組
這篇文章主要給大家介紹了關(guān)于Golang中字符串與字節(jié)數(shù)組的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Golang具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-03-03go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實現(xiàn)基本操作詳解
這篇文章主要為大家介紹了go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實現(xiàn)基本操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01Go語言反射reflect.Value實現(xiàn)方法的調(diào)用
本文主要介紹了Go語言反射reflect.Value實現(xiàn)方法的調(diào)用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-05-05淺析go中Ticker,Timer和Tick的用法與區(qū)別
在go面試的時候,面試官經(jīng)常會問time包的Ticker,Timer以及Tick的區(qū)別,一般在超時控制的時候用的比較多,今天就跟隨小編一起來詳細學一下這幾個的區(qū)別吧2023-10-10