2012-01-29 43 views
2

我有一个二维数组,充当棋盘游戏的棋盘。我希望用户输入在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]阵列中的互动,这将消除该功能的需要。但是,我仍然想知道解决这个问题的其他方法。 预先感谢您的回复。

回答

6

它看起来像这样简化为:

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

如果row来自用户的输入没有进一步的验证,我不会用断言,虽然。

+0

DERP。现在我很尴尬。我知道有一个更简单的方法来做到这一点,但显然我太笨了,想不起来);谢谢! – 2012-01-29 08:07:12

5

为什么不......

int convertToCorrectRow(int row) 
{ 
    assert(row < 9 && row > 0); 
    return 8 - row; 
} 
相关问题