最新

Miyako Shogi System

コツコツ改良、へこたれない
2014| 1|
2013| 12|
2012| 01| 02| 04| 05| 06| 07| 08| 09| 10|
2011| 01| 02| 03| 04| 05| 07| 08| 10| 11| 12|
2010| 02| 03| 06| 07| 08| 09| 10| 12|

2012/07/28

Bitboardによる手の生成(駒を取る手)

駒を取る銀の手の生成。隣接手は簡単。

target=p->bitboard[WHITE][P_OCCUPY];  // 相手駒の位置
org=p->bitboard[BLACK][piece];
while ( test128(org) ) {  // 駒がある
  from=bit_fscan(&org);  // 駒位置
  bit_reset(org,from);   // 駒を消す
  t.x=and128(attack_gin_b[from],target);  // 先手銀の利きのbitboardを押し付ける
  while ( test128(t) ) {  // 利きのある数
    to=bit_fscan(&t); // 移動先の位置
    bit_reset(t,to);  // 移動先を消す
    pin_check()
    手の格納
  }
}

飛び駒の取る手生成には、邪魔駒の判定が必要(相手駒へ利きがあるか)。

target=p->bitboard[WHITE][P_OCCUPY];  // 相手駒の位置
t.x=and128(slider_attack[from],target);  // 先手飛び駒の利きのbitboardを押し付ける
while ( test128(t) ) {  // 利きのある数
  to=bit_fscan(&t); // 移動先の位置
  bit_reset(t,to);  // 移動先を消す
  t.x=and128(slider_attack[from],slider_opposite[to]);	// 間の枡を抽出
   if ( !andtest128(t,p->occ) ) {  // 邪魔駒が無い
     pin_check()
     手の格納
   }
 }
リンクはご自由に (Miyako Shogi System Kyoto Japan)

ダウンロードのページ

Lighttpd

DreamPlug