Ir para conteúdo
Fórum Script Brasil
  • 0

Como Armazenar Dados


kuroi

Pergunta

tipo, tenho um jogo em que um cara pode ter varias armas. ai tem uma lista bem grande de todas as armas do jogo. ai ele vai la e abre um bau e ganha uma das armas. ai eu vou passar o id da arma e tenho que pegar na lista qual a arma que corresponde.

exemplo, tenho a classe armas:

class armas
{
     string Nome;
     int Forca;
};[/code] ai eu quero ter uma listagem de varias armas, exemplo:
1 - Espada de Madeira - Força 10 2 - Espada de Ferro - Força 20 3 - Lança - Força 15
ai quando ele abrir o bau, se por exemplo, quero que ele ganhe a espada de ferro, eu acrescento mais uma arma de id 2 pra ele. o que eu queria saber é como essa lista geralmente é armazenada nos jogos em geral. porque pelo que me parece eles não usam banco de dados. o que me parece é que eles usam arquivos com os dados e leem os arquivos durante o jogo. não sei se é isso mesmo. no caso acho que eu teria que faze um arquivo texto comum, mudo a extensao e de alguma forma eu encripto os dados la dentro. mas eu tava pensando, por mais que eu encripte, sempre tem como alguém ir la e entender como é feito e alterar o arquivo pra robar no jogo. ai ele vai la e altera o poder da espada de madeira pra 999, por exemplo. otra forma que eu tinha pensado era deixar essa lista no proprio codigo do programa e pegar os dados por uma funcao em que eu passasse o id da arma como parametro. exemplo:
[code]armas RetornaArma(int id)
{
     armas arma;

     if (id == 1)
     {
          arma.Nome = "Espada de Madeira";
          arma.Forca = 10;
     }
     else if (id == 2)
     {
          arma.Nome = "Espada de Ferro";
          arma.Forca = 20;
     }

     ....

     return arma;
}

não sei, as vezes acho que esse metodo é meio tonto, mas não vejo muito problema a não ser o exe ficar muito grande. mas qual sera o metodo que seria mais rapido?? aramazenar em arquivo, ou o metodo acima, no proprio codigo?? porque por exemplo, a hora que o cara abrir o inventario e tiver mais de 200 itens pra listar, se eu tivesse que ler o arquivo, eu teria que ler linha por linha ate chegar no item que eu quero 200 vezes. agora, no segundo metodo ele so faria os ifs sem ter que ler o arquivo, ou seja cada comparacao de ids seria mais rapida. apesar de que se eu ordenar a lista do inventario e ordendar a lista no arquivo, eu posso abrir o arquivo so uma vez e ler na sequencia, ganhando tempo. acho que esse metodo do arquivo seria mesmo bem mais rapido, mas também seria mais facil pra trapacearem.

mas sei la, alguém tem uma ideia de como seria o melhor jeito?? tipo, alguém sabe como eles fazem isso nos jogos pra pc em geral??

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Sim, geralmente vemos os jogos utilizarem arquivos binários próprios. Só uma vez ou outra vemos jogos que utilizam arquivos de imagem, vídeo e som que sejam formatos populares.

Se você guardar estes valores em binário fica mais difícil (mas não impossível) do cara saber onde é que está o valor a ser alterado (a não ser que você publique uma especificação da estrutura do seu arquivo, é claro - do contrário só se ele for "olhando" o arquivo até encontrar uma padrão). Além disso, você também economiza em tempo de leitura já que, por exemplo, um valor de 0 a 65535 você guarda em apenas dois bytes (dois caracteres). É claro que isso não vale para strings e sim somentes para valores numéricos. Mas, você poderia guardar o nome das armas em um arquivo separado e identificá-las em outro através de um número, por exemplo. Ou poderia criptografar os nomes também. Bom, estão aí algumas idéias.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Graymalkin, tava olhando agora... como faco isso??

Além disso, você também economiza em tempo de leitura já que, por exemplo, um valor de 0 a 65535 você guarda em apenas dois bytes (dois caracteres).

tipo, como funciona esse negocio de arquivos binarios?? eles vao e guardam os numeros em hexadecimal certo?? porque seriam dois bytes para 65535?? não continua sendo 1 pra 255??

no visual basic, declarei duas variaveis como Double e gravei dois valores no arquivo binario. um deles 99999 e o outro 65535. quando abro no editor de binario do Visual C++, ele me mostra:

post-9195-1185946775_thumb.jpg

porque ele poe aquele monte de zeros na frente?? ele tipo aloca o espaco que ocupa uma variavel double, certo??

bom, esse meu arquivo tem 16 bytes. ou seja 1 byte pra cada valor de 255. sei la essas contas tão me confundindo.

qual seria a maneira "certa" de usar esse arquivos binarios??

outra coisa, eu poderia também gravar textos normalmente em arquivo binario, apenas gravando os respectivos valores na tabela ascii, não??

EDITADO:

por exemplo, declarei uma variavel Long e salvei um valor de 65535. ele mostra:

FF FF 00 00 00 00 00 00

e o arquivo fica com 8 bytes.

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...