2012-01-29 71 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; 
} 
相關問題