%% %% Copyright (C) 2013 by: %% Josef Kleber %% %% %% This file may be distributed and/or modified under the conditions of %% the LaTeX Project Public License, either version 1.3 of this license %% or (at your option) any later version. The latest version of this %% license is in: %% %% http://www.latex-project.org/lppl.txt %% %% and version 1.3 or later is part of all distributions of LaTeX version %% 2003/12/01 or later. %% %% This work has the LPPL maintenance status "author-maintained". %% %% The Current Maintainer of this work is Josef Kleber. %% %% This work consists of all files listed in manifest.txt. %% % for more infos see: % http://en.wikipedia.org/wiki/Battleship_%28puzzle%29 % http://de.wikipedia.org/wiki/Bimaru % \ProvidesPackage{battleship}[2013/02/23 battleship.sty v1.2 - Josef Kleber (C) 2013]% % \RequirePackage{logicpuzzle}% \tikzstyle{island} = [fill=yellow!30,draw, decorate, decoration={random steps,segment length=2.7pt,amplitude=1.7pt}]% % % options \newcommand*\BS@width{6cm}% \newcommand*\BS@fontsize\Large% \newcommand*\BS@rows{5}% \newcommand*\BS@columns{5}% \newcommand*\BS@scale{1}% \newcommand*\BS@bgcolor{}% \newcommand*\BS@shipcolor{green}% \newcommand*\BS@title{}% \newcommand*\BS@titleindent{0.75cm}% \newcommand*\BS@titlewidth{5.15cm}% \newcommand*\BS@SB@indent{0.75cm}% \newcommand*\BS@SB@width{5.15cm}% \newcommand*\BS@SB@shipboxscale{1}% % \newcounter{BS@rows}% \newcounter{BS@columns}% % \setcounter{BS@rows}{\BS@rows}% \setcounter{BS@columns}{\BS@columns}% \stepcounter{BS@rows}% \stepcounter{BS@columns}% % \define@key{battleship.sty}{rows}[5]% {% \renewcommand*\BS@rows{#1}% }% % \define@key{battleship.sty}{columns}[5]% {% \renewcommand*\BS@columns{#1}% }% % \define@key{battleship.sty}{shipcolor}[green]% {% \renewcommand*\BS@shipcolor{#1}% }% % \define@key{battleship.sty}{scale}[1]% {% \renewcommand*\BS@scale{#1}% }% % \define@key{battleship.sty}{counterstyle}[none]% {% \renewcommand*\LP@counterstyle{#1}% }% % \define@key{battleship.sty}{bgcolor}[]% {% \renewcommand*\BS@bgcolor{#1}% }% % \define@choicekey*{battleship.sty}{fontsize}[\BS@fontsize\nr]{tiny,scriptsize,footnotesize,small,normalsize,large,Large,LARGE,huge,Huge}[Large]% {% \ifcase\nr\relax% \renewcommand*\BS@fontsize{\tiny}% \or% \renewcommand*\BS@fontsize{\scriptsize}% \or% \renewcommand*\BS@fontsize{\footnotesize}% \or% \renewcommand*\BS@fontsize{\small}% \or% \renewcommand*\BS@fontsize{\normalsize}% \or% \renewcommand*\BS@fontsize{\large}% \or% \renewcommand*\BS@fontsize{\Large}% \or% \renewcommand*\BS@fontsize{\LARGE}% \or% \renewcommand*\BS@fontsize{\huge}% \or% \renewcommand*\BS@fontsize{\Huge}% \fi% }% % \define@key{battleship.sty}{width}[6cm]% {% \renewcommand*\BS@width{#1}% }% % \define@key{battleship.sty}{title}[]% {% \renewcommand*\BS@title{#1}% }% % \define@key{battleship.sty}{titleindent}[0.75cm]% {% \renewcommand*\BS@titleindent{#1}% }% % \define@key{battleship.sty}{titlewidth}[5.15cm]% {% \renewcommand*\BS@titlewidth{#1}% }% % \define@key{battleship.sty}{sbindent}[0.75cm]% {% \renewcommand*\BS@SB@indent{#1}% }% % \define@key{battleship.sty}{sbwidth}[5.15cm]% {% \renewcommand*\BS@SB@width{#1}% }% % \define@key{battleship.sty}{sbshipscale}[1]% {% \renewcommand*\BS@SB@shipboxscale{#1}% }% % \define@key{battleship}{rows}% {% \renewcommand*\BS@rows{#1}% }% % \define@key{battleship}{columns}% {% \renewcommand*\BS@columns{#1}% }% % \define@key{battleship}{shipcolor}% {% \renewcommand*\BS@shipcolor{#1}% }% % \define@key{battleship}{scale}% {% \renewcommand*\BS@scale{#1}% }% % \define@key{battleship}{bgcolor}% {% \renewcommand*\BS@bgcolor{#1}% }% % \define@key{battleship}{counterstyle}% {% \renewcommand*\LP@counterstyle{#1}% }% % \define@choicekey*{battleship}{fontsize}[\BS@fontsize\nr]{tiny,scriptsize,footnotesize,small,normalsize,large,Large,LARGE,huge,Huge}[Large]% {% \ifcase\nr\relax% \renewcommand*\BS@fontsize{\tiny}% \or% \renewcommand*\BS@fontsize{\scriptsize}% \or% \renewcommand*\BS@fontsize{\footnotesize}% \or% \renewcommand*\BS@fontsize{\small}% \or% \renewcommand*\BS@fontsize{\normalsize}% \or% \renewcommand*\BS@fontsize{\large}% \or% \renewcommand*\BS@fontsize{\Large}% \or% \renewcommand*\BS@fontsize{\LARGE}% \or% \renewcommand*\BS@fontsize{\huge}% \or% \renewcommand*\BS@fontsize{\Huge}% \fi% }% % \define@key{battleship}{width}% {% \renewcommand*\BS@width{#1}% }% % \define@key{battleship}{title}% {% \renewcommand*\BS@title{#1}% }% % \define@key{battleship}{titleindent}% {% \renewcommand*\BS@titleindent{#1}% }% % \define@key{battleship}{titlewidth}% {% \renewcommand*\BS@titlewidth{#1}% }% % \define@key{battleship}{sbindent}% {% \renewcommand*\BS@SB@indent{#1}% }% % \define@key{battleship}{sbwidth}% {% \renewcommand*\BS@SB@width{#1}% }% % \define@key{battleship}{sbshipscale}% {% \renewcommand*\BS@SB@shipboxscale{#1}% }% % \ExecuteOptionsX{rows,columns,width,fontsize,shipcolor,scale,bgcolor,counterstyle,title,titleindent,titlewidth,sbindent,sbwidth,sbshipscale}% % \ProcessOptionsX\relax% % \gdef\BS@shipbox{}% % \newcommand*\Ship{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor] (0,0) circle (1);}% \newcommand*\ShipC{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor] (0,0)--(0,2)--(2,2)--(2,0)--cycle;}% \newcommand*\ShipT{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor](2,1)--(2,0)--(0,0)--(0,1) arc (180:0:1);}% \newcommand*\ShipB{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor](2,1)--(2,2)--(0,2)--(0,1) arc (180:360:1);}% \newcommand*\ShipL{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor](1,2)--(2,2)--(2,0)--(1,0) arc (270:90:1);}% \newcommand*\ShipR{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor](1,2)--(0,2)--(0,0)--(1,0) arc (270:450:1);}% \newcommand*\Island{\tikz[scale=\BS@scale]\draw[scale=.36,island] (0,0) rectangle (2,2);}% \newcommand*\Water{\tikz[scale=\BS@scale]\draw[scale=.36,fill,blue!40] (1,1) circle (0.2);}% % versions for \shipbox without second scale \newcommand*\@Ship{\tikz\draw[scale=.144,fill=\BS@shipcolor] (0,0) circle (1);}% \newcommand*\@ShipC{\tikz\draw[scale=.144,fill=\BS@shipcolor] (0,0)--(0,2)--(2,2)--(2,0)--cycle;}% \newcommand*\@ShipT{\tikz\draw[scale=.144,fill=\BS@shipcolor](2,1)--(2,0)--(0,0)--(0,1) arc (180:0:1);}% \newcommand*\@ShipB{\tikz\draw[scale=.144,fill=\BS@shipcolor](2,1)--(2,2)--(0,2)--(0,1) arc (180:360:1);}% \newcommand*\@ShipL{\tikz\draw[scale=.144,fill=\BS@shipcolor](1,2)--(2,2)--(2,0)--(1,0) arc (270:90:1);}% \newcommand*\@ShipR{\tikz\draw[scale=.144,fill=\BS@shipcolor](1,2)--(0,2)--(0,0)--(1,0) arc (270:450:1);}% % \newcommand*\BS@printship[1]% {% \ifthenelse{\equal{#1}{1}}{\scalebox{\BS@SB@shipboxscale}{\@Ship}\space\allowbreak}{}% \ifthenelse{\equal{#1}{2}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipR}\space\allowbreak}{}% \ifthenelse{\equal{#1}{3}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipR}\space\allowbreak}{}% \ifthenelse{\equal{#1}{4}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}% \ifthenelse{\equal{#1}{5}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}% \ifthenelse{\equal{#1}{6}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}% \ifthenelse{\equal{#1}{7}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}% \ifthenelse{\equal{#1}{8}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}% \ifthenelse{\equal{#1}{9}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}% \ifthenelse{\equal{#1}{10}}{\scalebox{\BS@SB@shipboxscale}{\@ShipL\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipC\,\@ShipR}\space\allowbreak}{}% }% % \newcommand*\BS@printshipbox[1]% {% \expandafters needed because csv list is stored in macro \expandafter\forcsvlist\expandafter\BS@printship\expandafter{#1}% }% % \newcommand*\shipH[1]% {% \LP@setcolumncontents{#1}{1}{\value{BS@rows}}{\BS@fontsize}% }% % \newcommand*\shipV[1]% {% \LP@setrowcontents{#1}{0}{1}{\BS@fontsize}% }% % \newcommand*\placesegment[3]% {% \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}% \LP@setcellcontent{#1}{#2}{#3}% }% % \let\ship\placesegment% % \newcommand*\placeisland[2]% {% \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}% \LP@setcellcontent{#1}{#2}{\Island}% }% % \newcommand*\placewater[2]% {% \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}% \LP@setcellcontent{#1}{#2}{\Water}% }% % \newcommand*\shipbox[2][]% {% \setkeys{shipbox}{#1}% \gdef\BS@shipbox{#2}% }% % \newcommand*\placeship[4]% {% \setcounter{LP@counti}{#4}% length \ifnum\value{LP@counti}<1% \PackageError{battleship}% {ship length < 1}% {The length of your ship should be at least 1}% \fi% \ifnum\value{LP@counti}>10% \PackageError{battleship}% {ship length > 10}% {The supported max length of ships is 10!}% \fi% \ifnum\value{LP@counti}=1% \placesegment{#2}{#3}{\Ship}% \else% \setcounter{LP@whiledo}{\value{LP@counti}}% \addtocounter{LP@whiledo}{-2}% length of middle ship \ifthenelse{\equal{#1}{V}}% {% \placesegment{#2}{#3}{\ShipB}% \setcounter{LP@countii}{#3}% \whiledo{\value{LP@whiledo}>0}% {% \addtocounter{LP@whiledo}{-1}% \stepcounter{LP@countii}% \placesegment{#2}{\theLP@countii}{\ShipC}% }% \stepcounter{LP@countii}% \placesegment{#2}{\theLP@countii}{\ShipT}% }% {% \ifthenelse{\equal{#1}{H}}% {% \placesegment{#2}{#3}{\ShipL}% \setcounter{LP@counti}{#2}% \whiledo{\value{LP@whiledo}>0}% {% \addtocounter{LP@whiledo}{-1}% \stepcounter{LP@counti}% \placesegment{\theLP@counti}{#3}{\ShipC}% }% \stepcounter{LP@counti}% \placesegment{\theLP@counti}{#3}{\ShipR}% }% {\PackageError{battleship}% {invalid direction (H/V)}% {You can place your ship only\MessageBreak% horizontally (H) or vertically (V)!}% }% }% \fi% }% % \newcommand*\battleshipsetup[1]% {% \setkeys{battleship.sty}{#1}% }% % \newcommand{\classicgame}[1]% {% \begin{center}% \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Me,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]% \shipV{J,I,H,G,F,E,D,C,B,A}% \shipH{1,2,3,4,5,6,7,8,9,10}% \shipbox{#1}% \end{battleship}% \hspace{1cm}% \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Enemy,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]% \shipV{J,I,H,G,F,E,D,C,B,A}% \shipH{1,2,3,4,5,6,7,8,9,10}% \end{battleship}% \end{center}% \par\vspace{1cm}% \begin{center}% \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Me,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]% \shipV{J,I,H,G,F,E,D,C,B,A}% \shipH{1,2,3,4,5,6,7,8,9,10}% \shipbox{#1}% \end{battleship}% \hspace{1cm}% \begin{battleship}[rows=10,columns=10,width=6.5cm,title=Enemy,sbindent=0.65cm,titleindent=0.55cm,titlewidth=5.7cm,sbwidth=5.7cm,scale=0.59,fontsize=normalsize]% \shipV{J,I,H,G,F,E,D,C,B,A}% \shipH{1,2,3,4,5,6,7,8,9,10}% \end{battleship}% \end{center}% }% % \newenvironment{battleship}[1][]% {% \setkeys{battleship}{#1}% \shipbox{}% clear shipbox \setcounter{BS@rows}{\BS@rows}% \setcounter{BS@columns}{\BS@columns}% \stepcounter{BS@rows}% \stepcounter{BS@columns}% \begin{minipage}[t]{\BS@width}% \ifthenelse{\equal{\BS@title}{}}% {\par\enspace\par}% empty {\enspace\par\noindent\hspace{\BS@titleindent}\parbox{\BS@titlewidth}{\strut\LP@titleformat\BS@title}\vspace{3mm}\par}% \begin{tikzpicture}[scale=\BS@scale]% \LP@drawbackground{1}{1}{\BS@columns}{\BS@rows}{\BS@bgcolor}% \LP@drawgrid{1}{1}{\BS@columns}{\BS@rows}{1cm}% }% {% \end{tikzpicture}% \LP@drawcounter{\LP@counterstyle}% \par\hbadness=10000\medskip\noindent\hspace{\BS@SB@indent}\begin{minipage}{\BS@SB@width}{\hbadness=10000\RaggedRight\BS@printshipbox{\BS@shipbox}}\end{minipage}% \stepcounter{LP@puzzlecounter}% \end{minipage}% }% % \endinput%