protected void getSquaresCoveredForVector(sizableArray<square> addTo, baseBoard onThis, vectorDirection dir) { if (addTo == null) addTo = new sizableArray<square>(8); loopConfig lcfg = new loopConfig(position, dir); int x = lcfg.startX; int y = lcfg.startY; while ((x != lcfg.finishX) && (y != lcfg.finishY)) { squarePos sqPos = new squarePos(x, y); // If the square is empty, we can move to it.. if (onThis[sqPos].type == pieceType.none) { addTo.Add( onThis[sqPos] ); } else { // the square is occupied by some piece. We are covering it, but we cannot go any further. addTo.Add( onThis[sqPos] ); break; } x += lcfg.directionX; y += lcfg.directionY; } return; }
/// <summary> /// Find moves in a given direction, including captures /// </summary> /// <param name="addTo"></param> /// <param name="onThis">The board to move on</param> /// <param name="dir">The vectorDirection to move in</param> /// <returns>A List<move> of moves</returns> public sizableArray<move> getMovesForVector(sizableArray<move> addTo, baseBoard onThis, vectorDirection dir) { if (addTo == null) addTo = new sizableArray<move>(8); loopConfig lcfg = new loopConfig(position, dir); int x = lcfg.startX; int y = lcfg.startY; while ((x != lcfg.finishX) && (y != lcfg.finishY)) { squarePos sqPos = new squarePos(x, y); // If the square is empty, we can move to it.. if (onThis[sqPos].type == pieceType.none) { addTo.Add(new move(onThis[position], onThis[sqPos])); } else { if (onThis[sqPos].colour != colour ) { // the square is occupied by an enemy piece. we can move to it, // but no further. addTo.Add(new move(onThis[position], onThis[sqPos])); } break; } x += lcfg.directionX; y += lcfg.directionY; } return addTo; }