github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/examples/gno.land/r/demo/art/gnoface/gnoface.gno (about)

     1  package gnoface
     2  
     3  import (
     4  	"std"
     5  	"strconv"
     6  	"strings"
     7  
     8  	"gno.land/p/demo/rand"
     9  	"gno.land/p/demo/ufmt"
    10  )
    11  
    12  func Render(path string) string {
    13  	seed := std.GetHeight()
    14  
    15  	path = strings.TrimSpace(path)
    16  	if path != "" {
    17  		s, err := strconv.Atoi(path)
    18  		if err != nil {
    19  			panic(err)
    20  		}
    21  		seed = int64(s)
    22  	}
    23  
    24  	output := ufmt.Sprintf("Gnoface #%d\n", seed)
    25  	output += "```\n" + Draw(seed) + "```\n"
    26  	return output
    27  }
    28  
    29  func Draw(seed int64) string {
    30  	var (
    31  		hairs = []string{
    32  			"     s",
    33  			"  .......",
    34  			"   s s s",
    35  			"   /\\ /\\",
    36  			"  |||||||",
    37  		}
    38  		headtop = []string{
    39  			" /-------\\",
    40  			" /~~~~~~~\\",
    41  			" /|||||||\\",
    42  			" ////////\\",
    43  			" |||||||||",
    44  			" /\\\\\\\\\\\\\\\\",
    45  		}
    46  		headspace = []string{
    47  			" |       |",
    48  		}
    49  		eyebrow = []string{
    50  			"~",
    51  			"*",
    52  			"_",
    53  			".",
    54  		}
    55  		ear = []string{
    56  			"o",
    57  			" ",
    58  			"D",
    59  			"O",
    60  			"<",
    61  			">",
    62  			".",
    63  			"|",
    64  			")",
    65  			"(",
    66  		}
    67  		eyesmiddle = []string{
    68  			"| o   o |",
    69  			"| o   _ |",
    70  			"| _   o |",
    71  			"| .   . |",
    72  			"| O   O |",
    73  			"| v   v |",
    74  			"| X   X |",
    75  			"| x   X |",
    76  			"| X   D |",
    77  			"| ~   ~ |",
    78  		}
    79  		nose = []string{
    80  			" |   o   |",
    81  			" |   O   |",
    82  			" |   V   |",
    83  			" |   L   |",
    84  			" |   C   |",
    85  			" |   ~   |",
    86  			" |  . .  |",
    87  			" |   .   |",
    88  		}
    89  		mouth = []string{
    90  			" |  __/  |",
    91  			" |  \\_/  |",
    92  			" |   .   |",
    93  			" |  ___  |",
    94  			" |  ~~~  |",
    95  			" |  ===  |",
    96  			" |  <=>  |",
    97  		}
    98  		headbottom = []string{
    99  			" \\-------/",
   100  			" \\~~~~~~~/",
   101  			" \\_______/",
   102  		}
   103  	)
   104  
   105  	r := rand.FromSeed(seed)
   106  
   107  	return pick(r, hairs) + "\n" +
   108  		pick(r, headtop) + "\n" +
   109  		pick(r, headspace) + "\n" +
   110  		" | " + pick(r, eyebrow) + "   " + pick(r, eyebrow) + " |\n" +
   111  		pick(r, ear) + pick(r, eyesmiddle) + pick(r, ear) + "\n" +
   112  		pick(r, headspace) + "\n" +
   113  		pick(r, nose) + "\n" +
   114  		pick(r, headspace) + "\n" +
   115  		pick(r, mouth) + "\n" +
   116  		pick(r, headspace) + "\n" +
   117  		pick(r, headbottom) + "\n"
   118  }
   119  
   120  func pick(r *rand.Instance, slice []string) string {
   121  	return slice[r.Intn(len(slice))]
   122  }
   123  
   124  // based on https://github.com/moul/pipotron/blob/master/dict/ascii-face.yml