Valide a forma e os intervalos permitidos
Defina a estrutura de um nível com campos obrigatórios, como id, width, height, tiles, spawn, exits e entities. Verifique se as dimensões são números inteiros positivos dentro dos limites aceitos pelo jogo, se o array de tiles contém exatamente width × height itens e se cada tile usa um tipo conhecido. Valide as coordenadas das entidades em relação à grade e exija identificadores únicos para portas, chaves, interruptores e objetivos. Verificar apenas se um valor é numérico não basta: rejeite explicitamente valores semelhantes a NaN e valores fora do intervalo.
Mantenha os campos opcionais separados dos obrigatórios. Defina um valor padrão para uma paleta decorativa omitida, mas não invente silenciosamente um ponto de surgimento ou uma saída ausente se isso puder mudar o quebra-cabeça. Retorne erros com um caminho como levels[2].entities[4].x para que a pessoa que edita o conteúdo encontre rapidamente o campo com problema.
Verifique relacionamentos e invariantes jogáveis
Após a validação estrutural, verifique as regras entre campos. Cada porta trancada deve fazer referência a uma chave existente; toda chave obrigatória deve estar acessível antes de sua porta; uma saída não deve ficar dentro de um ladrilho sólido. Execute uma busca de caminho a partir do spawn e confirme se os objetivos necessários podem ser alcançados de acordo com as regras de movimento do jogo. Se inimigos ou plataformas móveis afetarem o acesso, use um validador mais específico ou um teste de jogo em vez de reivindicar um caminho de grade simples para provar que todo o nível pode ser resolvido.
Falhe com segurança e teste o próprio validador
A MDN explica que JSON.parse lança um SyntaxError quando o JSON é inválido; por isso, trate falhas de análise separadamente das falhas de esquema. Durante o desenvolvimento, informe o arquivo exato e a regra violada. Na versão para jogadores, carregue uma alternativa conhecida ou mostre claramente que o nível está indisponível, em vez de iniciar com dados parciais. Mantenha casos de teste para campos ausentes, referências inválidas, caminhos bloqueados e um nível pequeno válido; o caso válido evita que um validador rejeite tudo.
Perguntas sobre validação de dados em nível de jogo
O JSON.parse bem-sucedido é suficiente para confiar em um arquivo de nível?
Não. A análise confirma a sintaxe, não a forma, os intervalos, as referências nem as regras de solução específicas do jogo. Valide cada um desses pontos antes de passar o nível ao código do jogo.
O jogo deve reparar níveis inválidos automaticamente?
Somente para padrões seguros e inequívocos. Se reparar um objetivo ou rota ausente alterar o projeto, rejeite o nível e use um substituto conhecido em vez de ocultar o defeito.
Leitura complementar
Viu alguma informação desatualizada? Informar uma correção