Exemplo n.º 1
0
void moveToString(int move, char s[]) {
	strcpy(s, getSquareFromIndex(fromIndex(move)));
	strcat(s, getSquareFromIndex(toIndex(move)));

	int type = moveType(move);
	if (type == simplePromotionQueen || type == capturePromotionQueen) { //promotion
		strcat(s, "q");
	}
}
Exemplo n.º 2
0
void Move::getNotation(unsigned long move, char* buf) {
	int piece = pieceMoving(move);
	int from = fromIndex(move);
	int to = toIndex(move);
	int capturePiece = capture(move);
	int type = moveType(move);

	int bufSize = 0;

	// add the piece notation
	switch (piece) {
	case W_KING: {
		if (type == SHORT_CASTLE) {
			strcpy(buf, "0-0");
			return;
		}
		if (type == LONG_CASTLE) {
			strcpy(buf, "0-0-0");
			return;
		}
		buf[bufSize] = 'K';
		bufSize++;
		break;
	}
	case B_KING: {
		if (type == SHORT_CASTLE) {
			strcpy(buf, "0-0");
			return;
		}
		if (type == LONG_CASTLE) {
			strcpy(buf, "0-0-0");
			return;
		}
		buf[bufSize] = 'K';
		bufSize++;
		break;
	}
	case W_QUEEN:
	case B_QUEEN:
		buf[bufSize] = 'Q';
		bufSize++;
		break;
	case W_ROOK:
	case B_ROOK:
		buf[bufSize] = 'R';
		bufSize++;
		break;
	case W_BISHOP:
	case B_BISHOP:
		buf[bufSize] = 'B';
		bufSize++;
		break;
	case W_KNIGHT:
	case B_KNIGHT:
		buf[bufSize] = 'N';
		bufSize++;
		break;
	}

	char abcdefgh[] = "abcdefgh";

	// the move is a capture
	if (capturePiece != 0) {
		if ((piece == W_PAWN) || (piece == B_PAWN)) {
			buf[bufSize] = abcdefgh[from % 16];
			bufSize++;
		}
		buf[bufSize] = 'x';
		bufSize++;
	}

	// find the row
	buf[bufSize] = abcdefgh[to % 16];
	bufSize++;

	// add the rank
	buf[bufSize] = (to / 16 + 1) + 48;
	bufSize++;

	// add promotion
	switch (type) {
	case PROMOTION_QUEEN:
		strncpy(&buf[bufSize], "=Q", 2);
		bufSize += 2;
		break;
	case PROMOTION_ROOK:
		strncpy(&buf[bufSize], "=R", 2);
		bufSize += 2;
		break;
	case PROMOTION_BISHOP:
		strncpy(&buf[bufSize], "=B", 2);
		bufSize += 2;
		break;
	case PROMOTION_KNIGHT:
		strncpy(&buf[bufSize], "=N", 2);
		bufSize += 2;
		break;
	}

	buf[bufSize] = '\0';
}