Computer Chess Club Archives


Search

Terms

Messages

Subject: RE:0x88 attack tables

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.