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

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

大部分的時(shí)間,都花在了畫兔子圖案的工作上。創(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ò)讀取文件,分割圖案,最后打印圖案,這樣做的好處是圖案和代碼分開了,降低圖案與代碼間的耦合度。
到最后,由于代碼要放到碼上掘金上面,而碼上掘金不支持讀取文件的操作,因此只能將圖案放到代碼里,用字符串變量接收。
代碼
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 命令和終端控制符在碼上掘金上也沒有看到清屏的效果,如果讀者有好的方法,請(qǐng)多多指教!
打印一個(gè)圖案之后,延時(shí) 0.5 秒后打印下一個(gè)圖案,讓肉眼可觀察到整個(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á)到清屏的效果。但是碼上掘金上面,兩種方式都沒有達(dá)到清屏效果。
到此這篇關(guān)于利用Go語(yǔ)言實(shí)現(xiàn)在終端繪制小兔子的文章就介紹到這了,更多相關(guān)Go語(yǔ)言終端繪制兔子內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解如何為Go中的無(wú)限循環(huán)添加時(shí)間限制
在 Go 語(yǔ)言的開發(fā)過(guò)程中,我們有時(shí)需要在后臺(tái)執(zhí)行長(zhǎng)時(shí)間運(yùn)行的任務(wù),例如監(jiān)聽或輪詢某些資源,這篇文章將通過(guò)一個(gè)實(shí)例詳細(xì)介紹如何為 Go 語(yǔ)言中的無(wú)限循環(huán)設(shè)置時(shí)間限制,保證程序的健壯性和可控性,需要的朋友可以參考下2024-04-04
GPT回答:go語(yǔ)言和C語(yǔ)言切片對(duì)比
這篇文章主要為大家介紹了GPT回答:go語(yǔ)言和C語(yǔ)言切片對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
go語(yǔ)言日志實(shí)現(xiàn)詳解(打印日志、日志寫入文件和日志切割)
golang內(nèi)置了log包,實(shí)現(xiàn)簡(jiǎn)單的日志服務(wù),下面這篇文章主要給大家介紹了關(guān)于go語(yǔ)言日志實(shí)現(xiàn)(打印日志、日志寫入文件和日志切割)的相關(guān)資料,需要的朋友可以參考下2022-10-10
GoAdminGroup/go-admin的安裝和運(yùn)行的教程詳解
這篇文章主要介紹了GoAdminGroup/go-admin的安裝和運(yùn)行的教程詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
簡(jiǎn)單談?wù)凣olang中的字符串與字節(jié)數(shù)組
這篇文章主要給大家介紹了關(guān)于Golang中字符串與字節(jié)數(shù)組的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解
這篇文章主要為大家介紹了go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用
本文主要介紹了Go語(yǔ)言反射reflect.Value實(shí)現(xiàn)方法的調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Go構(gòu)建器模式構(gòu)建復(fù)雜對(duì)象方法實(shí)例
本文介紹了構(gòu)建器模式,如何通過(guò)構(gòu)建器對(duì)象構(gòu)建復(fù)雜業(yè)務(wù)對(duì)象的方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
淺析go中Ticker,Timer和Tick的用法與區(qū)別
在go面試的時(shí)候,面試官經(jīng)常會(huì)問(wèn)time包的Ticker,Timer以及Tick的區(qū)別,一般在超時(shí)控制的時(shí)候用的比較多,今天就跟隨小編一起來(lái)詳細(xì)學(xué)一下這幾個(gè)的區(qū)別吧2023-10-10

