用 LaTeX 绘制超级马里奥兄弟......

用 LaTeX 绘制超级马里奥兄弟......

关于 TeX.SE 有几个问题。涉及诸如烟花、农历、圆周率希腊字母等重复的设计,在我的脑海里,我记得一个老电子游戏中的主角:超级马里奥兄弟

但是,使用 LaTeX 可以绘制电子游戏主角的详细图画吗?

我只是好奇想看看用户是如何构建超级马里奥兄弟的。谢谢大家。

答案1

如果马里奥和路易吉要去参加派对怎么办?有人说他们喜欢鸭子!!

在此处输入图片描述

来自 TikZducks 包

平均能量损失

\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,更不用说 TiZ 和其他花哨的系统,因此任天堂只能使用 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}

相关内容