首頁 > 軟體

利用Go語言實現在終端繪製小兔子

2023-01-14 14:01:42

前言

思來想去,使用 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("33c")
		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 秒後列印下一個圖案,讓肉眼可觀察到整個過程。

小結

動一動手指,讓小兔子在終端給大家拜年,簡單又有趣。

除了動手製作圖案以外,本次創作遇到最大困難是如何在終端清屏時不閃爍。通過列印 33c 終端控制符進行清屏,基本上不閃爍,但是此操作在 windows cmd 終端下不起作用,無奈只能通過執行 cls 命令,達到清屏的效果。但是碼上掘金上面,兩種方式都沒有達到清屏效果。

到此這篇關於利用Go語言實現在終端繪製小兔子的文章就介紹到這了,更多相關Go語言終端繪製兔子內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com