駒情報の持ち方
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は関係ないのかも。測って比べたわけじゃないので(^^;
高速化はアセンブラでどうなるか?を考えてやってますね。