GMBR
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Entrar

Esqueci-me da senha

Últimos assuntos
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27

» Retorno da GMBR!!!
por vinians Qui 14 Mar 2024, 19:07

» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30

» Mudar cor de apenas uma palavra
por lunalol Sex 01 Mar 2024, 13:42

» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17

» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18

» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34

» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13

» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18

» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12

» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02

» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55

» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42

» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56

» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49

» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21

» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21

» Asteroid Core - Early Acesse Update [0.2.0.0]
por JOZ. Seg 08 Jan 2024, 14:39

» Versionamento de código com GitHub
por GabrielXavier Seg 08 Jan 2024, 07:32

» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por kolesovsup Sex 29 Dez 2023, 07:16

» a funçao approach ainda existe?
por PEDRINDEV Ter 26 Dez 2023, 20:05

» Inimigo ataca até por trás! >:(
por saim Sex 22 Dez 2023, 08:55

» [RESOLVIDO]Spawn após morte
por Deception_1999 Dom 17 Dez 2023, 16:39

» Remunerado $$$ - Procuro programador para ajudar a "montar" um jogo
por theguitarmester Sáb 02 Dez 2023, 16:28

» Game maker nao abre
por Cerf Dom 26 Nov 2023, 12:01


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

4 participantes

Ir para baixo

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

Mensagem por Mr.Rafael 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 Sáb 13 Out 2012, 02:19, editado 1 vez(es) (Motivo da edição : Corrigir itálico.)
Mr.Rafael
Mr.Rafael

Games Ranking : Nota A

Notas recebidas : A-C-B-A-A
Data de inscrição : 05/10/2010
Reputação : 94
Número de Mensagens : 502
Prêmios : [IDEIA] Sistema de save através de algoritmo...? Empty

Medalhas x 0 Tutoriais x 2 Moedas x 0

Ouro x 1 Prata x 1 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por Kabeção 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
Kabeção

Games Ranking : Sem avaliações

Data de inscrição : 08/06/2008
Reputação : 100
Número de Mensagens : 2314
Prêmios : [IDEIA] Sistema de save através de algoritmo...? Empty

Medalhas x 0 Tutoriais x 7 Moedas x 0

Ouro x 3 Prata x 0 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

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

Ir para o topo Ir para baixo

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

Mensagem por saim 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
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [IDEIA] Sistema de save através de algoritmo...? Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por theguitarmester 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
theguitarmester

Games Ranking : Nota C

Notas recebidas : B + C
Data de inscrição : 28/02/2012
Reputação : 139
Número de Mensagens : 2207
Prêmios : [IDEIA] Sistema de save através de algoritmo...? Empty

Medalhas x 0 Tutoriais x 4 Moedas x 0

Ouro x 2 Prata x 2 Bronze x 1

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 1
Plataformas :
  • Unity


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

Ir para o topo Ir para baixo

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

Mensagem por Mr.Rafael Sáb 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
Mr.Rafael

Games Ranking : Nota A

Notas recebidas : A-C-B-A-A
Data de inscrição : 05/10/2010
Reputação : 94
Número de Mensagens : 502
Prêmios : [IDEIA] Sistema de save através de algoritmo...? Empty

Medalhas x 0 Tutoriais x 2 Moedas x 0

Ouro x 1 Prata x 1 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por saim 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
saim

Games Ranking : Nota B

Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios : [IDEIA] Sistema de save através de algoritmo...? Empty

Medalhas x 1 Tutoriais x 6 Moedas x 0

Ouro x 1 Prata x 0 Bronze x 3

Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Ir para o topo Ir para baixo

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

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos