有没有更优雅的方法来找到正确的数字?

Aus*_*ore 2 c++ case switch-statement

我有一个2D数组,作为国际象棋游戏的板.我希望用户输入在Smith Notation中.设置数组的方式是,如果用户说他们想要一块移动到第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;
}
Run Code Online (Sandbox Code Playgroud)

我确实想过翻转数组并将其反向显示给用户,这样当用户与第8行交互时,它们实际上row[7]在数组中进行交互,这将消除对此功能的需求.但是,我仍然想知道解决这个问题的其他方法.在此先感谢您的回复.

CB *_*ley 6

看起来这简化为:

int convertToCorrectRow(int row) {
    assert(row > 0 && row <= 8);
    return 8 - row;
}
Run Code Online (Sandbox Code Playgroud)

如果row来自用户输入而没有进一步验证,我不会使用断言.


Amb*_*ber 5

为什么不......

int convertToCorrectRow(int row)
{
    assert(row < 9 && row > 0);
    return 8 - row;
}
Run Code Online (Sandbox Code Playgroud)