導入

導入 --  Games_Chess の基本的な使用法

Games_Chess とは?

Games_Chess は、チェスを検証したり プレイしたりするための基本的なインターフェイスを提供します。 Games_Chess は、チェスの主要なルールをすべて扱うことができます。 チェック・チェックメイト・ステイルメイト・基本的な引き分けパターン (ビショップ+キング 対 キングなど)・50 手ルール・アンパッサン・ キャスリング・ポーンが最初だけ 2 マス進めること などをサポートしています。 さらに、Games_Chess は Forsyth-Edwards Notation (FEN) を使用して盤を準備したり Standard Algebraic Notation (SAN) 形式で棋譜を出力することができます。 また、妥当な SAN 形式をパースすることができます (たとえば Qa3xf3 のようなあいまいな形式でも可能です) し、単純な "move the piece on a3 to h3" 形式のコマンドもサポートします。

Games_Chess の使い方は?

The Games_Chess パッケージにはデモ用のファイルが含まれています。 構文をハイライトさせたソースが ここ で見られます。

Games_Chess パッケージには三種類のドライバが含まれます。 ひとつは標準的なチェスをプレイするためのもので、他のふたつは Internet Chess Club (ICC) で人気の変則版をプレイするためのものです。

  1. Crazyhouse。 Crazyhouse は、 敵から取った駒を自分の駒として使用することができます。 これは、激しいやり取りが行われる非常に戦術的なゲームです。

  2. Loser's Chess。 Loser's chess はチェッカーと似ています。駒が取れる場合は必ず取らなければなりません。 このため、動きがある程度限定されてしまうため、 結果としてゲームが高速に進みます。

Games_Chess の基本的な使い方は単純です。 三種類のドライバを初期化するサンプルスクリプトを示します。

<?php
require_once 'Games/Chess/Standard.php';
require_once 'Games/Chess/Crazyhouse.php';
require_once 'Games/Chess/Losers.php';
$standard = new Games_Chess_Standard;
$crazyhouse = new Games_Chess_Crazyhouse;
$losers = new Games_Chess_Losers;
?>
デフォルトでは、Games_Chess ドライバは何もない盤を作成します。 駒を初期位置に並べるには、このコードを使用します。
<?php
require_once 'Games/Chess/Standard.php';
$standard = new Games_Chess_Standard;
$standard->resetGame();
?>
FEN 記法で指定した配置で駒を置きたい場合は、FEN 文字列を resetGame() に渡します。
<?php
require_once 'Games/Chess/Standard.php';
$standard = new Games_Chess_Standard;
$standard->resetGame('rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2');
?>

Games_Chess で駒を動かす方法

Games_Chess で駒を動かすための基本的なメソッドは moveSANmoveSquare です。これらのメソッドは、どちらも TRUE あるいはエラー時に PEAR_Error クラスを返します。 そこで、返り値の扱いかたは次のようになります。
<?php
require_once 'Games/Chess/Standard.php';
$standard = new Games_Chess_Standard;
$err = $standard->moveSAN('Nf9');
if ($standard->isError($err)) {
    echo $err->getMessage();
    die;
}
?>
Games_Chess->isError() を使用していることに注意しましょう。 これにより、必要なときにのみ PEAR_Error を読み込むことになり、効率がよくなります。効率が大した問題ではない場合は (問題になるのは、一秒間に数千ページを処理するようなサイトくらいでしょう)、 PEAR_Error コールバックを使うほうが簡単です。 これについては次の例で説明します。

以下の例では、Games_Chess で盤上の駒を動かす方法、 Crazyhouse で新たな駒を配置する方法を示します。
<?php
require_once 'PEAR.php'; // PEAR_Error クラス用
function showerror($err)
{
    echo $err->getMessage();
    exit;
}
require_once 'Games/Chess/Standard.php';
require_once 'Games/Chess/Crazyhouse.php';
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'showerror');
$standard = new Games_Chess_Standard;
$crazyhouse = new Games_Chess_Crazyhouse;
$standard->resetGame();
$crazyhouse->resetGame();

$standard->moveSAN('e4'); // moveSquare を使用するのなら 'e2' to 'e4'
$standard->moveSquare('d7', 'd5'); // moveSAN を使用するのなら 'd5'
$standard->moveSAN('exd5');

$crazyhouse->moveSquare('e2', 'e4'); // 上の moveSAN() と同じ
$crazyhouse->moveSAN('d5'); // 上の moveSquare と同じ
$crazyhouse->moveSAN('exd5');
$crazyhouse->moveSAN('Qxd5');
$crazyhouse->moveSAN('P@d7'); // 駒を配置します
?>
ポーンが成る場合は、moveSquare() で駒の型を指定しなければなりません。 Q はクイーン、 R はルーク、B はビショップ、 そして N はナイトを表します。
<?php
require_once 'PEAR.php'; // PEAR_Error クラス用
function showerror($err)
{
    echo $err->getMessage();
    exit;
}
require_once 'Games/Chess/Crazyhouse.php';
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'showerror');
$crazyhouse = new Games_Chess_Crazyhouse;
$crazyhouse->resetGame();
$crazyhouse->moveSAN('e4');
$crazyhouse->moveSAN('d5');
$crazyhouse->moveSAN('exd5');
$crazyhouse->moveSAN('Qxd5');
$crazyhouse->moveSAN('d3');
$crazyhouse->moveSAN('Kd7');
$crazyhouse->moveSAN('d4');
$crazyhouse->moveSAN('Ke6');
$crazyhouse->moveSAN('P@d7');
$crazyhouse->moveSAN('Qd6');
// $crazyhouse->moveSAN('d8=Q'); // 通常の方法
$crazyhouse->moveSquare('d7', 'd8', 'Q'); // moveSquare を使用する方法
// ポーンをクイーンに成らせます
?>

進行中のゲームの情報の取得

現在までの駒の動きや現在の FEN、持ち駒の一覧 (Crazyhouse のみ) などの必要な情報を取得したり、 ゲームが終了したかどうかを調べたりといったことを行うには、 以下のいずれかのメソッドを使用します。