Author: rasjid chan
Date: 06:31:47 11/25/03
You may be implementing your board wrong.
void gen_eval_xside()
{
int isqTo, xray_valid_step;
int const * pvec;
//??? dont ask why, i dont know
unsigned char * const bm = (unsigned char *)&bmap[xside][0];
PPC p;
for (p = ppc[xside][0]; p <= ppc[xside][15]; ++p){
if (!p -> on)
continue;
switch(p -> pc){
case PAWN:
for (pvec = pvecPawn[xside]; *(pvec + 1) ; ++pvec){
//king/to-sq
if (!((isqTo = p->isq + *pvec) & 0x88
|| (xray_valid_step && xray_valid_step ^ aStep[128 + p->isq
+ *pvec - ksq[xside]]))) {
bm[isqTo] |= t_attk[0];
bm[isqTo] += 32;
}
}
break;
case KING:
case KNIGHT:
if (xray_valid_step){
assert(p->pc == 1);
break;
}
for (pvec = pvecPc[p->pc]; *pvec; ++pvec)
if (!((isqTo = p->isq + *pvec) & 0x88)) {
bm[isqTo] |= t_attk[p->pc];
bm[isqTo] += 32;
}
break;
case BISHOP:
case ROOK:
case QUEEN:
for (pvec = pvecPc[p->pc]; *pvec; ++pvec){
if (!(xray_valid_step && xray_valid_step ^ aStep[128 + p->isq
+ *pvec - ksq[xside]]))//king/to-sq
for (isqTo = p->isq + *pvec; !(isqTo & 0x88) ; isqTo += *pvec){
bm[isqTo] |= t_attk[p->pc];
bm[isqTo] += 32;
}
}
}
}
return;
}
/////////////////
typedef struct{
const char c;
char pc;
short val;
char isq;
char on;
char xray_from; /* sq of oppn brq that xray pc and attacks own king */
char xray_check_sq; /* sq that xray-checks oppn thru pc*/
long info;
}PC;
typedef PC *PPC;
PPC ppcBrd[128];
hers's your 32 pcs dead or alive
PC piece[2][16] = {
0, 0, vPAWN, iA2, 1, -1, -1, 0L,
0, 0, vPAWN, iB2, 1, -1, -1, 0L,
0, 0, vPAWN, iC2, 1, -1, -1, 0L,
0, 0, vPAWN, iD2, 1, -1, -1, 0L,
0, 0, vPAWN, iE2, 1, -1, -1, 0L,
0, 0, vPAWN, iF2, 1, -1, -1, 0L,
0, 0, vPAWN, iG2, 1, -1, -1, 0L,
0, 0, vPAWN, iH2, 1, -1, -1, 0L,
0, 1, vKNIGHT, iB1, 1, -1, -1, 0L,
0, 1, vKNIGHT, iG1, 1, -1, -1, 0L,
0, 2, vBISHOP, iC1, 1, -1, -1, 0L,
0, 2, vBISHOP, iF1, 1, -1, -1, 0L,
0, 3, vROOK, iA1, 1, -1, -1, 0L,
0, 3, vROOK, iH1, 1, -1, -1, 0L,
0, 4, vQUEEN, iD1, 1, -1, -1, 0L,
0, 5, vKING, iE1, 1, -1, -1, 0L,
1, 0, vPAWN, iA7, 1, -1, -1, 0L,
1, 0, vPAWN, iB7, 1, -1, -1, 0L,
1, 0, vPAWN, iC7, 1, -1, -1, 0L,
1, 0, vPAWN, iD7, 1, -1, -1, 0L,
1, 0, vPAWN, iE7, 1, -1, -1, 0L,
1, 0, vPAWN, iF7, 1, -1, -1, 0L,
1, 0, vPAWN, iG7, 1, -1, -1, 0L,
1, 0, vPAWN, iH7, 1, -1, -1, 0L,
1, 1, vKNIGHT, iB8, 1, -1, -1, 0L,
1, 1, vKNIGHT, iG8, 1, -1, -1, 0L,
1, 2, vBISHOP, iC8, 1, -1, -1, 0L,
1, 2, vBISHOP, iF8, 1, -1, -1, 0L,
1, 3, vROOK, iA8, 1, -1, -1, 0L,
1, 3, vROOK, iH8, 1, -1, -1, 0L,
1, 4, vQUEEN, iD8, 1, -1, -1, 0L,
1, 5, vKING, iE8, 1, -1, -1, 0L
};
void init(){
int i, j;
for (i = 0; i <= 1; ++i)
for (j = 0; j < 16; ++j){
ppc[i][j] = &piece[i][j];
ppc[i][j]->isq = piece_init[i][j].isq;
ppc[i][j]->pc = piece_init[i][j].pc;
ppc[i][j]->val = piece_init[i][j].val;
ppc[i][j]->on = 1;
ppc[i][j]->info = 0L;
ppc[i][j]->xray_from = -1;
ppc[i][j]->xray_check_sq = -1;
}
memset(ppcBrd, 0, sizeof(ppcBrd));
.......
you have only 32 pcs at all time so some may be off,
very often have short-cuts
you need to loop thru 16 and only look for those ON play.
and if aRay[128 + oppn->isq - attacker->isq] & aBISHOP then path is b-type.
.... aRay[256], aStep[256] precomputed as in Gerbil's code
Good Luck
Rasjid
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.