Como criar um sistema de senha para um jogo para um jogador como os usados em jogos de console mais antigos?
Por exemplo, o Mega Man X salva o trabalho, fornecendo uma série de números que você pode inserir posteriormente para carregar o seu salvamento.
Respostas:
Primeiro, divida o estado do jogo (ou melhor, os aspectos do estado que você deseja salvar). No caso de um jogo no estilo Mega Man, você pode rastrear quais dos chefes de nível final que você matou, o número de upgrades de tanques de energia que você tem e assim por diante.
Empacote todos esses dados em um campo de bits, ou seja, atribua um número apropriado de bits a cada valor:
Nosso exemplo tem um total de 8 bits, o que significa que um único caractere pode representar uma senha. Na prática, é provável que seu jogo tenha mais estado e, portanto, exija mais bits totais e, portanto, mais caracteres. Conforme observado nos comentários aqui e em outros lugares nesta pergunta, essa abordagem funciona para jogos "retrô" ou outros jogos em que o tamanho do estado do jogo capturado é razoável. Além de um certo ponto, você pode descobrir que a complexidade das senhas necessárias para codificar seu estado é muito grande.
Para diminuir a probabilidade de observação casual decifrar a senha, você pode transformar o layout dos bits para introduzir bits fictícios (que não afetam o estado do jogo, mas que tornam a senha diferente quando você interpreta todos os bits como caracteres) ou executar através de alguma operação reversível, semelhante a um hash, para embaralhar os bits de maneira que todos os bits da "caixa morta X " não fiquem próximos um do outro, fazendo com que as senhas de estado seqüencial correspondentes pareçam muito diferentes ou introduzam valores de soma de verificação.
Se você procurar por aí, há muitas informações sobre os sistemas empregados para alguns dos jogos com senha mais populares do mercado:
Você pode ler sobre eles para obter inspiração adicional.
fonte
Esses jogos salvaram apenas um estado em que acredito. A senha apenas referencia um nível a ser carregado. Basta usar um dicionário para algo assim.
Se for um pouco mais complexo, como ter uma certa arma ou reforço, você pode criptografar o estado em um código hash curto (mas longo o suficiente).
Mas eu recomendo fortemente que você não use isso. A senha se espalhará rapidamente na Internet e logo todos ganharão seu jogo.
fonte
Bem, você poderia basicamente fazê-lo desta maneira:
Chefes mortos = 7
Quantidade de moedas = 36
Possui Espada = 0 (Não)
Possui Coração = 1 (Sim)
Nível Atual = 6
Mundo Atual = 9
Saúde = 100
Código = 7V36R0A1T6O9A100
Basicamente, todas as letras separadas
fonte
Embora soluções como o sistema personagem-estado de Josh Petrie tenham benefícios (pequeno tamanho de gravação, funciona em todas as cópias do jogo), elas combinam o design dos jogos e o sistema de estado a serem intrinsecamente ao sistema de senhas. Qualquer alteração na senha ou estado ou design e todo o sistema se desfaz.
Uma solução muito mais simples seria criar seu sistema de salvamento normalmente e simplesmente adicionar um sistema de senha por cima. Isso pode ser tão simples quanto salvar a senha no salvamento (possivelmente dobrando como nome do arquivo) e validá-la no carregamento, ou tão complexa quanto usar uma das muitas bibliotecas de criptografia existentes (o que é bastante trivial).
Parece haver alguma confusão em torno dessa resposta.
1) O op simplesmente pediu uma senha que permita carregar um salvamento ... não é necessário que a senha seja salva.
2) Hoje em dia, muitos jogos têm um requisito significativo de armazenamento de economia, acabamos de criar um sistema rápido de salvar / carregar internamente que produzia arquivos de 10 MB ... para um jogo de perguntas! O sistema de salvamento de Josh Petrie , embora válido seja muito limitado - assim que o sistema de armazenamento se tornar não trivial, as senhas teriam que ter um comprimento enorme para persistir todos os dados pertinentes.
Por exemplo, o que acontece se houver 30 chefes? 20 conquistas? Estamos no meio de uma conquista? Em que nível ele está? Quantos bits estamos reservando para saúde, vidas, moedas, pontos de experiência? E se o instantâneo não estiver no estado entre os níveis ... mas na metade do nível - as posições do jogador, inimigos, projéteis, terreno destruído / alterado de repente somam muito estado que precisa ser armazenado.
Para perspectiva, assumindo um alfabeto de 30 caracteres e uma senha de dez letras, temos aproximadamente 50 bits de informações para armazenar. Não é incomum ver um jogo / mecanismo usar até 320 bits apenas para armazenar a posição, rotação e escala de um único objeto. Claro, você pode fazer todos os tipos de truques de otimização para fazer mais com menos ... mas, no final das contas, você está gastando o tempo dedicado a tornar o jogo divertido - uma das piores otimizações que você pode fazer.
fonte