We use a \foreach loop that takes the number of positions in each row as the loop list. For the standard chinese checkers boards, that could look like \foreach \m [count=\count] in {1,…,4,13,12,…,9,10,11,…,13,4,3,…,1}.
If you systematically name the nodes you create in this loop, you’ve got a very nice framework for drawing Chinese Checkers setups and moves. I’ve written a couple of macros and styles for this.
The command \checkerboard[checkerboard labels] will draw a blank board with the fields labeled
We can then place pieces using
\placepieces[
and show moves using
\showmove{
\documentclass[tikz,border=10pt]{standalone} \usetikzlibrary{backgrounds,decorations} \begin{document} \begin{tikzpicture} \newif\ifcheckerboardlabels \tikzset{ pieces/.style={ fill, circle, minimum size=0.5cm }, positions/.style={ fill=black!5, draw=gray, solid, circle, minimum size=0.6cm, inner sep=0pt, }, checkerboard labels/.is if=checkerboardlabels, checkerboard labels/.default=true, move/.style={ -latex, densely dashed, very thick, bend right=45 } } \newcommand{\checkerboard}[1][]{ \begin{scope}[#1] \foreach \m [count=\count] in {1,...,4,13,12,...,9,10,11,...,13,4,3,...,1}{ \foreach \n in {1,...,\m} \node at (\n-\m/2,\count) [ positions, name=pos-\count-\n, outer sep=0.5cm, label=center:{\ifcheckerboardlabels \count-\n\fi}] {}; } \begin{pgfonlayer}{background} \draw [gray,thick,rounded corners=0.4cm,fill=yellow!30] (pos-1-1.240) -- (pos-5-5.240) -- (pos-5-1.240) -- (pos-5-1.180) -- (pos-9-1.180) -- (pos-13-1.180) -- (pos-13-1.120) -- (pos-13-5.120) -- (pos-17-1.120) -- (pos-17-1.60) -- (pos-13-9.60) -- (pos-13-13.60) -- (pos-13-13.0) -- (pos-9-9.0) -- (pos-5-13.0) -- (pos-5-13.300) -- (pos-5-9.300) -- (pos-1-1.300) -- cycle; \end{pgfonlayer} \end{scope} } \newcommand{\placepieces}[2][]{ \begin{scope}[#1] \foreach \checker in {#2} { \node [pieces,#1] at (pos-\checker) {}; } \end{scope} } \newcommand{\showmove}[2][]{ \begin{scope}[#1] \foreach \position [remember = \position as \previousposition,count=\count] in {#2}{ \ifnum \count=1 \node at (pos-\position.center) [positions,black,ultra thick,fill=none] {}; \else \draw [move] (pos-\previousposition.center) to (pos-\position.center); \fi } ; \end{scope} } \checkerboard \placepieces[red!75!yellow]{1-1,2-1,2-2,3-1,3-2,3-3,4-1,4-2,5-8,7-7} \placepieces[blue!75]{17-1,16-2,15-1,15-2,15-3,14-3,14-4,13-6,11-6,10-6} \showmove{2-1,4-3,6-8,8-6} \showmove{17-1,16-1} \end{tikzpicture} \end{document}