关于 TeX.SE 有几个问题。涉及诸如烟花、农历、圆周率希腊字母等重复的设计,在我的脑海里,我记得一个老电子游戏中的主角:超级马里奥兄弟。
但是,使用 LaTeX 可以绘制电子游戏主角的详细图画吗?
我只是好奇想看看用户是如何构建超级马里奥兄弟的。谢谢大家。
答案1
如果马里奥和路易吉要去参加派对怎么办?有人说他们喜欢鸭子!!
平均能量损失
\documentclass[border=2mm]{standalone}
\usepackage{xcolor}
\usepackage{tikzducks}
\newcommand{\superstripes}{\stripes[color=blue!80!black,width=3,height=1.0,rotate=5] \stripes[color=blue!80!black,width=0.1,rotate=0,distance=0.7,initialx=-1.1,height=2]}
\begin{document}
\begin{tikzpicture}
\duck[tshirt=red!80!black,peakedcap=red!80!black,stripes={\superstripes}]
\fill[white] (0.8,2) circle (0.13);
\node[red!80!black,rotate=-25] at (0.8,2) {\scalebox
{0.6}{\textsf{M}}};
\end{tikzpicture}
\begin{tikzpicture}
\duck[tshirt=green!70!black,peakedcap=green!70!black,
stripes={\superstripes}]
\fill[white] (0.8,2) circle (0.13);
\node[green!70!black,rotate=-25] at (0.8,2) {\scalebox
{0.6}{\textsf{L}}};
\end{tikzpicture}
\end{document}
答案2
作为每个人知道,这款游戏是在 1985 年发布的,当时 LaTeX 才刚刚问世,还没有 pdfTeX,更不用说 Ti钾Z 和其他花哨的系统,因此任天堂只能使用 Knuth 的 TeX 来制作图片。
他们需要一种高效的方法来制作图片,所以他们显然没有时间写下所有这些坐标,所以他们采用一种易于绘制游戏每一帧的语法,如下所示:
\beginmario
..=====....
.=========.
.---@@-@...
-@-@@@-@@@.
-@--@@@-@@@
--@@@@----.
..@@@@@@@..
.==+===....
===+==+===.
===++++====
@=+@++@+=@@
@@++++++@@@
@++++++++@@
.+++..+++..
---....---.
---....----
\endmario
生产:
所以他们使用了类似这样的方法:
\input color.tex
\newtoks\marioactives
\def\newmariocolor#1#2#3{%
\definecolor{M#2}{rgb}{#3}%
\expandafter\def\csname MarioSquare#1\endcsname
{\begingroup\color{M#2}\MarioBox}%
\marioactives\expandafter{\the\marioactives\mkactive{#1}}}
\newdimen\unitlength
\newdimen\rulesize
\newcount\therow
\newcount\thecol
\def\MarioBox{\leavevmode\raise\therow\unitlength
\hbox to 0pt{\kern\thecol\unitlength\DrawBox\hss}%
\endgroup\advance\thecol 1 \ignorespaces}
\def\DrawBox{\leavevmode\hbox{\vrule width\rulesize height\rulesize}}
\def\mkactive#1{%
\catcode`#1=13\relax
\begingroup\lccode`~=`#1\lowercase{\endgroup
\expandafter\let\expandafter~}\csname MarioSquare#1\endcsname}
{\catcode`\^^M=13
\gdef\beginmario{%
\begingroup
\catcode`\ =9
\catcode`\^^M=13
\def^^M{\advance\therow-1 \thecol 0 }%
\rulesize\unitlength
\advance\rulesize 0.1pt
\the\marioactives}%
\gdef\endmario{\endgroup}%
}
\newmariocolor{=}{red}{1,0,0}
\newmariocolor{+}{blue}{0,0.15,1}
\newmariocolor{@}{yellow}{1,0.65,0}
\newmariocolor{-}{brown}{0.5,0.1,0}
\newmariocolor{.}{white}{1,1,1}
\unitlength=5pt
\beginmario
..=====....
.=========.
.---@@-@...
-@-@@@-@@@.
-@--@@@-@@@
--@@@@----.
..@@@@@@@..
.==+===....
===+==+===.
===++++====
@=+@++@+=@@
@@++++++@@@
@++++++++@@
.+++..+++..
---....---.
---....----
\endmario
\bye
答案3
和 Sigur 一样,我也确信这是一个 XY 问题。可能是意大利语自动更正替换了 marmot my Mario,对吧?;-)
\documentclass[border={1cm 3.14mm 1cm 3.14mm}]{standalone}
\usepackage{tikzlings} % https://ctan.org/pkg/tikzlings
\begin{document}
\begin{tikzpicture}
\marmot[whiskers,teeth,3D,shadow]
\fill[top color=blue!70,bottom color=blue,shading angle=-30]
(-0.56,1.35) to[out=-10,in=190] (0.56,1.35)
to[out=-80,in=85] (0.58,0.6) to[out=-175,in=-5] (-0.58,0.6)
to[out=95,in=-100] cycle;
\shade[ball color=brown!50!black,rotate around={70:(0.385,0.93)}] (0.385,0.93) ellipse (0.24 and 0.13);
\shade[ball color=brown!50!black,rotate around={-70:(-0.385,0.93)}] (-0.385,0.93) ellipse (0.24 and 0.13);
\draw[red,thick,fill=yellow] (-0.1,1.2) -- (-0.25,1.05) -- (0,0.7) -- (0.25,1.05) --
(0.1,1.2) -- cycle;
\node[font=\sffamily\bfseries,text=red] at (0,1) {S};
\end{tikzpicture}
\end{document}
答案4
不完全是马里奥,但足够接近了。你需要下载超级马里奥256字体并使用 XeTeX 或 LuaTeX 进行编译。
\documentclass{article}
\usepackage{fontspec}
\usepackage{xcolor}
\usepackage{relsize}
\newfontfamily\mario{SuperMario256.ttf}
\newcommand\marioltr[2]{{%
\mario \sbox0{#1}\sbox2{\larger#1}%
\dimen0=\dimexpr(\wd2-\wd0)/2\relax
\dimen2=\dimexpr\ht2-\ht0\relax
\leavevmode \kern-\dimen0\lower\dimen2 \rlap{\unhbox2}\kern \dimen0
\textcolor{#2}{#1}}}
\newcommand\textmario[2]{%
\textmarioAUX#1{}\relax\textmarioAUXX#2{}\relax\stop}
\newcommand\textmarioAUX{}
\def\textmarioAUX#1#2\textmarioAUXX#3#4\stop{%
\stopifempty{#1}\stopifempty{#3}%
\marioltr{#1}{#3}\textmarioAUX#2\textmarioAUXX#4\stop}
\newcommand\stopifempty[1]{%
\if\relax\detokenize{#1}\relax\stopmario\fi}
\newcommand\stopmario{}
\def\stopmario#1\stop{\fi}
\newcommand\mariologo{{%
\sbox0{\textmario{SUPER}{byrgy}}%
\sbox2{\larger\textmario{MARIO}{rgybg}}%
\dimen0=\dimexpr(\wd2-\wd0)/2\relax
\leavevmode \vbox {\hsize=\wd2 \parindent=0pt
\leavevmode \kern\dimen0 \box0 \par\nointerlineskip
\leavevmode \ht2=0.9\ht2 \box2}}}
\newcommand\makeHTMLcolors[1]{%
\ifx\relax#1 \else\expandafter\makeHTMLcolorAUX \fi{#1}}
\newcommand\makeHTMLcolorAUX[2]{\definecolor{#1}{HTML}{#2}\makeHTMLcolors}
\makeHTMLcolors b{049CD8}y{FBD000}r{E52521}g{43B047}\relax
\begin{document}
\mariologo
\end{document}