導入

導入 – 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 のみ) などの必要な情報を取得したり、 ゲームが終了したかどうかを調べたりといったことを行うには、 以下のいずれかのメソッドを使用します。

  • gameOver()。 このメソッドを使用して、ゲームが終了したかどうかを調べます。 白が勝った (チェックメイト) 場合に W、 黒が勝った (チェックメイト) 場合に B、 引き分けの場合に D、 そしてゲームがまだ進行中の場合に false を返します。

  • renderFen()

    このメソッドは、Forsyth-Edwards Notation (FEN) 形式で現在のゲームの状態を返します。FEN では、 持ち駒を表す方法がないことに注意しましょう。そのため、 現在進行中の Crazyhouse のゲームを完全に再現することはできません。

  • toArray()

    Standard ドライバおよび Loser's chess ドライバでは、 これは代数的なマスの位置 (a1 から h8) にその内容を対応させた連想配列を返します。その位置に何も駒がない場合は、 礼装配列の値はそのマスの名前になり (たとえば a1 に対応する値は a1 となります)、 それ以外の場合は駒の名前が値となります。駒の名前は PRNBQ あるいは K のいずれかです。 駒の色が白の場合は P のように大文字で表し、 黒の場合は p のように小文字で表します。

    Crazyhouse ドライバでは、これは 2 つのキー board および captured を持つ連想配列を返します。board の値は、先の段落で説明した Standard/Loser's chess ドライバの場合の返り値と同じ内容です。 captured の中には、このような形式の配列が含まれます。

    <?php
    $captured 
    =
        array(
            
    'W' =>
                array(
                    
    'P' => 6// 白は、黒のポーンを 6 個取っています
                    
    'R' => 0,
                    
    'N' => 0,
                    
    'B' => 0,
                    
    'Q' => 0,
                ),
            
    'B' =>
                array(
                    
    'P' => 4// 黒は、白のポーンを 4 個取っています
                    
    'R' => 0,
                    
    'N' => 0,
                    
    'B' => 0,
                    
    'Q' => 0,
                ),
        );
    ?>

    最初の要素が白か黒か (W および B) を表し、 その配下の要素が各種類の持ち駒の数を表します。 上の例では、白はあと 6 回ポーンを打つことができます。 また、黒はあと 4 回ポーンを打つことができます。

  • toMove()

    このメソッドは、次がどちらの番なのかを返します。 W の場合は白番、B の場合は黒番です。

Games_Chess (Previous) Structures_Graph (Next)
Last updated: Wed, 23 Apr 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.