akhr.net
TOP
コンピュータ将棋およびコンピュータ全般について

CSA コンピュータ将棋選手権使用可能ライブラリ
ライブラリ名:slib.libver.1.0.0.0 (コンピュータ将棋用合法手出力ライブラリ)
LHA 圧縮されています。解凍して使用してください。
library name:slib.lib (The GOUHOUSHU output library for computer shogi)
重要: slib.lzh(バージョン 1.0.0.0)ファイルを解凍して出来る,
readme_slib.txt ファイルの中身に誤りがありました。
持ち駒の座標が 1 以上の数を指定するように書いていますが,
実際にこの数値を入れると終了してしまいます。
X と Y ともに 0 を入れてください。
誤り例:H511
正しい例:H500
なお,次のバージョンで持ち駒の座標に 0 以上を指定する仕様になります。
今後のバージョンアップでより使いやすくしていきますので,よろしくお願いいたします。

【ファイル名】
slib.lib

【製作者】
茨城大学大学院 博士前期課程 応用粒子線科学専攻 柾谷明大

【バージョン】
1.0.0.0

【利用条件】
コンピュータ将棋協会が開催する大会での使用についてのみ無料で許可。
本ライブラリ使用者の不利益については製作者は責任を持たない。

【使用上の注意】
このバージョンでは合法手として,将棋本来の規則とは違って,
「個別の駒に着目したその駒の移動可能な手」と定義しました。
これは「ある局面において一つの駒単体で考えたときに,その駒が移動できる手」
ということであり,自殺手・王手放置手・打ち歩詰め・連続王手千日手等も生成します。

【機能】
局面(盤上と駒台)を与えると合法手のリスト log.txt を出力するスタティックライブラリ。
駒落ちの局面には未対応。

【開発環境】
Visual C .NET 2003

【関数】
int check_move(char* t, koma* k);

【関数機能】
局面情報から個別駒の移動可能手のリスト log.txt を出力する。

【関数引数】
t		IN。160 バイトの局面情報。
k		未使用。koma 構造体。

struct koma{
 char k[5000][5];
 int  max;
};


【関数戻り値】
0		正常。
0 以外		異常。

【仕様】
駒情報
駒種類 1 バイト,駒状態 1 バイト,駒 X 位置 1 バイト,駒 Y 位置 1 バイト
の計 4 バイトで作られる 1 つの駒情報。

駒種類 1 バイト
H	歩
Y	香車
E	桂馬
G	銀
I	金
S	飛車
A	角
O	王

駒状態 1 バイト
0	ユーザの駒,盤面,成っていない
1	ユーザの駒,盤面,成っている
2	ユーザの駒,持駒
3	コンピュータの駒,盤面,成っていない
4	コンピュータの駒,盤面,成っている
5	コンピュータの駒,持駒

駒 X 位置 1 バイト
盤上の最も左の列から 1,2,3,4,5,6,7,8,9

駒 Y 位置 1 バイト
盤上の最も上の列から 1,2,3,4,5,6,7,8,9


持ち駒は横 9 列,縦 5 列のテーブルに駒 X 位置 1 バイト,駒 Y 位置 1 バイトで表す。
最も左の列から 1,2,3,4,5,6,7,8,9
最も上の列から 1,2,3,4,5


局面情報仕様
駒情報として 1 つの駒につき 4 バイト使用し,
40 個の駒を 160 バイトで表現するユニークな局面情報。

4 バイトで構成される駒情報 40 個の並びは以下の仕様でソートする。
駒状態,駒種類,駒 X 位置,駒 Y 位置 の順に優先してソート。
駒状態は小さい数が優先。
駒種類は H,Y,E,G,I,S,A,O の順で優先。
位置は X が優先で,小さい数が優先。

局面情報仕様例
開始局面情報は次のとおり。
H017H027H037H047H057H067H077H087H097Y019Y099E029E089G039G079I049I069S088A028O059H313H323H333H343H353H363H373H383H393Y311Y391E321E381G331G371I341I361S322A382O351

log.txt 仕様
log.txt ファイルデータの空行から空行までが 1 つの駒の移動可能情報。
はじめの空行の直後の 1 行が 4 バイト駒情報。この行の下から次の空行までがこの駒が移動可能な場所をあらわす。
たとえば, 
=====

H017
H016

=====
とあれば,「ユーザ盤上駒の9七にある歩は9六にのみ移動できる」ことを指す。

【log.txt 例】
開始局面を check_move 関数に渡して出力された log.txt の中身は以下のようになる。
===== この下の行から =====

H017
H016

H027
H026

H037
H036

H047
H046

H057
H056

H067
H066

H077
H076

H087
H086

H097
H096

Y019
Y018

Y099
Y098

E029

E089

G039
G038
G048

G079
G078
G068

I049
I048
I038
I058

I069
I068
I058
I078

S088
S098
S078
S068
S058
S048
S038

A028

O059
O058
O048
O068

H313
H314

H323
H324

H333
H334

H343
H344

H353
H354

H363
H364

H373
H374

H383
H384

H393
H394

Y311
Y312

Y391
Y392

E321

E381

G331
G332
G342

G371
G372
G362

I341
I342
I332
I352

I361
I362
I352
I372

S322
S332
S342
S352
S362
S372
S312

A382

O351
O352
O342
O362


===== この上の行まで =====

【関数使用例】
slib.lib をプロジェクトに追加して,以下のように使用します。

struct koma{
 char k[5000][5];
 int  max;
};
int check_move(char* t, koma* k);
int main(){
int ret;
koma k;
ret=check_move("H017H027H037H047H057H067H077H087H097Y019Y099E029E089G039G079I049I069S088A028O059H313H323H333H343H353H363H373H383H393Y311Y391E321E381G331G371I341I361S322A382O351", &k);
return(0);
}

実行すると,log.txt が出来ますので,開いて使用してください。
重要:持ち駒の X と Y はともに 0 を指定してください。

柾谷明大
Akihiro MASAYA
e-mail:akhrm@yahoo.co.jp
Copyright (C) 2004-2005 akihiro masaya .net