Saturday, November 1, 2014

Animasi Permainan Catur dengan Xskak

Pengantar

Sejurus, tak aneh untuk Anda menyaksikan langkah-langkah permainan catur secara dinamis (bergerak) dari kedua pemain. Dalam jaringan (daring), pada situs tertentu yang melayani keperluan ini, Anda cukup menuliskan semua langkah dari suatu permainan (game) catur dalam notasi aljabar atau menempelkan (paste) Portable Game Notation (PGN) dari permainan tersebut. Kemudian dengan mengklik tombol panah yang tersedia Anda dapat menyaksikan pergerakan dari tiap langkah dalam permainan itu.

Di luar jaringan (luring), pada komputer, lebih dulu Anda harus memiliki file PGN untuk permainan catur yang akan Anda lihat. Untuk hal ini Anda memerlukan software catur semacam Arena, Fritz, atau sebangsanya. Anda juga dapat membuatnya secara daring melalui situs tertentu. Selanjutnya, dengan memuat (load) file PGN tersebut pada software komputer, Anda dapat membuka dan menyaksikan langkah-langkah permainan catur itu.

Sekarang, bagaimana bila Anda ingin melakukan hal-hal tersebut di atas pada file PDF? Mungkinkah Anda dapat menyaksikan langkah-langkah permainan catur secara dinamis dengan animasi pada file PDF? Tentu, Anda bisa! Anda dapat melakukannya dengan menggunakan $\small\LaTeX$.

Animasi Permainan Catur

Menurut Kamus Besar Bahasa Indonesia (KBBI),
animasi /ani·ma·si/ n acara televisi yang berbentuk rangkaian lukisan atau gambar yg digerakkan secara mekanik elektronis sehingga tampak di layar menjadi bergerak
Ketika saya menyusun dokumen terlampir di bawah ini secara daring melalui Online LaTeX Editor ShareLaTeX, muncul pesan berikut ini,
Timed out. Sorry, your compile took too long to run and timed out. This may be due to a large number of high-res images, or complicated diagrams.Learn how to make your document compile more quickly
Oleh karena itu saya alihkan penyusunannya dengan menggunakan TeX Live 2013 dan berjalan lancar.

Untuk membuat animasi permainan catur dengan menggunakan $\small\LaTeX$, Anda memerlukan tiga paket utama, yaitu xskak, chessboard, animate. Dalam pengantar untuk masing-masing paket tersebut dikatakan,
Xskak, sebagaimana fungsi utamanya, menyimpan informasi tentang permainan catur untuk penggunaan selanjutnya (misalnya, melakukan loop melalui suatu permainan (game) untuk menjadikan papan beranimasi). Paket ini juga memperluas masukan (input) sehingga perintah penguraian dapat mengatasi dan menawarkan antarmuka untuk menetapkan dan mengalihkan antartingkat tak terbatas dari corak mode (gaya).
Paket chessboard menyediakan perintah untuk mencetak papan catur. Dapat mencetak sebagian papan, menyembunyikan buah dan bidang, mewarnai papan, dan menempatkan berbagai tanda di atas papan. Paket ini memiliki banyak pilihan untuk menempatkan buah di atas papan. Memungkinkan penggunaan buah dengan corak yang khas (eksotis), misalnya, untuk problem catur.
Paket animate menyediakan sebuah antarmuka untuk menciptakan secara portabel, penggerak JavaScript untuk animasi pada PDF dari rangkaian file grafis atau dari grafis beruntun, seperti environment gambar LaTeX, PSTricks atau PGF/TikZ yang menghasilkan gambar, atau hanya dari susunan teks.
Contoh dokumen terlampir di bawah ini berdasarkan pada dokumentasi paket xskak halaman 35 – 36, tetapi saya gunakan notasi aljabar dalam bahasa Inggris (bukan bahasa Jerman sebagaimana tercantum dalam dokumentasi tersebut). Jika Anda ingin menggunakan penotasiannya dalam bahasa Jerman, Anda memerlukan paket fontenc:
\usepackage[LSBC4,T1]{fontenc}
\setboardfontencoding{LSBC4}%
\newskaklanguage{german}{KDTLSB}
\skaklanguage[german]%
Cara membuatnya cukup sederhana. Pertama, ikuti pengkodean yang tercantum pada dokumentasi paket sebagaimana tersebut di atas. Kedua, Anda harus menyiapkan notasi aljabar (file PGN) dari permainan yang akan Anda buatkan animasinya. Tempelkan (paste) notasi dari langkah-langkah permainan dalam perintah \mainline{...} atau \hidemoves{...}.

Penutup
Setelah dokumen selesai tersusun, ada satu hal yang sangat penting. Animasi dalam dokumen tersebut dapat ditampilkan hanya jika dokumen itu dibuka oleh Adobe Reader, karena penampil file PDF lainnya tidak memiliki pengaya untuk keperluan ini.

Berikut ini contoh pengkodean selengkapnya beserta dokumen yang dihasilkannya. (Anda juga dapat melihat contoh permainan saya lainnya pada tulisan saya di sini.)
Demikian semoga bermanfaat.

Adjie Gumarang Pujakelana 2014

\documentclass{article}
\usepackage[margin=1.5cm]{geometry}% http://ctan.org/pkg/geometry
\usepackage{flowfram}% http://ctan.org/pkg/flowfram
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{gentium}
\usepackage[indonesian]{babel}
\usepackage[utf8]{inputenc}
\usepackage{animate}
\usepackage{chessboard,xskak}
\definecolor{warna1}{HTML}{1E90FF}
\definecolor{warna2}{HTML}{F0E68C}
\definecolor{warna3}{HTML}{2F4F4F}
\usepackage[colorlinks]{hyperref}
\usepackage{tikz}
\usetikzlibrary{fadings,patterns}
% First page setup
\newstaticframe{\textwidth}{0.1\textheight}
  {0pt}{.9\textheight}[headertext]
\newdynamicframe[1]{0.30\textwidth}{0.85\textheight}
  {0pt}{0pt}[leftcolumn1]
\newdynamicframe[2]{0.30\textwidth}{0.85\textheight}
  {0pt}{0pt}[leftcolumn2]
\newdynamicframe[3]{0.30\textwidth}{0.85\textheight}
  {0pt}{0pt}[leftcolumn3]
\newflowframe{0.65\textwidth}{0.85\textheight}
  {0.35\textwidth}{0pt}[rightcolumn]

\begin{document}
\pagenumbering{gobble}

\begin{staticcontents*}{headertext}
Ini adalah contoh perpaduan dari dua paket, yaitu {\tt xskak} dan {\tt animate} yang menghasilkan suatu animasi pada permainan catur langkah demi langkah. 
\end{staticcontents*}

\begin{dynamiccontents*}{leftcolumn1}
  \centering\includegraphics[width=\linewidth]{mataraja}\par\bigskip
\raggedright  {\tt Xskak}, sebagaimana fungsi utamanya, menyimpan informasi tentang permainan catur untuk penggunaan selanjutnya (misalnya, melakukan \emph{loop} melalui suatu permainan ({\it game}) untuk menjadikan papan beranimasi). Paket ini juga memperluas masukan (\emph{input}) sehingga perintah penguraian dapat mengatasi dan menawarkan antarmuka untuk menetapkan dan mengalihkan antartingkat tak terbatas dari corak mode (gaya).

\bigskip
Paket {\tt animate} menyediakan sebuah antarmuka untuk menciptakan secara portabel, penggerak JavaScript untuk animasi pada PDF dari rangkaian {\it file} grafis atau dari grafis beruntun, seperti {\it environment} gambar \LaTeX, {\tt PSTricks} atau {\tt PGF/TikZ} yang menghasilkan gambar, atau hanya dari susunan teks.\par
\end{dynamiccontents*}

\begin{center}
\begin{tikzfadingfrompicture}[name=distress]
\node[text=transparent!0] {\it\Huge\textbf{Animasi pada Xskak}};
\end{tikzfadingfrompicture}
\begin{tikzpicture}
\fill[preaction={fill},pattern color=warna3,pattern=crosshatch dots] (-6,-1) rectangle (6,1);
\fill[pattern color=warna2,
  pattern=crosshatch,
  path fading=distress,
  fit fading=false
] (-5,-1) rectangle (5,1);

\end{tikzpicture}

\medskip
\setchessboard{boardfontsize=0.8cm,shortenend=5pt, margin=false}%
\skaklanguage[english]%
%
\newcommand\getmovestyle[1]{%
\ifthenelse
{\equal{#1}{N}}%knight move
{\def\mymovestyle{[clockwise=false,style=knight]curvemove}}
{\ifthenelse
{\equal{#1}{}}% castling
{\def\mymovestyle{curvemove}}
{\def\mymovestyle{straightmove}}}}%
%
\newchessgame[white=l_goch,black=Pujakelana,result=0--1,
id=anim]%
\hidemoves{1.e4 c6 2.d4 e5 3.dxe5 Qa5+ 4.Nc3 Qxe5 5.Nf3 Qc7 6.Bc4 h6 7.Bxf7+ Kxf7 8.O-O d6 9.Bf4 Bg4 10.e5 dxe5
 11.Nxe5+ Qxe5 12.Qxg4 Qe6 13.Qg3 Nd7 14.Rfe1 Qf5 15.Rad1 Ngf6 16.Be3 Bb4 17.Qc7 Rhc8 18.Qxb7 Bxc3 19.bxc3 Kg8 20.Bxa7 Rf8
 21.Be3 Nd5 22.Qxc6 Nxe3 23.fxe3 Qf2+ 24.Kh1 Rad8 25.Qc4+ Kh8 26.Qe2 Qxe2 27.Rxe2 Nc5 28.Rxd8 Rxd8 29.g4 Rd1+ 30.Kg2 Ra1
 31.e4 Rxa2 32.e5 Ne6 33.Kf3 Ra3 34.Re3 Ra4 35.h3 Kg8}%
%
\unitlength0.8cm\relax

\begin{animateinline}[autoplay,loop,controls]{0.5}%
\begin{picture}(11,11)
\put(1.5,1.5){\chessboard[setfen=\xskakgetgame{initfen}]}%
\end{picture}
\newframe
\xskakloop{%
\getmovestyle{\xskakget{piecechar}}%
\begin{picture}(11,11)
\put(1.5,1.5){%
\chessboard[pgfstyle=\mymovestyle, color=red!50!gray,
pgfshortenend=0.3em,arrow=to,
markmoves=\xskakget{move},
coloremph,piececolor=warna1,
emphfields={\xskakget{moveto}},
setfen=\xskakget{nextfen}]}%
\end{picture}%
\newframe}%
\begin{picture}(11,11)
\put(1.5,1.5){\chessboard[setfen=\xskakgetgame{lastfen}]}%
\end{picture}
\end{animateinline}

\vspace{1cm}
{\Large\it\color{warna3}\textcopyright\ Adjie Gumarang Pujakelana}
\end{center}

Animasi di atas adalah \href{http://www.chess.com/echess/game?id=51690733}{permainan saya} di chess.com dalam {\it team match} antargrup {\it October} melawan {\it Hobby Catur Indonesia} dengan kemenangan Hitam setelah 35 langkah sebagai berikut.

\begin{center}
    \textbf{l\textunderscore goch (2195) -- Pujakelana (1930)} \\
    \textit{From A to Z Big Match! 50+ Players, chess.com} \\
    \textit{25 Maret 2012} \\
    B12 -- Pertahanan Caro-Kann 
\end{center}

\newchessgame
\mainline{%
1.e4 c6 2.d4 e5 3.dxe5 Qa5+ 4.Nc3 Qxe5 5.Nf3 Qc7 6.Bc4 h6 7.Bxf7+ Kxf7 8.O-O d6 9.Bf4 Bg4 10.e5 dxe5
 11.Nxe5+ Qxe5 12.Qxg4 Qe6 13.Qg3 Nd7 14.Rfe1 Qf5 15.Rad1 Ngf6 16.Be3 Bb4 17.Qc7 Rhc8 18.Qxb7 Bxc3 19.bxc3 Kg8 20.Bxa7 Rf8
 21.Be3 Nd5 22.Qxc6 Nxe3 23.fxe3 Qf2+ 24.Kh1 Rad8 25.Qc4+ Kh8 26.Qe2 Qxe2 27.Rxe2 Nc5 28.Rxd8 Rxd8 29.g4 Rd1+ 30.Kg2 Ra1
 31.e4 Rxa2 32.e5 Ne6 33.Kf3 Ra3 34.Re3 Ra4 35.h3 Kg8}\quad  0 -- 1

\end{document}



No comments:

Related Posts Plugin for WordPress, Blogger...