Когда я пытаюсь переместить левую плиту (например, рядом с «пустой» плиточкой 0), ничего не происходит. Если плитка является незаконной, программа функционирует так, как должна. Вот функция ход:Функция для замены двух смежных элементов не работает
bool move(int tile)
{
for (int i = 0; i < d; i++)
{
for (int j = 0; j < d; j++)
{
if (board[i][j] == tile)
{
// stops program from going out of bounds
if (j < d)
{
if (board[i][j + 1] == 0)
{
swap(board[i][j], board[i][j + 1]);
return true;
}
}
if (j > 0)
{
if (board[i][j - 1] == 0)
{
swap(board[i][j], board[i][j - 1]);
return true;
}
}
if (i > 0)
{
if (board[i - 1][j] == 0)
{
swap(board[i][j], board[i - 1][j]);
return true;
}
}
if (i < d)
{
if (board[i + 1][j] == 0)
{
swap(board[i][j], board[i + 1][j]);
return true;
}
}
}
}
}
return false;
}
и функция подкачки:
void swap(int i, int j)
{
int temp = i;
i = j;
j = temp;
}
Что происходит, доска остается ищет то же самое, без изменений.
можно передать '' i' и j' по значению к 'функции swap'. Если вы хотите поменять местами переменные в контексте вызывающего, передайте их с помощью указателя. –
См. Http://stackoverflow.com/questions/1501217/c-function-to-swap-values-in-2d-array –
Помните, когда вы передаете * значение * функции, функция получает * копию оригинал * с его собственным, и * очень другим * адресом. –