「golang」绘制爱心文本

王诗翔 · · 3489 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

这两天利用最近所学,编写了一个 Golang 绘制爱心文本程序

package main

import (
    "flag"
    "fmt"
    "math"
    "strings"
    "time"
)

// Print text heart
// Author: ShixiangWang
// LICENSE: MIT
// Reference: https://blog.csdn.net/su_bao/article/details/80355001
func main() {
    // MYWORD My word
    var head string
    var tail string
    var MYWORD string
    var sep string
    var zoom float64
    flag.StringVar(&head, "head", "There are some words I wana tell you:", "A sentence printed on the head")
    flag.StringVar(&tail, "tail", "\t\t\t\t--- Your lover", "A sentence printed on the tail")
    flag.StringVar(&MYWORD, "words", "Dear, I love you forever!", "The words you want to talk")
    flag.StringVar(&sep, "sep", " ", "The separator")
    flag.Float64Var(&zoom, "zoom", 1.0, "Zoom setting")
    flag.Parse()

    chars := strings.Split(MYWORD, sep)

    time.Sleep(time.Duration(1) * time.Second)
    fmt.Println(head)
    fmt.Println()
    time.Sleep(time.Duration(1) * time.Second)
    for _, char := range chars {
        allChar := make([]string, 0)

        for y := 12 * zoom; y > -12*zoom; y-- {
            lst := make([]string, 0)
            lstCon := ""
            for x := -30 * zoom; x < 30*zoom; x++ {
                x2 := float64(x)
                y2 := float64(y)
                formula := math.Pow(math.Pow(x2*0.04/zoom, 2)+math.Pow(y2*0.1/zoom, 2)-1, 3) - math.Pow(x2*0.04/zoom, 2)*math.Pow(y2*0.1/zoom, 3)
                if formula <= 0 {
                    index := int(x) % len(char)
                    if index >= 0 {
                        lstCon += string(char[index])
                    } else {
                        lstCon += string(char[int(float64(len(char))-math.Abs(float64(index)))])
                    }

                } else {
                    lstCon += " "
                }
            }
            lst = append(lst, lstCon)
            allChar = append(allChar, lst...)
        }

        for _, text := range allChar {
            fmt.Printf("%s\n", text)
        }
    }
    time.Sleep(time.Duration(1) * time.Second)
    fmt.Println("\t\t\t\t", tail)
}

用法如下:

$ go run main.go -h
Usage of C:\Users\Shixiang\AppData\Local\Temp\go-build146721866\b001\exe\main.exe:
  -head string
        A sentence printed on the head (default "There are some words I wana tell you:")
  -sep string
        The separator (default " ")
  -tail string
        A sentence printed on the tail (default "\t\t\t\t--- Your lover")
  -words string
        The words you want to talk (default "Dear, I love you forever!")
  -zoom float
        Zoom setting (default 1)
exit status 2

我们简单看下使用的效果:

$ go run main.go
There are some words I wana tell you:

            ar,Dear,Dea               r,Dear,Dear
        r,Dear,Dear,Dear,Dea     r,Dear,Dear,Dear,Dea       
     Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,D    
    ,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,De   
   r,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dea  
  ar,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear 
  ar,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear 
  ar,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear
  ar,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear 
   r,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dea
   r,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dea
    ,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,De
     Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,D
       ar,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear
        r,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dea
          Dear,Dear,Dear,Dear,Dear,Dear,Dear,Dear,D
            ar,Dear,Dear,Dear,Dear,Dear,Dear,Dear
               Dear,Dear,Dear,Dear,Dear,Dear,D
                  r,Dear,Dear,Dear,Dear,Dea
                     ear,Dear,Dear,Dear,
                         Dear,Dear,D
                            r,Dea
                              D

            IIIIIIIIIII               IIIIIIIIIII
        IIIIIIIIIIIIIIIIIIII     IIIIIIIIIIIIIIIIIIII
     IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
  IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII 
   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
   IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
     IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
       IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
        IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
          IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
            IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
               IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
                  IIIIIIIIIIIIIIIIIIIIIIIII
                     IIIIIIIIIIIIIIIIIII
                         IIIIIIIIIII
                            IIIII
                              I

            velovelovel               lovelovelov
        velovelovelovelovelo     elovelovelovelovelov       
     elovelovelovelovelovelovelovelovelovelovelovelovelo
    velovelovelovelovelovelovelovelovelovelovelovelovelov
   ovelovelovelovelovelovelovelovelovelovelovelovelovelove
  lovelovelovelovelovelovelovelovelovelovelovelovelovelovel
  lovelovelovelovelovelovelovelovelovelovelovelovelovelovel
  lovelovelovelovelovelovelovelovelovelovelovelovelovelovel
  lovelovelovelovelovelovelovelovelovelovelovelovelovelovel
   ovelovelovelovelovelovelovelovelovelovelovelovelovelove
   ovelovelovelovelovelovelovelovelovelovelovelovelovelove
    velovelovelovelovelovelovelovelovelovelovelovelovelov
     elovelovelovelovelovelovelovelovelovelovelovelovelo
       ovelovelovelovelovelovelovelovelovelovelovelove
        velovelovelovelovelovelovelovelovelovelovelov
          lovelovelovelovelovelovelovelovelovelovel
            velovelovelovelovelovelovelovelovelov
               ovelovelovelovelovelovelovelove
                  lovelovelovelovelovelovel
                     elovelovelovelovelo
                         elovelovelo
                            velov
                              l

            youyouyouyo               uyouyouyouy
        uyouyouyouyouyouyouy     youyouyouyouyouyouyo
     uyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyo
    ouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyou   
   youyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouy
  uyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyo
  uyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyo
  uyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyo
  uyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyo
   youyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouy
   youyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouy
    ouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyou
     uyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyo
       ouyouyouyouyouyouyouyouyouyouyouyouyouyouyouyou
        uyouyouyouyouyouyouyouyouyouyouyouyouyouyouyo
          ouyouyouyouyouyouyouyouyouyouyouyouyouyou
            youyouyouyouyouyouyouyouyouyouyouyouy
               youyouyouyouyouyouyouyouyouyouy
                  youyouyouyouyouyouyouyouy
                     youyouyouyouyouyouy
                         ouyouyouyou
                            ouyou
                              y

            r!forever!f               forever!for
        rever!forever!foreve     ever!forever!forever
     !forever!forever!forever!forever!forever!forever!fo
    r!forever!forever!forever!forever!forever!forever!for   
   er!forever!forever!forever!forever!forever!forever!fore
  ver!forever!forever!forever!forever!forever!forever!forev
  ver!forever!forever!forever!forever!forever!forever!forev
  ver!forever!forever!forever!forever!forever!forever!forev
  ver!forever!forever!forever!forever!forever!forever!forev
   er!forever!forever!forever!forever!forever!forever!fore
   er!forever!forever!forever!forever!forever!forever!fore
    r!forever!forever!forever!forever!forever!forever!for   
     !forever!forever!forever!forever!forever!forever!fo
       orever!forever!forever!forever!forever!forever!
        rever!forever!forever!forever!forever!forever
          ver!forever!forever!forever!forever!forev
            r!forever!forever!forever!forever!for
               orever!forever!forever!forever!
                  ver!forever!forever!forev
                     !forever!forever!fo
                         ever!foreve
                            r!for
                              f

                                                                --- Your lover

在除夕之夜,谨以此献上我的祝福:

$ go run main.go -head "Best wishes to my readers:" -words "Happy Chinese New Year! I wish you good health, successful career, happy family reunion and good luck in everyth
ing!" -tail "--- Shixiang" -sep "zz" -zoom 1.5
Best wishes to my readers:

                  nd good luck in e                     se New Year! I wi
             ion and good luck in everyt           Chinese New Year! I wish yo
          eunion and good luck in everything   ppy Chinese New Year! I wish you g
         reunion and good luck in everything!Happy Chinese New Year! I wish you goo       
      ly reunion and good luck in everything!Happy Chinese New Year! I wish you good
     ily reunion and good luck in everything!Happy Chinese New Year! I wish you good h
    mily reunion and good luck in everything!Happy Chinese New Year! I wish you good he
    mily reunion and good luck in everything!Happy Chinese New Year! I wish you good he
   amily reunion and good luck in everything!Happy Chinese New Year! I wish you good hea
   amily reunion and good luck in everything!Happy Chinese New Year! I wish you good hea
   amily reunion and good luck in everything!Happy Chinese New Year! I wish you good hea  
   amily reunion and good luck in everything!Happy Chinese New Year! I wish you good hea
   amily reunion and good luck in everything!Happy Chinese New Year! I wish you good hea
    mily reunion and good luck in everything!Happy Chinese New Year! I wish you good he
    mily reunion and good luck in everything!Happy Chinese New Year! I wish you good he
     ily reunion and good luck in everything!Happy Chinese New Year! I wish you good h
      ly reunion and good luck in everything!Happy Chinese New Year! I wish you good
       y reunion and good luck in everything!Happy Chinese New Year! I wish you good
         reunion and good luck in everything!Happy Chinese New Year! I wish you goo
         reunion and good luck in everything!Happy Chinese New Year! I wish you go
           union and good luck in everything!Happy Chinese New Year! I wish you
            nion and good luck in everything!Happy Chinese New Year! I wish you
              on and good luck in everything!Happy Chinese New Year! I wish y
                 and good luck in everything!Happy Chinese New Year! I wish
                  nd good luck in everything!Happy Chinese New Year! I wi
                     good luck in everything!Happy Chinese New Year! I
                        d luck in everything!Happy Chinese New Year
                          luck in everything!Happy Chinese New Ye
                               in everything!Happy Chinese Ne
                                  everything!Happy Chinese
                                     rything!Happy Chi
                                        hing!Happy
                                            !Ha
                                             H


                                 --- Shixiang

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:王诗翔

查看原文:「golang」绘制爱心文本

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3489 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传