\section{Jugadores y perfiles}
\label{sec:jugadores}

Cada piedra, jugada y marca pertenece a uno de tres jugadores: el primero (|black|), el segundo (|white|) o el neutral (|neutral|). Su aspecto no está en cada comando sino en el jugador: el árbol de \emph{keys} de cada uno reúne las opciones de sus piedras, sus jugadas, sus marcas y su territorio, que en las secciones anteriores aparecen bajo |stone|, |move| y |mark|. Aquí están los jugadores y, después, los perfiles.

\subsection{Jugadores}

Las opciones del tablero se cambian con |\pgfgoset{goban = {...}}|. Las de los jugadores, con estas \emph{keys}:

\begin{key}{/pgfgo/players = \meta{players options}}
	Opciones de los jugadores: |neutral|, |black| y |white|. No hay que confundir jugadores con perfiles: un perfil se carga en los jugadores, y después estas \emph{keys} los cambian.
\end{key}

Las opciones de los jugadores pueden configurarse todas juntas con la \emph{key} |all|, o por separado. Los cambios realizados aquí no afectarán la definición de los perfiles. Es decir, si cargamos el perfil |pgfgo| y modificamos al jugador negro, esto no afectar\'a a la definici\'on de |pgfgo-black|, sino que a las opciones propias del jugador primero.

\begin{key}{/pgfgo/players/all = \meta{all player options}}
	Aplica las opciones a los tres jugadores.
\end{key}

\begin{key}{/pgfgo/players/neutral = \meta{neutral player options}}
	Opciones del jugador neutral (las piedras sin jugador).
\end{key}

\begin{key}{/pgfgo/players/black = \meta{first player options}}
	Opciones del primer jugador.
\end{key}

\begin{key}{/pgfgo/players/white = \meta{second player options}}
	Opciones del segundo jugador.

	\begin{codeexample}[width=4cm]
		\pgfgoset{players = {
			all = {stone = {line = {color = red}}},
			neutral = {stone = {fill = {color = yellow}}},
			black = {stone = {fill = {color = blue!60!black}}}}}

		\begin{goban}[3]
			\stones[b]{A1, B2}
			\stones[w]{C3}
			\stone{A3}
		\end{goban}
	\end{codeexample}
\end{key}

Para no escribir la ruta completa, hay cuatro comandos:

\begin{command}{\pgfgosetplayer\marg{player}\marg{player options}}
	Es lo mismo que |\pgfgoset{players = {<player> = {<player options>}}}|.
\end{command}

\begin{command}{\pgfgosetallplayers\marg{player options}}
	Aplica las opciones a los tres jugadores. Es lo mismo que |\pgfgoset{players = {all = {...}}}|.

	\begin{codeexample}[width=4cm]
		\pgfgosetallplayers{stone = {radius = 0.3cm}}
		\pgfgosetplayer{white}{stone = {fill = {color = orange}}}

		\begin{goban}[3]
			\stones[b]{A1, B2}
			\stones[w]{C3}
			\stone{A3}
		\end{goban}
	\end{codeexample}
\end{command}

\begin{command}{\pgfgocopyplayer\marg{target player}\marg{source player}}
	Copia las opciones actuales de |source player| en |target player|.

	\begin{codeexample}[width=3cm]
		\pgfgocopyplayer{neutral}{white}

		\begin{goban}[partial = A1:C3]
			\stone{B2} % Neutral, pero con el aspecto de las blancas.
			\stones[b]{A1,C3}
		\end{goban}
	\end{codeexample}
\end{command}

\begin{command}{\pgfgocopyplayers\marg{neutral source}\marg{black source}\marg{white source}}
	Copia, en este orden, |neutral source| en el jugador neutral, |black source| en el negro y |white source| en el blanco (con |\pgfgocopyplayer|). Como las copias se hacen una tras otra, no sirve para intercambiar jugadores.

	\begin{codeexample}[width=4cm]
		\pgfgocopyplayers{neutral}{white}{black}
		% No intercambia: las dos son blancas.

		\begin{goban}[3]
			\stones[b]{A1, B2}
			\stones[w]{C3}
		\end{goban}
	\end{codeexample}
\end{command}

\label{subsec:jugadores}Cada jugador tiene el mismo árbol de \emph{keys}. Cada rama se documenta con el objeto al que se aplica, sin el jugador en la ruta: para el jugador blanco, |/pgfgo/stone/radius| es |/pgfgo/players/white/stone/radius|. Las tres ramas de abajo, aunque mencionen |white|, valen para los tres jugadores.

\begin{key}{/pgfgo/players/white/stone = \meta{stone options}}
	Opciones de sus piedras y de sus prisioneros (pág.~\pageref{sec:piedras}).
\end{key}

\begin{key}{/pgfgo/players/white/move = \meta{move options}}
	Opciones de sus jugadas (pág.~\pageref{subsec:movimientos}).
\end{key}

\begin{key}{/pgfgo/players/white/mark = \meta{mark options}}
	El estilo de sus marcas (pág.~\pageref{sec:marcas}). La forma (|triangle|, |custom|, \dots) no es parte del estilo: va en las opciones de cada marca (como en |\marks[w, custom = {?}]{A3}|) o en |/pgfgo/mark|. Dentro de |\pgfgoset{players = ...}| da error.
\end{key}

La cuarta rama, |territory|, es el estilo de su territorio (pág.~\pageref{subsec:territorio}).


\subsection{Perfiles}
\label{subsec:perfiles}

Los perfiles son equivalentes a los estilos de \tikzname. En resumen, permiten guardar una configuración de tablero y piedras con un nombre y llamarla cuando se desee.

\begin{command}{\pgfgodefinegoban\opt{\oarg{options}}\marg{goban name}\marg{goban options}}
	Le da un nombre a un grupo de opciones de |goban|. Tiene dos opciones.
	
	\begin{key}{/pgfgo/profiles/goban/from = \meta{goban name}}
		Define el goban a partir de una copia de otro.
		\begin{codeexample}[code only]
			\pgfgodefinegoban[from = gobanA]{gobanB}{...}
		\end{codeexample}
		
		Es posible copiarse a sí mismo para añadir opciones, aunque no es la mejor alternativa.
		\begin{codeexample}[code only]
			\pgfgodefinegoban[from = gobanB]{gobanB}{...}
		\end{codeexample}
	\end{key}
	
	\begin{key}{/pgfgo/profiles/goban/append}
		Agrega opciones a un goban ya definido.
		\begin{codeexample}[code only]
			\pgfgodefinegoban[append]{gobanB}{...}
		\end{codeexample}
		Es equivalente a:
		\begin{codeexample}[code only]
			\pgfgodefinegoban[from = gobanB]{gobanB}{...}
		\end{codeexample}
	\end{key}
\end{command}

\begin{command}{\pgfgodefineplayer\opt{\oarg{options}}\marg{player name}\marg{player options}}
	Lo mismo, para un jugador. Sus opciones son las de |\pgfgodefinegoban|.

	\begin{key}{/pgfgo/profiles/player/from = \meta{player name}}
		Define el jugador a partir de una copia de otro.
	\end{key}

	\begin{key}{/pgfgo/profiles/player/append}
		Amplía las opciones de un jugador ya definido. Es lo mismo que |from = |\meta{player name} con su propio nombre.
	\end{key}
\end{command}

\begin{key}{/pgfgo/profile = \meta{name}}
	Aplica el perfil |name|: el goban |name| y los jugadores |name-neutral|, |name-black| y |name-white|. Se usa en |\pgfgoset|, en las opciones de un |goban| y en las de una vista (p.~\pageref{subsec:vistas}).

	Antes de aplicarlo, el tablero y los jugadores vuelven al estilo inicial (el del perfil |default|): así un perfil no hereda lo que no define, y una sombra o una imagen puesta antes se pierde. Lo que no es estilo queda como estaba: el tamaño, |partial|, |scale|, dónde van las coordenadas y cuáles son, |hoshi/at|, las capturas y las notas. Lo que va después del perfil se suma a él.

	\begin{codeexample}[width=3cm]
		\pgfgoset{stone = {shadow}}
		\begin{goban}[3, profile = default]
			\stones[b]{A1, B2}
			\stones[w]{C3}
		\end{goban}
	\end{codeexample}

	Es necesario que existan el goban |name| y los jugadores |name-neutral|, |name-black| y |name-white|. Por ejemplo, |profile = pgfgo| funciona porque existe un goban llamado |pgfgo|, y jugadores llamados |pgfgo-neutral|, |pgfgo-black| y |pgfgo-white|.
\end{key}

\begin{key}{/pgfgo/goban profile = \meta{goban name}}
	Aplica solo el goban |goban name|, después de volver el tablero al estilo inicial.
\end{key}

\begin{key}{/pgfgo/players profile = \meta{name}}
	Aplica solo los jugadores |name-neutral|, |name-black| y |name-white|, cada uno después de volver al estilo inicial.

	\begin{codeexample}[]
		\begin{goban}[3, goban profile = pgfgo]
			\stones[b]{A1, B2}
			\stones[w]{C3}
		\end{goban}

		\begin{goban}[3, players profile = pgfgo]
			\stones[b]{A1, B2}
			\stones[w]{C3}
		\end{goban}
	\end{codeexample}
\end{key}

\begin{key}{/pgfgo/players/black/profile = \meta{player name}}
	Aplica el jugador |player name| a uno de los jugadores (|neutral|, |black| o |white|), después de volverlo al estilo inicial. Con |all|, el mismo a los tres.
	\begin{codeexample}[code only]
		\pgfgoset{goban profile = pgfgo, players = {black = {profile = wain-black}}}
	\end{codeexample}
\end{key}

\begin{codeexample}[width=3cm]
	\pgfgodefinegoban{example}{background = {fill = {color = blue!05}}}
	\pgfgodefineplayer[from = default-neutral]{example-neutral}
	{stone = {
			fill = {color = gray},
			line = {color = magenta!20!black}}
	}
	
	\pgfgodefineplayer[from = example-neutral]{example-white}
	{stone = {fill = {color = yellow}}}
	
	\pgfgodefineplayer[from = example-neutral]{example-black}
	{stone = {fill = {color = blue}}}
	
	\pgfgoset{profile = example}
	
	\begin{goban}[partial = A1:C3]
		\moves[numbers = false]{A1:3}
		\stones[b]{B1,B3,C2}
		\stones[w]{C1,C3}
		\stone{B2}
	\end{goban}
\end{codeexample}

\begin{command}{\pgfgodefineprofile\opt{\oarg{options}}\marg{name}\marg{profile options}}
	Define de una vez un perfil completo para |profile|: el goban |name| y los jugadores |name-neutral|, |name-black| y |name-white|. Es lo mismo que el ejemplo de arriba, en un solo comando.

	\begin{codeexample}[width=3cm]
		\pgfgodefineprofile[from = default]{ejemplo2}{
			goban = {background = {fill = {color = blue!05}}},
			all = {stone = {line = {color = magenta!20!black}}},
			white = {stone = {fill = {color = yellow}}},
			black = {stone = {fill = {color = blue}}}}

		\pgfgoset{profile = ejemplo2}

		\begin{goban}[partial = A1:C3]
			\moves[numbers = false]{A1:3}
			\stones[b]{B1,B3,C2}
			\stones[w]{C1,C3}
			\stone{B2}
		\end{goban}
	\end{codeexample}

	\begin{key}{/pgfgo/profiles/profile/goban = \meta{goban options}}
		Las opciones del goban.
	\end{key}

	\begin{key}{/pgfgo/profiles/profile/all = \meta{player options}}
		Opciones de los tres jugadores. Van antes de las de cada uno.
	\end{key}

	\begin{key}{/pgfgo/profiles/profile/neutral = \meta{player options}}
		Opciones del jugador neutral.
	\end{key}

	\begin{key}{/pgfgo/profiles/profile/black = \meta{player options}}
		Opciones del jugador negro.
	\end{key}

	\begin{key}{/pgfgo/profiles/profile/white = \meta{player options}}
		Opciones del jugador blanco.
	\end{key}

	\begin{key}{/pgfgo/profiles/profile/from = \meta{profile name}}
		Opción del comando: cada parte empieza con la del perfil \meta{profile name} (el goban \meta{profile name}, el jugador \meta{profile name}|-neutral|, etc.).
	\end{key}
\end{command}
