[IDEIA] Sistema de save através de algoritmo...?

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

[IDEIA] Sistema de save através de algoritmo...?

Mensagem por Mr.Rafael em Ter 09 Out 2012, 23:11

Matutando sobre um projeto simples que poderia desenvolver, comecei a pensar sobre um sistema de salvar/carregar níveis. Alguns até podem falar "ah, usa aí a função do GM pra salvar", mas não é bem dessa forma que eu gostaria...

Seria um sistema onde salvasse vários objetos, e carregasse de forma independente do save criado pelo GM. Poderia ser editado (estou pensando em INI, básico mesmo), sendo que mudando alguns valores poderia ocasionar em mudanças nos tiles carregados... enfim.

A ideia que eu estou tentando montar funciona da seguinte forma: quando você manda o jogo salvar, ele criará um INI com dados armazenados de cada objeto colocado no mapa, sendo que um interpretador será necessário para separar, compreender e montar o nível em questão.

Exemplo:

Como exemplo, vamos montar um projeto de cabeça: imagine uma combinação de 3 quadrados de 2 cores diferentes: pretos e brancos. Agora nós vamos adicionar esses objetos através de um interpretador, que vai ler um conjunto de dados para carregar a combinação. por enquanto nada de INI's, a parte bruta da coisa é o que importa.

Forma 1:

A primeira forma que achei foi relacionar cada posição a uma variável, e um objeto seria responsável por se movimentar e criar as instâncias em ordem. Então ficaria assim:
Código:
// Posições (armazenadas em variáveis, serão convertidas em objetos reais pelo interpretador)
pos_1 = 0
pos_2 = 1
pos_3 = 0
// Leitura da posição 1
switch pos_1
{
case 0: {instance_create(self.x,self.y,quadrado_preto) break}
case 1: {instance_create(self.x,self.y,quadrado_branco) break}
}
// Mover-se para o próximo bloco
x+=16
// Leitura da posição 2
switch pos_2
{
case 0: {instance_create(self.x,self.y,quadrado_preto) break}
case 1: {instance_create(self.x,self.y,quadrado_branco) break}
}
// Mover-se para o último bloco
x+=16
// Leitura da posição 3
switch pos_3
{
case 0: {instance_create(self.x,self.y,quadrado_preto) break}
case 1: {instance_create(self.x,self.y,quadrado_branco) break}
}
// Carregamento completo: auto-destruir-se
instance_destroy()
Isso é uma demonstração... estou tentando mostrar mais ou menos a ideia. Nesse caso, vemos que parece boa, mas dependendo da quantidade de instâncias que venhamos a guardar, isso acaba ficando complicado e pesado. A combinação em questão seria preto-branco-preto. Então veio na cabeça outra ideia (essa eu tentei construir, mas sem sucesso até agora).

Forma 2:

Dessa vez, todos os dados serão guardados em uma string.
Código:
pos = string("010A")

// 0 = Quadrado preto
// 1 = Quadrado branco
// A = Fim da leitura, o interpretador dá o carregamento como concluído e então se destrói
A ideia aqui era fazer com que o interpretador pegasse um dígito por vez para verificar e então converter o valor. Isso eu tentei fazer, mas, devido às minhas dificuldades para mexer com strings, ainda não consegui fazer isso funcionar. Vou tentar ilustrar, no entanto. A começar que agora, como a leitura é única, ela pode ser guardada em forma de script.
Código:

switch pos_checker
{
case 0: {instance_create(self.x,self.y,quadrado_preto) x+= 16 break}
case 1: {instance_create(self.x,self.y,quadrado_branco) x+=16 break}
case A: {instance_destroy() break}
}
E no interpretador (no evento step):
Código:

// Variável que irá receber os valores
pos_checker = 0
// Mover um dígito da string 'pos' para a variável pos_checker e executar o script
/* [A função de colocar a parte da string ficaria aqui] */
/* [E aqui a função de executar o script] */
Está incompleto e eu não sei como fazer o resto. Para que ele sempre pegue os valores em ordem, o que se poderia fazer é deletar cada dígito da variável original após ser lido (por isso eu disse "mover" no comentário).

Na primeira vez, ele seria "010A". O programa pegaria o valor "0" para passá-lo ao pos_checker, executaria o script, e o ciclo recomeçava, agora com o valor da string pos sendo "10A". Movia o 1 para ser convertido e o valor se transformava em "0A". Finalmente, após converter o valor 0, a string teria valor "A", que é lida como aviso de que o carregamento foi concluído e faz o interpretador se destruir. A combinação em questão seria preto-branco-preto, tal como na primeira forma.

Usos:

Se feito corretamente, esse recurso pode ser utilizado em:
- Sistemas de passwords em forma de algoritmo (principalmente para RPG's com sistema de inventário grande)
- Expansões (se o jogo for pensado para suportá-las, elementos como novos mapas podem ser gerados a partir dessa forma)
- Editor de fases e compartilhamento (procurem por um jogo chamado Super Mario Flash. Nele, tem um editor de níveis que salva ele em texto. Você pode compartilhar seu nível simplesmente copiando o código para postar em algum lugar e colando na opção de load)
- Porta para mods (certas aberturas poderiam permitir que os arquivos fossem editados e o jogo fosse manipulado sem a necessidade do GMK)


O que vocês acham da ideia? Alguma sugestão ou outra forma para melhorá-la? Seria algo possível de se fazer dessa maneira? Very Happy

o/


Última edição por Mr.Rafael em Sab 13 Out 2012, 02:19, editado 1 vez(es) (Razão : Corrigir itálico.)

Mr.Rafael

Ranking : Nota A
Número de Mensagens : 383
Data de inscrição : 05/10/2010
Notas recebidas : A-C-B-A
Reputação : 57
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 2

Voltar ao Topo Ir em baixo

Re: [IDEIA] Sistema de save através de algoritmo...?

Mensagem por Kabeção em Ter 09 Out 2012, 23:43

Enquanto for tudo simples assim "preto e branco" o método da string é o melhor para essa situação. Fácil de armazenar e manusear.

Está incompleto e eu não sei como fazer o resto. Para que ele sempre pegue os valores em ordem, o que se poderia fazer é deletar cada dígito da variável original após ser lido (por isso eu disse "mover" no comentário).
O que você precisa fazer é ler a cadeia de letras da string em sequencia e para isso tem funções bem fáceis de se mexer.

string_length(str); retorna número de caracteres da string
string_char_at(str,index); retorna o caracter na posição especificada

Com isso você usa um loop para ler toda a string
Código:
for (i = 1; i <= string_length(data); i += 1) {
    switch (string_char_at(data,i)) {
        case "0":
            instance_create(x,y,preto);
            x += 16;
        break;
       
        case "1":
            instance_create(x,y,branco);
            x += 16;
        break;
       
        default:
            x += 16;
    }
}
Note que a primeira letra é a posição 1 e não 0 como para outras coisas.
O default ali é para tratar erros ou simplesmente não criar o tile se o caracter não for nem um dos acima.

É desnecessário deletar o caracter já processado ou usar a letra pra finalizar a ação amenos que tenha dados diferentes para outros processos depois dela.

Kabeção

Ranking : Sem avaliações
Número de Mensagens : 2314
Data de inscrição : 08/06/2008
Reputação : 100
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 3
   : 0
   : 1

http://blackcapapps.blogspot.com.br/

Voltar ao Topo Ir em baixo

Re: [IDEIA] Sistema de save através de algoritmo...?

Mensagem por saim em Qua 10 Out 2012, 09:06

Algo parecido já foi feito. O script armazenava as posições e id do objeto a ser criado. Isso permite qualquer complexidade de mapas, desde que todos os objetos estejam previamente no jogo que irá interpretar o código e que as ids dos objetos sejam iguais.
Dê uma olhada nesse tópico. Nele, o Jiraya mostra uma forma bem completa (e um pouco complexa) de executar sua idéia.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [IDEIA] Sistema de save através de algoritmo...?

Mensagem por theguitarmester em Qua 10 Out 2012, 12:30

eu ia fazer uma Salve que pegasse todas as instâncias e guardava os valores/variaveis como e salvava na ini, depois era só carregar e criar, =ou- assim:

with all {ini_write (save, x) ini_write (save, yini_write (save, visible)}

mas desisti(por enquanto) por causa que no GM você não pode Mudar as IDs, e isto dificulta muito para fazer um salve.

theguitarmester

Ranking : Sem avaliações
Número de Mensagens : 1908
Idade : 21
Data de inscrição : 28/02/2012
Notas recebidas : B
Reputação : 80
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Prêmios
   : 2
   : 2
   : 1

http://guitarmester.no.comunidades.net/index.php?pagina=19362978

Voltar ao Topo Ir em baixo

Re: [IDEIA] Sistema de save através de algoritmo...?

Mensagem por Mr.Rafael em Sab 13 Out 2012, 02:18

Obrigado pelas respostas. Eu li o tópico que o saim mostrou, mas confesso que achei um pouco confuso para entender (acho que foi na pressa, tentarei reler).

Estou levando essa ideia adiante usando o método das strings. Conseguir implementar um sistema de algoritmo é o primeiro passo. Começando mais por um sistema de password (o qual guarda as posições X e Y de um objeto, por exemplo), e depois partindo com coisas mais complexas, como letras aleatórias no código (para ajudar a esconder o algoritmo), ou associá-las a um valor cuja soma deles dará um resultado válido.

Estou montando um projeto usando essa ideia. O algoritmo é simples, mas contanto que funcione e sirva de base, está bom.

o/

Mr.Rafael

Ranking : Nota A
Número de Mensagens : 383
Data de inscrição : 05/10/2010
Notas recebidas : A-C-B-A
Reputação : 57
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 2

Voltar ao Topo Ir em baixo

Re: [IDEIA] Sistema de save através de algoritmo...?

Mensagem por saim em Seg 15 Out 2012, 13:17

Mr.Rafael escreveu:depois partindo com coisas mais complexas, como letras aleatórias no código (para ajudar a esconder o algoritmo), ou associá-las a um valor cuja soma deles dará um resultado válido.
Isso soa como uma encriptação de texto. Existem scripts e rotinas pré-assadas para isso, como essa aqui.

saim

Ranking : Nota B
Número de Mensagens : 2964
Idade : 38
Data de inscrição : 14/01/2011
Notas recebidas : C-D-A-B
Reputação : 121
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 3

Voltar ao Topo Ir em baixo

Re: [IDEIA] Sistema de save através de algoritmo...?

Mensagem por Conteúdo patrocinado Hoje à(s) 18:08


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum