2016-05-12 2 views
-2

Извините, этот вопрос не сформулирован очень хорошо, я не совсем уверен, как его спросить.Цитирование через массивы, вверх и влево, работа в направлении вниз и вправо, возвращающая ошибку?

Это утверждение корректно работает

if (direction == 'w' || direction == 'W') 
{ 
    for (int i = 0; i < rows; i++) 
    { 
     for (int j = 0; j < columns; j++) 
     { 
      if (board[i][j] == playerTile) 
      { 
       if (board[i-1][j] == ' ') 
       { 
        board[i - 1][j] = playerTile; 
        board[i][j] = ' '; 
       } 
       else 
       { 
        std::cout << "Invalid Move" << std::endl; 
        _getch(); 
       } 
      } 
     } 
    } 
} 

в то время как это один вызывает недопустимую ошибку, и игрок перемещается в нижнюю части доски, я думаю, что это проблема связана с [+-I] разделом, в когда он изменился на [i - 1]; как предыдущие, если заявление он работает

else if (direction == 's' || direction == 'S') 
{ 
    for (int i = 0; i < rows; i++) 
    { 
     for (int j = 0; j < columns; j++) 
     { 
      if (board[i][j] == playerTile) 
      { 
       if (board[i + 1][j] == ' ') 
       { 
        board[i + 1][j] = playerTile; 
        board[i][j] = ' '; 
       } 
       else 
       { 
        std::cout << "Invalid Move" << std::endl; 
        _getch(); 
       } 
      } 
     } 
    } 
} 
+2

Подумайте об этом, что ожидает от доски [i - 1] [j], когда i == 0? То же упражнение с доской [i + 1] [j], когда i rows-1? – willll

+1

Off topic: используйте 'std :: tolower' на' направлении' и спасите себя, чтобы проверить 'направление == 'S'', и это верхние cronys. – user4581301

+1

'_getch' имеет подпись эго Visual Studio. В Visual Studio есть отличный отладчик. Ваша производительность значительно улучшится, если вы научитесь ее использовать. Подробнее читайте здесь: https://msdn.microsoft.com/en-CA/library/sc65sadd.aspx – user4581301

ответ

0

Ваше безопасное решение для проверки ваших выражений массива, прежде чем использовать их:

if (i > 0) 
{ 
    if (board[i-1][j] /*... */ 

and 
if ((i + 1) < rows) 
{ 
    if (board[i+1][j] /* ... */ 

Это должно показать, почему вы видите проблемы в вашем коде.

Смежные вопросы