利用Go语言实现在终端绘制小兔子

目录
  • 前言
  • 创作过程
    • 小兔子模型制作
    • 实现思路
    • 代码
  • 小结

前言

思来想去,使用 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("\033c")
		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 秒后打印下一个图案,让肉眼可观察到整个过程。

小结

动一动手指,让小兔子在终端给大家拜年,简单又有趣。

除了动手制作图案以外,本次创作遇到最大困难是如何在终端清屏时不闪烁。通过打印 \033c 终端控制符进行清屏,基本上不闪烁,但是此操作在 windows cmd 终端下不起作用,无奈只能通过执行 cls 命令,达到清屏的效果。但是码上掘金上面,两种方式都没有达到清屏效果。

到此这篇关于利用Go语言实现在终端绘制小兔子的文章就介绍到这了,更多相关Go语言终端绘制兔子内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Go语言设计实现在任务栏里提醒你喝水的兔子

    目录 前言 详细设计 安装包 效果展示 前言 之前看到 RunCat 一只可以在电脑上奔跑猫,其主要的功能是监控电脑的CPU.内存的使用情况,使用越多跑的越快.所以准备做一只在任务栏里的兔子,主要使用 Go 语言实现一个简单的到点拜年的兔子. 详细设计 基本需求: 打开应用时可以在任务栏里显示 实现动态兔子生成 实现一只在任务栏里的兔子.基本就是一个应用的图标,并且图标是动态变化的.使用 Go 开发的话可以使用 systray 工具包,能够支持在任务栏里显示图标. go get github.c

  • 基于React.js实现兔兔牌九宫格翻牌抽奖组件

    目录 基础页面结构 初始化数据 翻转逻辑 count 为 0 100% 中奖 效果图 基础页面结构 import React, { useEffect, useState } from "react" import './index.css' const FlopLuckyDraw9 = () => { return ( <> <div className="title"> 可抽奖 <label >{count}</l

  • 使用vue实现玉兔迎春图高亮示例详解

    目录 正文 一.明确需求 二.进行分析 2.1 思路 2.2 ocr 2.3 应用 三.使用 后记 正文 兔年来临,老板意气风发的说:我们的系统登录页要换做玉兔迎春的背景页,而且用户ctrl+f搜索[玉兔迎春]关键字时,图片要高亮. 新的一年,祝大家身体健康.Bug-- 一.明确需求 将系统的登录页面背景换做如上图[玉兔迎春]. 而且,用户可以通过搜索关键字[玉兔迎春]让背景图的文字进行高亮. 下面我们进行分析一下. 二.进行分析 接到该需求的时候,心里感觉‘’你在逗我‘’这样子的. 于是,老板

  • JavaScript+Canvas模拟实现支付宝画年兔游戏

    目录 动手前的思路 思考1.如何让鼠标只能在特定区域内画画? 思考2.如何让绘制的图画动起来 思考3.如何撤销上一步操作 思考4.如何判断线条绘制完毕 关键步骤 接近过年了,支付宝的集福的活动又开始了,集美们的五福集齐了没有.每年的集福活动都有一些小游戏,今年也不例外,画年画就是其中之一,本篇用canvas来写一个画年兔的游戏. 动手前的思路 画年画游戏规则是:跟着特定轮廓画出线条来. 思考1.如何让鼠标只能在特定区域内画画? 首先要获取到这个轮廓区域所在画布上的位置,判断鼠标绘画的位置是否在指

  • 利用Go语言实现在终端绘制小兔子

    目录 前言 创作过程 小兔子模型制作 实现思路 代码 小结 前言 思来想去,使用 Go 语言创作,没有想到好的创意,最后打算在终端动态打印小兔子,给大家拜年! 先来看看效果图: 创作过程 小兔子模型制作 大部分的时间,都花在了画兔子图案的工作上.创建一个 txt 文档,在文档里通过特殊符号,一步一步将模型搭好,然后附上一副春节对联. 实现思路 整个动态过程是由几个不同的图案依次打印而成,一共有 7 个图案.起初我是将这 7 个图案放到 txt 文件里,然后通过读取文件,分割图案,最后打印图案,这

  • 利用C语言的Cairo图形库绘制太极图实例教程

    前言 可能许多人对直接用C语言绘图仍然停留在Turbo C的graphics.h年代,或许也有教育老化的原因,毕竟曾经的经典早已成往事,与其想尽各种办法寻找与其兼容的图形库,不如顺势拥抱灿烂的明天.Cario(http://cairographics.org/)是一个非常出色的2D图形库,著名的GTK+3.0完全采用Cario作为绘图引擎,由此可见它的强大和吸引力. Cario支持X Window,Quartz,Win32,image.buffers,PostScript,PDF和SVG文件等多

  • 利用C语言编辑画图程序的实现方法(推荐)

    不知道大家在进行开发县级电网调度自动化系统的时候,是否都会遇到一个问题就是:要绘制一个电力系统一次接线图.大家都应该知道其实电力系统的一次接线图是较为复杂的,如果想要使用一般的编程方法来进行绘制的话,基本上就是行不通的.那么我们应该怎样才可以更加的高效直接呢?今天小编就会给大家介绍一个方法,那就是:利用C语言编辑画图程序的实现方法.希望这篇教程对于大家有所帮助. 一.实现方法 在教程开始之前,小编先为大家介绍一下在编程程序里面早已定义了几个特殊按钮.为什么小编要为大家介绍这几个特殊按钮呢?那是因

  • R语言数据可视化ggplot绘制置信区间与分组绘图技巧

    目录 1. 单组情况 1)构造数据集 2)绘制置信区间 2. 多组情况 方法1 1)构造数据集 2)绘制置信区间 方法2 1)构造数据集 2)绘制置信区间 3)美化 1. 单组情况 1)构造数据集 x <- 1:10 y <- x^2 ci_l <- x^2 - 0.5 * x ci_r <- x^2 + 0.5 * x dat_plot <- data.frame(x, y, ci_l, ci_r) 数据集长下面这样: x y ci_l ci_r 1 1 1 0.5 1.5

  • 利用C语言实现经典游戏斗兽棋

    效果图 核心代码 #include<stdio.h> #include<easyx.h> #include<stdlib.h> #include<time.h> #define IMAGE_NUM_ANIMAL 8 //动物图片数量 /* 动物类型枚举 从弱到强*/ enum AnimalType { AT_None, //没有 AT_Mouse, //老鼠 AT_Cat, //猫 AT_Dog, //狗 AT_Wolf, //狼 AT_Leopard, /

  • 利用Go语言追加内容到文件末尾

    前言 我研究了file库,终于让我找到了利用Go语言追加内容到文件末尾的办法 主要的2个函数: func (f *File) Seek(offset int64, whence int) (ret int64, err error) func (f *File) WriteAt(b []byte, off int64) (n int, err error) Seek()查到文件末尾的偏移量 WriteAt()则从偏移量开始写入 以下是例子: // fileName:文件名字(带全路径) // c

  • 利用C语言替换文件中某一行的方法

    文件中存贮的内容如下所示: 11 1122 0 1122 * * 0 0 22 222 0 222 * * 0 0 33 333 0 333 * * 0 0 通过使用下面的几个函数,fopen,fprintf,fscanf,fseek,ftell . 具体的函数函数原型如下所示: FILE*fopen(const char*filename,const char *mode); int fprintf(FILE*stream,const char *format,...) int fscanf(

  • 利用 Go 语言编写一个简单的 WebSocket 推送服务

    本文中代码可以在 github.com/alfred-zhong/wserver获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息都是通过短信,微信和 App 推送给用户的,现在要让登录用户在网页端也能实时接收到报警推送. 依稀记得以前工作的时候遇到过类似的需求.因为以前的浏览器标准比较陈旧,并且那时用 Java 较多,所以那时候解决这个问题就用了 Comet4J.具体的原理就是长轮询,长链接.但现在毕竟 html5 流行开来了,IE 都被 Edge 接替了,再用以前这种技术就显得过

  • 利用C语言编写“剪刀石头布”小游戏

    前言 大家好~ 我是一名C语言初学者,学了C语言基础后,我制作了一个小游戏:剪刀石头布. 希望大家能对我的思路和代码提出小Tips(eg.更简便的方法与程序) 我也会虚心接受大家的建议~ 一.游戏原理 "剪刀石头布"这个游戏,想必大家都很熟悉了. 两个人在玩游戏时,事先都不知道对方将要出什么,这中间存在着一种随机性. 而这种随机性相当于C语言里stdlib.h库中rand()函数,rand()函数用来产生随机数,因为rand是根据提供给srand()的种子值返回一个随机数,所以要使每次

  • 利用C语言如何实现一些简单图形的打印

    1#define_CRT_SECURE_NO_WARNINGS 1 因为笔者采用的是VS的编译环境所以有了上面的这一句话 我们都知道平面图形是由一条条线段构成,所以我们就先实现线段的打印 //打印自定义长度的线段 #include<stdio.h> int main() { int i = 0; int n; while (~scanf("%d", &n)) { for (i = 0; i < n; i++) printf("* "); p

随机推荐