Minha pergunta é se devo ou não usar arquivos de texto para salvar os dados do meu jogo. Tenho algumas preocupações básicas em fazer isso:
Não há realmente nenhuma maneira de proteger os dados e, assim, o usuário pode estragar tudo se o tocar e eu não quero que isso aconteça.
Provavelmente não é a maneira mais eficiente de armazenar meus dados (haverá muitos deles)
Eu sei como analisar / gravar arquivos de texto de forma eficaz, porém, para a criação de protótipos eles foram fantásticos. Eu só quero olhar para o futuro para o que eu deveria estar pensando em mudar para, para que não me dê um soco na cara perto do final do desenvolvimento.
Se não devo usar arquivos de texto, o que devo usar? Eu preciso de algo compatível com C ++.
c++
serialization
Althezel
fonte
fonte
Respostas:
Por enquanto, desde que você está apenas começando, os arquivos de texto provavelmente estão OK. Há algumas preocupações em sua pergunta que abordarei.
Proteger os dados não é tão crucial quanto você provavelmente pensa. Se o seu jogo for multiplayer, você terá os dados salvos no servidor de qualquer maneira. Se o seu jogo for para um jogador, e se os jogadores modificarem os dados? Se eles quebrarem algo, é realmente culpa deles e eles poderão reinstalar.
O desempenho também é outra coisa que geralmente não conseguimos planejar adequadamente. Você realmente não deve otimizar até medir um problema de desempenho. Meu palpite é que você provavelmente vai ter uma quantidade de dados que não é que arquivos de texto grandes e que vão ficar bem.
Dito isso, sua melhor aposta é abstrair suas rotinas de salvamento e carregamento de dados da melhor maneira possível. Por exemplo, você pode ter uma classe base, digamos
DataWriter
, e depois fornecer diferentes implementações de seus diferentes métodos. Um exemplo muito básico seria semelhante a:Quando você cria um perfil do seu jogo e percebe que o gargalo de desempenho está na rotina de gravação de arquivos, é possível fornecer outra implementação dessa classe (por exemplo, para gravar em um banco de dados) com alterações mínimas no código de chamada.
fonte
A palavra Dados do jogo pode significar muitas coisas, por exemplo
Para cada categoria, você pode adotar outra abordagem.
Por exemplo, você pode usar o SQLite para localização, binário para mapas, texturas, sons e assim por diante.
Para itens de configuração, você deve usar arquivos xml fáceis de alterar.
Como sempre, a resposta correta é "depende".
Existem muitos analisadores xml com uma ligação c ++ e uma ligação c ++ para SQLite também existe.
fonte
Você pode salvar seus dados como um blob binário e transmitir os dados novamente quando acessar o arquivo. Isso resolveria seus dois problemas. Apenas verifique se o código de serialização é exatamente o mesmo que a desserialização.
O fluxo no blob binário é relativamente rápido e também impede que o usuário veja os dados e os altere.
Você pode conseguir tudo isso usando os fluxos de biblioteca padrão.
fonte
float
membro a um único objeto), os antigos jogos de saves se tornam completamente inválidos. É difícil lidar com isso durante o desenvolvimento, mas se você estiver disposto a fazê-lo, certamente.