Есть ли более изящный способ найти правильный номер? - PullRequest
2 голосов
/ 29 января 2012

У меня есть 2D-массив, который выступает в качестве доски для шахматной игры. Я ожидаю, что пользовательский ввод будет в обозначении Смита . Мой массив настроен так, что, если пользователь говорит, что хочет, чтобы кусок перемещался в 8-ю строку или из нее (верхняя с точки зрения пользователя), он взаимодействует с row[0] в массиве. Чтобы справиться с этим, я написал функцию, которая преобразует ввод пользователя в правильную строку для массива. Однако это кажется немного неуклюжим, и мне было интересно, как программисты с большим опытом решат эту проблему.

int convertToCorrectRow(int row)
{
    int newRow;
    switch (row) {
        case 1:
            newRow = 7;
            break;
        case 2:
            newRow = 6;
            break;
        case 3:
            newRow = 5;
            break;
        case 4:
            newRow = 4;
            break;
        case 5:
            newRow = 3;
            break;
        case 6:
            newRow = 2;
            break;
        case 7:
            newRow = 1;
            break;
        case 8:
            newRow = 0;
            break;            
        default:
            assert(false);
            break;
    }
    return newRow;
}

Я действительно думал о том, чтобы перевернуть массив и отобразить его в обратном порядке для пользователя, чтобы, когда пользователь взаимодействует со строкой 8, он фактически взаимодействовал с row[7] в массиве, и это устраняло бы необходимость в этой функции. Однако мне все же хотелось бы узнать другие способы решения этой проблемы. Заранее спасибо за ваш ответ.

Ответы [ 2 ]

6 голосов
/ 29 января 2012

Похоже, это упрощается до:

int convertToCorrectRow(int row) {
    assert(row > 0 && row <= 8);
    return 8 - row;
}

Если row поступает от пользователя без дальнейшей проверки, я бы не стал использовать assert.

5 голосов
/ 29 января 2012

Почему бы просто ...

int convertToCorrectRow(int row)
{
    assert(row < 9 && row > 0);
    return 8 - row;
}
...