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:
class DataWriter {
virtual void save(GameState state) = 0;
virtual ~DataWriter() { }
};
class TextFileDataWriter : public DataWriter {
virtual void save(GameState state) {
//write to text file
}
};
class DatabaseDataWriter : public DataWriter {
virtual void save(GameState state) {
//write to database
}
};
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.