Tenho a mesma dúvida do tópico anterior dessa aula, mas ela não foi respondida e o tópico está fechado.
Quando uso a função copiamapa
, (no meu caso copy_map
) os fantasmas andam uma casa a cada jogada (comportamento esperado). Mas quando uso a memcopy
, os fantasmas andam até encontrar um obstáculo em uma única jogada.
É como se a função fantasmas
(ou ghosts
) estivesse alterando a cópia do mapa. Fazendo os fantasmas andarem uma casa a cada iteração, até encontrar um obstáculo.
Alguém pode me ajudar a entender por quê isso está acontecendo, e como posso fazer para que a função memcpy
funcione?
Minha versão da função fantasmas
:
void ghosts() {
MAP m_copy;
memset(&m_copy, 0, sizeof(MAP));
memcpy(&m_copy, &m, sizeof(MAP));
// copy_map(&m_copy, &m);
for (int i = 0; i < m.rows; i++) {
for (int j = 0; j < m.cols; j++) {
if (m_copy.matrix[i][j] == GHOST
&& valid_pos(&m_copy, i, j+1)
&& empty_pos(&m_copy, i, j+1)) {
change_pos(&m, i, j, i, j+1, GHOST);
}
}
}
// free_map(&m_copy);
}