Obrigado por visitar a The Game Makers Brasil 😁 Use o fórum de Dúvidas para fazer perguntas. Se está em busca de aprender dê uma olhada nos tutoriais.

Duvida; Criar Variaveis "Automatico"

Perguntas? A comunidade te ajuda a resolver.
Avatar do usuário
Riccardoric
Membro
Membro
Reações: 0
Mensagens: 24

Contato:

Duvida; Criar Variaveis "Automatico"

Mensagem por Riccardoric » Qua Fev 15, 2017 8:22 pm

Salve a todos,

Sempre tive essa duvida e nunca consegui achar uma resposta. Tentei varias vezes, com diferentes formas, porém, nenhuma eficiente, ou até mesmo sem resultado.
Como posso criar variáveis sem ser manualmente, por exemplo, preciso criar um certo sorteio X com um numero de pessoas que pode variar a depender de quantas eu quiser, isto é, criar uma array 2d com "nome" e o numero do participante:

Código: Selecionar todos

sort[0,0] = "Nome";
sort[0,1]=1
Acredito que seja o jeito mais eficiente, entretanto se tiver algum outro metodo mais pratico também é aceito.
Havendo uma quantidade não definida de pessoas que podem participar desse sorteio, criar infinitas variáveis é algo não aceitável.
Tentei, recentemente, usar o "for" para esse processo, embora ter fracassado, creio que seja o meio. Segue o exemplo:

Código: Selecionar todos

for (i = 0 ; i < n_pessoas ; i++) {
a=i;
sort[a,1]++;
sort[a,2] = get_string("Nome","Nome");
}

if(n_pessoas <= 0) {
n_pessoas = real(get_string("Numero de pessoas","0"))
}
Dessa forma, apos inserir a quantidade de pessoas tudo esta normal, o erro acontece ao definir o primeiro nome:

Código: Selecionar todos

___________________________________________
############################################################################################
FATAL ERROR in
action number 1
of  Step Event0
for object obj_sorteio:

Push :: Execution Error - Variable Index [1,1] out of range [1,-1] - -1.sort(100006,32001)
 at gml_Object_obj_sorteio_StepNormalEvent_1 (line 7) - sort[a,1]++;
############################################################################################
Estive sem programar por um ano e pouco, é possível eu ter esquecido alguma coisa importante ou não, apenas fiz do jeito errado kkkkk

Agradeço quem poder ajudar 

*Estou usando um teclado italiano, desculpem os erros de acentuação, obrigado.

Avatar do usuário
gabrielsch
Colaborador
Colaborador
Reações: 0
Mensagens: 234

Re: Duvida; Criar Variaveis "Automatico"

Mensagem por gabrielsch » Qui Fev 16, 2017 10:11 am

O problema é que a array é unidimensional e você está tentando fazer uma operação de soma em uma posição que nem sequer ainda existe na array. O certo é você definir a primeira posição do segundo indice como o valor de i ao invés de somar algo indefinido.
var n_pessoas = 0; // Definir como variável temporária caso não for usar mais

// Enquanto o número de pessoas for menor que 0, perguntar número de pessoas...
do 
{
n_pessoas = get_integer("Numero de pessoas", 0) 
} until (n_pessoas > 0)

var i; // Precisa ser variável temporária
for (i = 0 ; i < n_pessoas ; i++) 
{
sort[i, 1] = i;
sort[i, 2] = get_string("Nome", "");
}
OBS: O seu problema é um pouco mais especifico do que o título diz, talvez mudar o título do tópico seja uma boa ideia.
Imagem

Avatar do usuário
Riccardoric
Membro
Membro
Reações: 0
Mensagens: 24

Contato:

Re: Duvida; Criar Variaveis "Automatico"

Mensagem por Riccardoric » Qui Fev 16, 2017 9:46 pm

Obrigado pela resposta.

Realmente, estou ciente de que nao existe, porém, pensei que o Game Maker ia criar, por exemplo o sort[1,1] e assim por diante, sozinho...
Esse esquema de array eu só joguei para mostrar mais ou menos o que eu queria fazer.
Vou quebrar mais a cabeça aqui... Obrigado do mesmo jeito!

Obs: eu tentei fazer uma variável local entretanto deu erro

Avatar do usuário
chicoweb
Membro
Membro
Reações: 0
Mensagens: 135

Re: Duvida; Criar Variaveis "Automatico"

Mensagem por chicoweb » Sex Fev 17, 2017 4:12 pm

Declara assim no inicio que resolve tudo:

Código: Selecionar todos

sort[99999,99999] = "";
Já pesquisei sobre o assunto não come memoria ele não lança isso tudo de uma vez nela mas e habilita a usar qualquer ponteiro tipo sort[245,876] = "João" sem dar erro.
Pode dar é conflito no tipo de dados inserido no caso acima só string, pra especificar o tipo de dados, pode fazer assim:

Código: Selecionar todos

sort[99999,0] = "";
sort[99999,1] = 0;
sort[99999,2] = "";
No caso acima poderia ser uma tabela com os campos nome, idade, telefone;
E outra coisa quando jogamos o sort[99999,1] = 0; todos os ponteiro deste intervalo estarão com o valor 0 até ser redefinido.

E sim, sei que 99999 é um vetor "limitado", se usar mais aumenta tipo 9999999 mas cá entre nós se alguem usar mais do que isso num jogo eu acho que ele ficará meio lento neh.
Meus games:
Jump James - Aventura/Estratégia/Robô
Freedom of Pala Pala - Aventura/Estratégia
Prisioneira - RPG/Bloco/Ação

Responder

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante