駒情報の持ち方

http://streakeagle.blog15.fc2.com/blog-entry-683.html

>先手なら01、後手なら10、壁なら00、空きなら11です。
 これは面白いかも。


自分は今、


SELF = 0x10,
ENEMY = 0x20,
PROMOTED = 0x08,
WALL=0x40,
FU=1,
KY=2,
KE=3,
GI=4,
KI=5,
KA=6,
HI=7,
OU=8,

みたいに定義してますね。
先手後手で2bitもつかってるのはなぜだったかな(^^;
判定が早くなるからだったようなおぼろげな記憶が(^^;


>こいつを11×11(壁含む)の配列に保存して盤面を表します。
 あ、横も11ですか?
 私は、横は16ですよ。縦は11。
 桂馬があるから縦は11が便利ですね。
 横は16にしておくと、


for(uchar y=2*16;y<=10*16;y+=16) for(uchar x=1;x<=9;x++) {

スキャンが上記みたいにかけますけど、
ビットシフトで表せるから16の倍数を使うと掛け算が速いと思います。(上の例は掛け算使ってないから関係ないけど)
11だとy*11の掛け算は遅いでしょうし。
16倍から4倍を引くと11倍(y<<4)-(y>>2)←うっ。いやそれ12倍だし(^^;;;
(y<<3)+(y<<1)+yが11倍かな……


このへんはYSSの解説にもあったと思います。
今のCPUは関係ないのかも。測って比べたわけじゃないので(^^;
高速化はアセンブラでどうなるか?を考えてやってますね。