Página 1 de 1

Duvida; Criar Variaveis "Automatico"

Enviado: Qua Fev 15, 2017 8:22 pm
por Riccardoric
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.

Re: Duvida; Criar Variaveis "Automatico"

Enviado: Qui Fev 16, 2017 10:11 am
por gabrielsch
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.

Re: Duvida; Criar Variaveis "Automatico"

Enviado: Qui Fev 16, 2017 9:46 pm
por Riccardoric
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

Re: Duvida; Criar Variaveis "Automatico"

Enviado: Sex Fev 17, 2017 4:12 pm
por chicoweb
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.