Devo usar um banco de dados para armazenar o conteúdo do jogo? [fechadas]

16

Eu tenho um jogo 2D escrito em C ++ usando SFML. Quero tornar o jogo expansível de forma que conteúdo como itens ou entidades possam ser facilmente adicionados adicionando uma linha / entrada / linha a um arquivo ou banco de dados.

Estou procurando algo que não precise ser compilado no programa, mas que possa ser lido e gravado em tempo de execução. Quando seria apropriado usar um banco de dados?

SinisterSloth
fonte
1
Por favor, esclareça suas necessidades mais. Os bancos de dados são bastante rápidos, mas muito complexos. Você realmente precisa da velocidade? Por que não usar apenas um arquivo de texto? Você tem uma referência?
Anko
Quantos itens você vai ter? É mais do que um milhão? Esse é o limite em que eu consideraria usar um banco de dados sobre arquivos de texto.
Philipp
Eu diria que um banco de dados é um exagero para isso, basta usar algum tipo de lista de definições. Talvez apenas texto simples. Considere XML ou JSON.
Hugo Zink
1
Eu recomendo XML ou JSON também. Prefiro XML porque é mais legível para mim, como humano, mas o JSON também é uma boa escolha.
Draco18s não confia mais em SE
Não pretendo ter muito conhecimento de sistemas de dados ou de como eles são implementados em jogos, mas direi que a Microsoft tende a usar implementações de micro-banco de dados para muitos de seus aplicativos simples (aqueles que não possuem muitos recursos). dados ou necessidades externas ao banco de dados, mas tendem a ter "relacionamentos" etc). Contanto que você tenha em mente a facilidade de uso, pode fazer sentido. (Ideia Bad: Usando um namespace formalizada super XML exigindo correção de dados)
Katana314

Respostas:

26

Use apenas um banco de dados se precisar de um banco de dados. Isso é:

  • Se você precisar executar consultas complexas com frequência.
  • Se você tiver relacionamentos de dados complexos.
  • Se seus dados forem enormes e provavelmente não caberão na memória.

Se os dados do seu jogo atenderem a alguma dessas condições, você poderá se beneficiar do uso de um banco de dados. Observe que isso não é muito comum e você provavelmente não satisfaz nenhum deles. Se você preferir, eu usaria o SQLite ou algo com uma idéia semelhante de não exigir um servidor em execução e ser apenas uma biblioteca.

Caso contrário, use arquivos e carregue dados na memória na inicialização. Se você deseja que o jogo seja modificável, carregue esses dados no diretório do jogo e nos diretórios do mods e defina como as informações conflitantes podem ser mescladas.

Observe também que, se você fazer usar um banco de dados, ele pode beneficiar você e os desenvolvedores mods ainda usar arquivos para ler os dados iniciais e construir o banco de dados somente quando o jogo carrega. A menos que o tamanho potencial desse banco de dados seja enorme (ou seja, mais de algumas dezenas de MiB), convém usar um banco de dados em memória, o que é possível no SQLite especificando :memory:como o caminho do banco de dados .

Darkhogg
fonte
3
Eu altamente segundo considerando SQLite, mesmo se suas necessidades não são "complexas" ou "enormes". Na verdade, existem muitas razões pelas quais, com algo pequeno e incorporado assim, você pode se beneficiar muito de ter um banco de dados na ponta dos dedos.
Wjl
Além disso, plataformas móveis usam bancos de dados para armazenar algumas informações. Android usa SQLite. Isso significa que a maior parte do seu trabalho para plataformas móveis já está concluída (em termos de manipulação de dados). Além disso, é realmente fácil configurar o SQLite e editar dados do SQLite (com programas como o SQLite Studio ou similar). Se for usar o SQLite, a melhor aposta seria usar a V3. Mas fora isso, local!
Ismael Miguel
@wjl: Concordo, os benefícios da normalização e restrições de integridade referencial valem a pena, mesmo para conjuntos de dados de jogos menores. (Agora, se não tanta dor a era conseguir SQLite fazer restrições adequadas de integridade referencial ...)
Mason Wheeler
Este é um argumento contra o uso de um banco de dados relacional . Um simples armazenamento de valor-chave indexado ainda pode valer a pena.
Mark
1
@ Mark Se você for usar um armazenamento de valores-chave em um jogo, poderá também ter um mapa de hash ou similar na memória.
Darkhogg
5

Eu realmente gosto do MongoDB para desenvolvimento de jogos, ele tem um desempenho muito bom e é realmente flexível, fácil de usar e baseado em json.

Você pode adicionar qualquer campo necessário em qualquer coleção devido ao NoSQL Arch, para que ele se encaixe muito bem em qualquer ambiente "dinâmico", como jogos.

Dê uma olhada .

Se você está desenvolvendo algum tipo de jogo de estratégia baseado em MMO Turn, provavelmente deve ler sobre o CouchDB , é um banco de dados NoSQL que possui um sistema de versão realmente bom.

PRDeving
fonte
Não é uma boa resposta. A questão não era "qual banco de dados devo usar", mas "deveria usar um banco de dados".
uliwitness
1

O CastleDB é uma boa opção porque é simplesmente um editor que converte um banco de dados em um arquivo JSON posteriormente. Eu já vi muitas respostas dizendo que um arquivo de texto simples é o melhor, então o CastleDB é provavelmente o melhor dos dois mundos.

hjk231
fonte
Não é uma resposta ruim, mas erra a pergunta. A questão não era "qual banco de dados devo usar", mas "deveria usar um banco de dados".
uliwitness