我有一个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;
}
我确实想过翻转数组并将其反向显示给用户,这样当用户与第8行交互时,它们实际上与数组中的row[7]
交互,这将消除对此功能的需求。但是,我仍然想知道解决这个问题的其他方法。
提前感谢您的回复。
答案 0 :(得分:6)
看起来这简化为:
int convertToCorrectRow(int row) {
assert(row > 0 && row <= 8);
return 8 - row;
}
如果row
来自用户输入而没有进一步验证,我不会使用断言。
答案 1 :(得分:5)
为什么不呢......
int convertToCorrectRow(int row)
{
assert(row < 9 && row > 0);
return 8 - row;
}