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"); } }
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'; }