CPW-Engine attacks
Revision as of 15:29, 18 December 2018 by GerdIsenberg (talk | contribs) (Created page with "'''Home * Engines * CPW-Engine * Attacks''' This page holds the functions responsible for detecting if a given square is attacked by a given player. =i...")
Home * Engines * CPW-Engine * Attacks
This page holds the functions responsible for detecting if a given square is attacked by a given player.
isAttacked
#include "stdafx.h" #include "0x88_math.h" int isAttacked( char byColor, S8 sq ) { /* pawns */ if ( byColor == WHITE ) { if ( IS_SQ( sq + SE ) && isPiece( WHITE, PAWN, sq + SE ) ) return 1; if ( IS_SQ( sq + SW ) && isPiece( WHITE, PAWN, sq + SW ) ) return 1; } else { if ( IS_SQ( sq + NE ) && isPiece( BLACK, PAWN, sq + NE ) ) return 1; if ( IS_SQ( sq + NW ) && isPiece( BLACK, PAWN, sq + NW ) ) return 1; } /* knights */ if ( leaperAttack( byColor, sq, KNIGHT ) ) return 1; /* kings */ if ( leaperAttack( byColor, sq, KING ) ) return 1; /* straight line sliders */ if ( straightAttack( byColor, sq, NORTH ) || straightAttack( byColor, sq, SOUTH ) || straightAttack( byColor, sq, EAST ) || straightAttack( byColor, sq, WEST ) ) return 1; /* diagonal sliders */ if ( diagAttack( byColor, sq, NE ) || diagAttack( byColor, sq, SE ) || diagAttack( byColor, sq, NW ) || diagAttack( byColor, sq, SW ) ) return 1; return 0; }
leaperAttack
int leaperAttack( char byColor, S8 sq, char byPiece ) { S8 nextSq; for ( int dir = 0; dir < 8; dir++ ) { nextSq = sq + vector[byPiece][dir]; if ( IS_SQ(nextSq) && isPiece( byColor, byPiece, nextSq ) ) return 1; } return 0; }
straightAttack
int straightAttack(char byColor, S8 sq, int vect) { int nextSq = sq + vect; while ( IS_SQ(nextSq) ) { if (b.color[nextSq] != COLOR_EMPTY ) { if ( ( b.color[nextSq] == byColor ) && ( b.pieces[nextSq] == ROOK || b.pieces[nextSq] == QUEEN ) ) return 1; return 0; } nextSq = nextSq + vect; } return 0; }
diagAttack
int diagAttack(int byColor, S8 sq, int vect) { int nextSq = sq + vect; while ( IS_SQ( nextSq ) ) { if (b.color[ nextSq ] != COLOR_EMPTY ) { if ( ( b.color[nextSq] == byColor ) && ( b.pieces[nextSq] == BISHOP || b.pieces[nextSq] == QUEEN ) ) return 1; return 0; } nextSq = nextSq + vect; } return 0; }