Найти координаты соседей вне заданных координат

Я программирую игру в шашки на машинописном тексте. Я хотел бы объяснить некоторые важные детали, чтобы понять, как работает следующий код. В моей игре координаты представляют собой строку типа «b4». Я хочу получить координаты соседей фигуры, но только тех соседей, которые имеют смысл в зависимости от игрока и от того, является ли фигура в этих координатах королем или нет. Например, если на «b4» это первый игрок, я хочу, чтобы в качестве возможных соседей были только «a5» и «c5».

Я написал следующий код, чтобы найти соседей по заданным координатам:

    type CornerType = {
    [key: string]: string | null;
}

const getPieceCornersCoordinates = (coordinates: string, piece: Piece) => {
    const {row, col} = convertStringCoordinatesToNumberCoordinates(coordinates);
    
    const columnLeft  = ((col - 1) >= 0) ? String.fromCharCode((col - 1) + 97) : false;
    const columnRight = col +1 <= 7 ? String.fromCharCode((col + 1) + 97) : false;
    
    const rowUpper = row +1 < 9 ? row +1 : false;
    const rowLower = row -1 > 0 ? row -1 : false;
    
    let corners : CornerType = {};

    if(piece.isKing){
        corners.leftUpper  = columnLeft  !== false && rowUpper !== false ? columnLeft  + rowUpper : null;
        corners.rightUpper = columnRight !== false && rowUpper !== false ? columnRight + rowUpper : null;
        corners.leftLower  = columnLeft  !== false && rowLower !== false ? columnLeft  + rowLower : null;
        corners.rightLower = columnRight !== false && rowLower !== false ? columnRight + rowLower : null;
    } else if(piece.player === "Player One"){
            corners.leftLower  = columnLeft  !== false && rowLower !== false ? columnLeft  + rowLower : null;
            corners.rightLower = columnRight !== false && rowLower !== false ? columnRight + rowLower : null;
    } else {
            corners.leftUpper  = columnLeft  !== false && rowUpper !== false ? columnLeft  + rowUpper : null;
            corners.rightUpper = columnRight !== false && rowUpper !== false ? columnRight + rowUpper : null;
    }

    deleteNullCorners(corners);
    
    return corners;
}

const deleteNullCorners = (corners: CornerType) => {
    for(let key in corners){
        if(corners[key] === null){
            delete corners[key];
        }
    }
}

Я думаю, что этот код написан не очень хорошо, как его улучшить?

1 ответ
1

Во-первых, опубликуйте весь файл кода (рабочая игра в шашки), а не только эту функцию, если вы хотите знать, как улучшить свой код. Трудно предложить улучшения только для одной функции.

Эта функция не делает ничего ясного, и, вероятно, ее следует переименовать, разделить или объединить с другими функциями. В лучшем случае он возвращает все возможные ходы, которые не являются захватами. Если это то, что вы хотите (маловероятно), назовите его лучше, чтобы оно соответствовало этому.

Я рекомендую не использовать строку для координат. Просто используйте пару цифр. Вы можете преобразовать его для отображения пользователю и т. Д. Там, где это необходимо.

Вернуть массив координат или массив направлений, а не указание directionName -> coordinate.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *