CPW-Engine attacks

Home * Engines * CPW-Engine * Attacks

This page holds the functions responsible for detecting if a given square is attacked by a given player.

=isAttacked=
 * 1) include "stdafx.h"
 * 2) 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; } Up one Level