0
respostas

Como usar a função 'memcpy' no lugar de 'copiamapa'?

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);
}