HanGame to CSA 変換

勢いで作り始めた「HanGame to CSA 変換」が,なんとなくできたぽい.
さっきの棋譜を変換してみた.

ちなみに,私が後手(上から下向きに指していく側).
負けるほうね(^^;).







とりあえず,入力ファイル名がハードコーディングしてあるけれども,変換スクリプトを貼っておきます.
あとでオンライン・コンバータにして,Web 上で稼動させると思う.

あと,フラ盤に CSA 形式の棋譜を与えるときは,リストファイル経由の フラ盤Multi でないとエラーになるっぽい.
まだ,ちゃんと追求していないので,私の勘違いかもしれない.



#!/usr/bin/perl

use CGI;
use Jcode;

$han="kifu-20080424225456.txt";
$csa=$han . ".csa";

open(IN, "$han");
open(OUT, ">$csa");

$line = &rd;
&wr("'" . $line);

$line = &rd;
&wr("'" . $line);

# 開始日時
$line = &rd;
$csa_line = $line;
$csa_line =~ s/開始日時://g;
$csa_line =~ s/\(.*\)//g;
&wr("\$START_TIME:" . $csa_line);

# 終了日時
$line = &rd;
$csa_line = $line;
$csa_line =~ s/終了日時://g;
$csa_line =~ s/\(.*\)//g;
&wr("\$END_TIME:" . $csa_line);


# 手合割
$line = &rd;
$teai =~ s/手合割://g;
&wr("'" . $line);
$teai = $line;


# 先手
$line = &rd;
$csa_line = $line;
$csa_line =~ s/先手:/N+/g;
&wr($csa_line . "\n");

# 後手
$line = &rd;
$csa_line = $line;
$csa_line =~ s/後手:/N-/g;
&wr($csa_line . "\n");


&write_initial_position;

# "手数----指手---------消費時間--" を読み飛ばす
$line = &rd;
&wr("'" . $line);


# 指し手を変換しつつ書き出していく
$sengo = "+";
while( $line = ){
chomp($line);
$line = Jcode->new( $line, "sjis")->euc;

$line =~ s/[ ]*[0-9]*[ ]//g;

$line =~ s/1/1/g;
$line =~ s/2/2/g;
$line =~ s/3/3/g;
$line =~ s/4/4/g;
$line =~ s/5/5/g;
$line =~ s/6/6/g;
$line =~ s/7/7/g;
$line =~ s/8/8/g;
$line =~ s/9/9/g;
$line =~ s/0/0/g;

$line =~ s/一/1/g;
$line =~ s/二/2/g;
$line =~ s/三/3/g;
$line =~ s/四/4/g;
$line =~ s/五/5/g;
$line =~ s/六/6/g;
$line =~ s/七/7/g;
$line =~ s/八/8/g;
$line =~ s/九/9/g;

$line =~ s/打/(00)/g;

$line =~ s/歩成/TO/g;
$line =~ s/と/TO/g;

$line =~ s/香成/NY/g;
$line =~ s/成香/NY/g;

$line =~ s/桂成/NK/g;
$line =~ s/成桂/NK/g;

$line =~ s/銀成/NG/g;
$line =~ s/成銀/NG/g;

$line =~ s/角成/UM/g;
$line =~ s/馬/UM/g;
$line =~ s/飛成/RY/g;
$line =~ s/竜/RY/g;

$line =~ s/歩/FU/g;
$line =~ s/香/KY/g;
$line =~ s/桂/KE/g;
$line =~ s/銀/GI/g;
$line =~ s/金/KI/g;
$line =~ s/角/KA/g;
$line =~ s/飛/HI/g;
$line =~ s/王/OU/g;
$line =~ s/玉/OU/g;


$line =~ s/([0-9][0-9][A-Z][A-Z])\(([0-9][0-9])\)\(([0-9]*):([0-9][0-9])\/[0-9][0-9]:[0-9][0-9]:[0-9][0-9]\)//g;

&wr($sengo . $2 . $1 . "\n");
&wr("T");
&wr($3 * 60 + $4);
&wr("\n");

if ($sengo eq "+") {
$sengo = "-";
}
else {
$sengo = "+";
}
}

close IN;
close OUT;

#====== メインルーチン ここまで


sub rd {
$line = ;
chomp($line);
$line = Jcode->new( $line, "sjis")->euc;
}


sub wr {
($line) = @_ ;
$line = Jcode->new( $line, "euc")->sjis;

print OUT $line;
}


sub write_initial_position {
&wr("P1-KY-KE-GI-KI-OU-KI-GI-KE-KY\n");
&wr("P2 * -HI * * * * * -KA * \n");
&wr("P3-FU-FU-FU-FU-FU-FU-FU-FU-FU\n");
&wr("P4 * * * * * * * * * \n");
&wr("P5 * * * * * * * * * \n");
&wr("P6 * * * * * * * * * \n");
&wr("P7+FU+FU+FU+FU+FU+FU+FU+FU+FU\n");
&wr("P8 * +KA * * * * * +HI * \n");
&wr("P9+KY+KE+GI+KI+OU+KI+GI+KE+KY\n");
&wr("+\n");
}

1;



--

HanGame の棋譜の形式
http://cancoffee2.at.webry.info/200804/article_76.html

アニメーション付棋譜再現プレーヤー 「フラ盤」
http://cancoffee2.at.webry.info/200804/article_74.html

この記事へのコメント

2008年04月28日 01:33
はじめまして。「フラ盤」作者です。私のサイトにコメント&各種情報いただきありがとうございました。

>フラ盤に CSA 形式の棋譜を与えるときは,リストファイル経由の フラ盤Multi でないとエラーになるっぽい.
デバッグはまだできていませんが、現象から察すると間違いないです。近々修正します。

Hangame棋譜はKIF形式の棋譜のようですが、CSAへのオンラインコンバータはとても意義があります。どうもありがとうございます。
2008年05月01日 23:11
Fireworks さん,こちらにもコメントをくださってありがとうございます.
フラ盤は,Multi のほうで実用になっていますので,Single のほうのデバッグは気長にお待ちしています.

Hangame の棋譜は,拡張子は .txt なものの,中身は KIF 形式だったのですね!
無事にフラ盤で表示できました.
ありがとうございます!

http://noike.info/~kenzi/cgi-bin/han2csa/demo/index2.html