From 0219257c1cda008db95d3b429139b8e0613c2044 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 24 Feb 2013 22:51:32 +0000 Subject: battleship (24feb13) git-svn-id: svn://tug.org/texlive/trunk@29220 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/battleship/battleship.sty | 227 ++++++++++++--------- .../tex/latex/battleship/logicpuzzle.sty | 176 ++++++++++++++++ 2 files changed, 304 insertions(+), 99 deletions(-) create mode 100644 Master/texmf-dist/tex/latex/battleship/logicpuzzle.sty (limited to 'Master/texmf-dist/tex/latex') diff --git a/Master/texmf-dist/tex/latex/battleship/battleship.sty b/Master/texmf-dist/tex/latex/battleship/battleship.sty index 2195ddb8e84..e7b106df3b1 100644 --- a/Master/texmf-dist/tex/latex/battleship/battleship.sty +++ b/Master/texmf-dist/tex/latex/battleship/battleship.sty @@ -23,15 +23,10 @@ % http://en.wikipedia.org/wiki/Battleship_%28puzzle%29 % http://de.wikipedia.org/wiki/Bimaru % -\ProvidesPackage{battleship}[2013/02/16 battleship.sty v1.1 - Josef Kleber (C) 2013]% +\ProvidesPackage{battleship}[2013/02/23 battleship.sty v1.2 - Josef Kleber (C) 2013]% % -\RequirePackage{xkeyval}% -\RequirePackage{ifthen}% -\RequirePackage{ragged2e}% -\RequirePackage{etoolbox}% -\RequirePackage{tikz}% -\usetikzlibrary{decorations.pathmorphing} -\tikzstyle{island} = [fill=yellow!30,draw, decorate, decoration={random steps,segment length=2.7pt,amplitude=1.7pt}] +\RequirePackage{logicpuzzle}% +\tikzstyle{island} = [fill=yellow!30,draw, decorate, decoration={random steps,segment length=2.7pt,amplitude=1.7pt}]% % % options \newcommand*\BS@width{6cm}% @@ -39,18 +34,17 @@ \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}% -\newcounter{BS@counti}% -\newcounter{BS@countii}% -\newcounter{BS@countiii}% -\newcounter{BS@countiv}% -\newcounter{BS@whiledo}% % \setcounter{BS@rows}{\BS@rows}% \setcounter{BS@columns}{\BS@columns}% @@ -77,9 +71,19 @@ \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 + \ifcase\nr\relax% \renewcommand*\BS@fontsize{\tiny}% \or% \renewcommand*\BS@fontsize{\scriptsize}% @@ -107,6 +111,21 @@ \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}% @@ -142,9 +161,19 @@ \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 + \ifcase\nr\relax% \renewcommand*\BS@fontsize{\tiny}% \or% \renewcommand*\BS@fontsize{\scriptsize}% @@ -172,6 +201,21 @@ \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}% @@ -187,11 +231,10 @@ \renewcommand*\BS@SB@shipboxscale{#1}% }% % -\ExecuteOptionsX{rows,columns,width,fontsize,shipcolor,scale,sbindent,sbwidth,sbshipscale}% +\ExecuteOptionsX{rows,columns,width,fontsize,shipcolor,scale,bgcolor,counterstyle,title,titleindent,titlewidth,sbindent,sbwidth,sbshipscale}% % \ProcessOptionsX\relax% % -\newcommand*\BS@Pfive{.5}% \gdef\BS@shipbox{}% % \newcommand*\Ship{\tikz[scale=\BS@scale]\draw[scale=.36,fill=\BS@shipcolor] (0,0) circle (1);}% @@ -210,52 +253,6 @@ \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@shipparts[3]% -{% - \node at (#1\BS@Pfive,#2\BS@Pfive){\BS@fontsize#3};% -}% -% -\newcommand*\BS@printpartsH[1]% -{% - \stepcounter{BS@counti}% - \BS@shipparts{\arabic{BS@counti}}{\arabic{BS@countii}}{#1}% -}% -% -\newcommand*\BS@printpartsV[1]% -{% - \stepcounter{BS@countii}% - \BS@shipparts{\arabic{BS@counti}}{\arabic{BS@countii}}{#1}% -}% -% -\newcommand*\BS@ingrid[2]% -{% - \setcounter{BS@countiii}{#1}% column - \setcounter{BS@countiv}{#2}% row - \ifnum\value{BS@countiii}<1% - \PackageError{battleship}% - {ship segment outside of the grid}% - {You tried to set a ship segment at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (\BS@columns,\BS@rows)}% - \fi% - \ifnum\value{BS@countiv}<1% - \PackageError{battleship}% - {ship segment outside of the grid}% - {You tried to set a ship segment at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (\BS@columns,\BS@rows)}% - \fi% - % BS@columns = \BS@columns + 1 - \stepcounter{BS@countiii}% - \stepcounter{BS@countiv}% - \ifnum\value{BS@countiii}>\value{BS@columns}% - \PackageError{battleship}% - {ship segment outside of the grid}% - {You tried to set a ship segment at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (\BS@columns,\BS@rows)}% - \fi% - \ifnum\value{BS@countiv}>\value{BS@rows}% - \PackageError{battleship}% - {ship segment outside of the grid}% - {You tried to set a ship segment at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (\BS@columns,\BS@rows)}% - \fi% -}% -% \newcommand*\BS@printship[1]% {% \ifthenelse{\equal{#1}{1}}{\scalebox{\BS@SB@shipboxscale}{\@Ship}\space\allowbreak}{}% @@ -272,41 +269,37 @@ % \newcommand*\BS@printshipbox[1]% {% \expandafters needed because csv list is stored in macro - \expandafter\forcsvlist\expandafter\BS@printship\expandafter{#1} + \expandafter\forcsvlist\expandafter\BS@printship\expandafter{#1}% }% % \newcommand*\shipH[1]% {% - \setcounter{BS@countii}{\value{BS@rows}}% - \setcounter{BS@counti}{0}% - \forcsvlist\BS@printpartsH{#1}% + \LP@setcolumncontents{#1}{1}{\value{BS@rows}}{\BS@fontsize}% }% % \newcommand*\shipV[1]% {% - \setcounter{BS@countii}{0}% - \setcounter{BS@counti}{0}% - \forcsvlist\BS@printpartsV{#1}% + \LP@setrowcontents{#1}{0}{1}{\BS@fontsize}% }% % \newcommand*\placesegment[3]% {% - \BS@ingrid{#1}{#2}% - \node at (#1\BS@Pfive,#2\BS@Pfive){#3};% + \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}% + \LP@setcellcontent{#1}{#2}{#3}% }% % \let\ship\placesegment% % \newcommand*\placeisland[2]% {% - \BS@ingrid{#1}{#2}% - \node at (#1\BS@Pfive,#2\BS@Pfive){\Island};% + \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}% + \LP@setcellcontent{#1}{#2}{\Island}% }% % \newcommand*\placewater[2]% {% - \BS@ingrid{#1}{#2}% - \node at (#1\BS@Pfive,#2\BS@Pfive){\Water};% + \LP@ingrid{#1}{#2}{\BS@columns}{\BS@rows}{battleship}% + \LP@setcellcontent{#1}{#2}{\Water}% }% % \newcommand*\shipbox[2][]% @@ -317,53 +310,54 @@ % \newcommand*\placeship[4]% {% - \setcounter{BS@counti}{#4}% length - \ifnum\value{BS@counti}<1% + \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{BS@counti}>10% + \ifnum\value{LP@counti}>10% \PackageError{battleship}% {ship length > 10}% {The supported max length of ships is 10!}% \fi% - \ifnum\value{BS@counti}=1% + \ifnum\value{LP@counti}=1% \placesegment{#2}{#3}{\Ship}% \else% - \setcounter{BS@whiledo}{\value{BS@counti}}% - \addtocounter{BS@whiledo}{-2}% length of middle ship + \setcounter{LP@whiledo}{\value{LP@counti}}% + \addtocounter{LP@whiledo}{-2}% length of middle ship \ifthenelse{\equal{#1}{V}}% {% \placesegment{#2}{#3}{\ShipB}% - \setcounter{BS@countii}{#3}% - \whiledo{\value{BS@whiledo}>0}% + \setcounter{LP@countii}{#3}% + \whiledo{\value{LP@whiledo}>0}% {% - \addtocounter{BS@whiledo}{-1}% - \stepcounter{BS@countii}% - \placesegment{#2}{\theBS@countii}{\ShipC}% + \addtocounter{LP@whiledo}{-1}% + \stepcounter{LP@countii}% + \placesegment{#2}{\theLP@countii}{\ShipC}% }% - \stepcounter{BS@countii}% - \placesegment{#2}{\theBS@countii}{\ShipT}% + \stepcounter{LP@countii}% + \placesegment{#2}{\theLP@countii}{\ShipT}% }% {% \ifthenelse{\equal{#1}{H}}% {% \placesegment{#2}{#3}{\ShipL}% - \setcounter{BS@counti}{#2}% - \whiledo{\value{BS@whiledo}>0}% + \setcounter{LP@counti}{#2}% + \whiledo{\value{LP@whiledo}>0}% {% - \addtocounter{BS@whiledo}{-1}% - \stepcounter{BS@counti}% - \placesegment{\theBS@counti}{#3}{\ShipC}% + \addtocounter{LP@whiledo}{-1}% + \stepcounter{LP@counti}% + \placesegment{\theLP@counti}{#3}{\ShipC}% }% - \stepcounter{BS@counti}% - \placesegment{\theBS@counti}{#3}{\ShipR}% + \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)!}}% + horizontally (H) or vertically (V)!}% + }% }% \fi% }% @@ -373,6 +367,35 @@ \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}% @@ -382,13 +405,19 @@ \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]% - \draw[step=1cm] (1,1) grid (\value{BS@columns},\value{BS@rows});% + \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}% - \end{minipage} + \stepcounter{LP@puzzlecounter}% + \end{minipage}% }% % \endinput% \ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/battleship/logicpuzzle.sty b/Master/texmf-dist/tex/latex/battleship/logicpuzzle.sty new file mode 100644 index 00000000000..0d408428934 --- /dev/null +++ b/Master/texmf-dist/tex/latex/battleship/logicpuzzle.sty @@ -0,0 +1,176 @@ +%% +%% 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. +%% +\ProvidesPackage{logicpuzzle}[2013/02/23 logicpuzzle.sty v1.0 - Josef Kleber (C) 2013]% +% +\RequirePackage{xkeyval}% +\RequirePackage{ifthen}% +\RequirePackage{ragged2e}% +\RequirePackage{etoolbox}% +\RequirePackage{marginnote}% +\RequirePackage{tikz}% +\usetikzlibrary{decorations.pathmorphing}% +% +\newcounter{LP@counti}% +\newcounter{LP@countii}% +\newcounter{LP@countiii}% +\newcounter{LP@countiv}% +\newcounter{LP@whiledo}% +\newcounter{LP@puzzlecounter}% +\setcounter{LP@puzzlecounter}{1}% +% +\newcommand*\LP@counterstyle{none}% +\newcommand*\LP@titleformat{}% +% +\newcommand*\LP@Pfive{.5}% +% +\newcommand*\LP@ingrid[5]% +{% + \setcounter{LP@counti}{#1}% column + \setcounter{LP@countii}{#2}% row + \setcounter{LP@countiii}{#3}% max column + \setcounter{LP@countiv}{#4}% max row + %#5 style + % + \ifnum\value{LP@counti}<1% + \PackageError{#5}% + {element outside of the grid}% + {You tried to set an element at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (#3,#4)}% + \fi% + \ifnum\value{LP@countii}<1% + \PackageError{#5}% + {element outside of the grid}% + {You tried to set an element at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (#3,#4)}% + \fi% + \ifnum\value{LP@counti}>\value{LP@countiii}% + \PackageError{#5}% + {element outside of the grid}% + {You tried to set an element at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (#3,#4)}% + \fi% + \ifnum\value{LP@countii}>\value{LP@countiv}% + \PackageError{#5}% + {element outside of the grid}% + {You tried to set an element at (#1,#2),\MessageBreak which is outside the grid (1,1) .. (#3,#4)}% + \fi% +}% +% +\newcommand*\titleformat[1]% +{% + \renewcommand*\LP@titleformat{#1}% +}% +\titleformat{\centering\Large\color{blue}}% +% +\newcommand*\puzzlecounter{\theLP@puzzlecounter}% +% +\newcommand*\setpuzzlecounter[1]% +{% + \setcounter{LP@puzzlecounter}{#1}% +}% +\newcommand*{\definecounterstyle}[2]% +{% + \expandafter\gdef\csname LP@cs@#1\endcsname{#2}% +}% +% +\definecounterstyle{none}{}% +\definecounterstyle{left}{\begingroup\reversemarginpar\marginnote{\tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt,draw,rounded corners=3pt,thick]{\Huge\puzzlecounter};}[-23pt]\endgroup}% +\definecounterstyle{right}{\marginnote{\tikz\node[shape=rectangle,fill=yellow!40,inner sep=7pt,draw,rounded corners=3pt,thick]{\Huge\puzzlecounter};}[-23pt]}% +% +% #1 grid x min +% #2 grid y min +% #3 grid x max +% #4 grid y max +% #5 step +\newcommand*\LP@drawgrid[5]% +{% + \setcounter{LP@counti}{#3}% max column + \setcounter{LP@countii}{#4}% max row + \stepcounter{LP@counti}% + \stepcounter{LP@countii}% + \draw[step=#5] (#1,#2) grid (\value{LP@counti},\value{LP@countii});% +}% +% +% #1 grid x min +% #2 grid y min +% #3 grid x max +% #4 grid y max +% #5 bgcolor +\newcommand*\LP@drawbackground[5]% +{% + \ifthenelse{\equal{#5}{}}% + {}% no bgcolor + {% + \setcounter{LP@counti}{#3}% max column + \setcounter{LP@countii}{#4}% max row + \stepcounter{LP@counti}% + \stepcounter{LP@countii}% + \draw[fill=#5] (#1,#2) rectangle (\value{LP@counti},\value{LP@countii});% + }% +}% +% +% #1 counterstyle +\newcommand*\LP@drawcounter[1]% +{% + \csname LP@cs@#1\endcsname% +}% +% +% #1 column +% #2 row +% #3 content +\newcommand*\LP@setcellcontent[3]% +{% + \node at (#1\LP@Pfive,#2\LP@Pfive){#3};% +}% +% +% #1 csv list +% #2 column +% #3 row +% #4 fontsize +\newcommand*\LP@setcolumncontents[4]% +{% + \setcounter{LP@counti}{#2}% + \setcounter{LP@countii}{#3}% + \forcsvlist\LP@setcolumncontents@i{#4#1}% +}% +% +\newcommand*\LP@setcolumncontents@i[1]% +{% + \LP@setcellcontent{\arabic{LP@counti}}{\arabic{LP@countii}}{#1}% + \stepcounter{LP@counti}% +}% +% +% #1 csv list +% #2 column +% #3 row +% #4 fontsize +\newcommand*\LP@setrowcontents[4]% +{% + \setcounter{LP@counti}{#2}% + \setcounter{LP@countii}{#3}% + \forcsvlist\LP@setrowcontents@i{#4#1}% +}% +% +\newcommand*\LP@setrowcontents@i[1]% +{% + \LP@setcellcontent{\arabic{LP@counti}}{\arabic{LP@countii}}{#1}% + \stepcounter{LP@countii}% +}% +% +\endinput% \ No newline at end of file -- cgit v1.2.3