|
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 を指定してください。
|