Comandos

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

Comandos

Mensagem por Kapoty em Ter 18 Set 2012, 12:16

Bom, como eu faço isso :

Digamos que eu criei uma text_box e lá tudo que eu escrevo e envio apertando enter é reconhecido como um comando, digamos assim que eu enviei o seguinte comando :

Código:
adicionar_ponto[x,y]

Quero que quando eu envie isto eu possa :

- Pegar o valor de x
- Pegar o valor de y
- Reconhecer se adicionar_ponto está escrito corretamente

Bem, é isto.

ps : eu consegui pegar o valor de x e y mas o problema é que se eu colocar no x "20" eu só estou conseguindo pegar o "2".


Última edição por kapoty em Ter 18 Set 2012, 12:35, editado 1 vez(es)

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por un00brn em Ter 18 Set 2012, 12:30


un00brn

Número de Mensagens : 117
Idade : 18
Data de inscrição : 18/06/2012
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.djurielrn.blogspot.com

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por Kapoty em Ter 18 Set 2012, 12:33

un00brn escreveu:Talvez esse tutorial sirva para alguma coisa

http://gmbr.forumeiros.com/t6975-tutorial-fazendo-combinacoes-de-comandos

Não serve... você leu oque eu disse?

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por Ferna49 em Ter 18 Set 2012, 12:58

Vai se acustumando o povo daqui é assim mesmo, simplismente chega e manda você ler um tutorial.


Outros chegam floodando nos tópicos...
Leia as regras!

Ferna49

Número de Mensagens : 54
Data de inscrição : 19/07/2012
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por saim em Ter 18 Set 2012, 14:09

Eu usaria comandos de strings. Limitadores.
Tipo, pegaria o comando inteiro e jogaria numa string. Daí, procuraria por caracteres como "[", ",", ";", "."... tem mais, mas depende de você querer enumerar todos ou não.
Depois disso, eu separaria a string em substrings e separadores. Daí pra frente, a coisa seria complicada. Por exemplo, se eu encontrasse um "[", isso significa que a string anterior é o nome de uma array. Se encontrar um "(", a string anterior é um script ou função.
Se temos uma array, o valor depois do "[" TEM QUE SER um número inteiro. Então, se não der pra transformar em um número inteiro diretamente, provavelmente (mas não certamente) trata-se de uma variável ou função. Nesse caso, começa-se tudo de novo.
A vírgula serve pra separar argumentos numa função ou índices numa array.

Caramba, a cada possibilidade levantada, me parece mais e mais que você está reinventando o game maker (por estar criando um interpretador de códigos, tal). Posso perguntar qual o objetivo do programa?

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: Comandos

Mensagem por Kapoty em Ter 18 Set 2012, 14:44

saim escreveu:
Caramba, a cada possibilidade levantada, me parece mais e mais que você está reinventando o game maker (por estar criando um interpretador de códigos, tal). Posso perguntar qual o objetivo do programa?

Sim, ontem anoite eu estava sem nada para fazer e comecei a "brincar" com o draw do game maker, enquanto eu brincava tive uma ideia interessante que era fazer um modelador de imagens usando linhas convencionais dai pra frente não parei mais de ter novas ideias e ai me veio a cabeça que já que vou colocar muitas funções por que não fazer um "interpretador de códigos" ?

Se quiser ver uma minima parte do programa clique aqui.

Como eu disse é uma parte minima do programa, comecei ontem a noite e a vai a lista de funções com o mouse :

Código:
- Mecha os quadrados azuis para mudar a posição de uma determinada linhas
- Mecha a bolinha vermelha para trocar todos os pontos de posição
- Clique com o botão direito do mouse para adicionar um ponto no lugar onde o mouse está
- Clique com o botão do scroll do mouse para deletar um ponto no lugar onde o mouse está
- Aperte espaço para ver apenas as linhas e vice-versa
- Aperte enter para fechar as linhas

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por un00brn em Ter 18 Set 2012, 17:19

kapoty escreveu:
un00brn escreveu:Talvez esse tutorial sirva para alguma coisa

http://gmbr.forumeiros.com/t6975-tutorial-fazendo-combinacoes-de-comandos

Não serve... você leu oque eu disse?

Li sim man'.. Pensava que poderia ser assim.
Mas, descobri outra forma que pode ser também.
Usando o "string_pos".
E voce vai montando um por um, ou voce pode montar um mini script ou mandar por variáveis. Voce que escolhe.
Como quem me passou o codigo foi o Vinians, eu não sei de quase nada sobre ele, é só voce se informar.
Mas, vai aí um exemplo.
Código:

Frase = "se eu fosse o pelé, jogaria sem cueca!";
if (string_pos("pelé", Frase) > 0)
{
    // Se existir o nome pelé na minha variavel, fazer algo
}
if (string_pos("se eu", Frase) > 0)
{
    // Se existir o nome se seu na minha variavel, fazer algo
}
Daqui, voce já tem meio caminho andado ( ou não )
Valeu, e desculpa ae não saber usar o comando, mas, vai que voce o entenda, e tinha se esquecido dele! =) Boa sorte com o projeto!

un00brn

Número de Mensagens : 117
Idade : 18
Data de inscrição : 18/06/2012
Reputação : 7
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://www.djurielrn.blogspot.com

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por Kapoty em Ter 18 Set 2012, 17:23

un00brn escreveu:
kapoty escreveu:
un00brn escreveu:Talvez esse tutorial sirva para alguma coisa

http://gmbr.forumeiros.com/t6975-tutorial-fazendo-combinacoes-de-comandos

Não serve... você leu oque eu disse?

Li sim man'.. Pensava que poderia ser assim.
Mas, descobri outra forma que pode ser também.
Usando o "string_pos".
E voce vai montando um por um, ou voce pode montar um mini script ou mandar por variáveis. Voce que escolhe.
Como quem me passou o codigo foi o Vinians, eu não sei de quase nada sobre ele, é só voce se informar.
Mas, vai aí um exemplo.
Código:

Frase = "se eu fosse o pelé, jogaria sem cueca!";
if (string_pos("pelé", Frase) > 0)
{
    // Se existir o nome pelé na minha variavel, fazer algo
}
if (string_pos("se eu", Frase) > 0)
{
    // Se existir o nome se seu na minha variavel, fazer algo
}
Daqui, voce já tem meio caminho andado ( ou não )
Valeu, e desculpa ae não saber usar o comando, mas, vai que voce o entenda, e tinha se esquecido dele! =) Boa sorte com o projeto!

Bem, obrigado pela ajuda mas string_pos não vai servir, pois não quero sabe se existe e sim pegar estes valores.

Já tenho meio caminho andado, já consigo pegar o valor mas só se o valor só tiver um algarismo.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por luiz_eldorado em Ter 18 Set 2012, 21:53

Uma vez eu tentei fazer isso, mas é realmente complicado, não pelas funções de strings (tem que ficar checando posições, copiando, deletando, etc), mas por, nos códigos, achar funções dentro de funções. Por exemplo:
Código:
funcao1("dorgas!",funcao2(2314314,"!!!!!!!"),'xDDD');
Nesse caso, se eu procurar o "(" e depois o ")" e tudo aquilo dentro serão argumentos estará errado, pois ele vai achar o primeiro ")" que achar, ou seja, o da "funcao2" e não da "funcao1". Além de que o usuário pode criar um código com erros.
Então ví que a linguagem teria de ser de outro modo. Eu pensei no seguinte:
object_add obj
var xx,42,real
var yy,666,real
instance_create ,xx,yy,obj
var str,Texto!,string
draw_text ,xx,yy,str

Primeiro o nome da função, depois um espaço, depois os argumentos separados por vírgula. Normalmente, o primeiro argumento é onde o retorno desta funções será armazenado. É impossível colocar valores diretamente nas funções, é preciso colocar

já consigo pegar o valor mas só se o valor só tiver um algarismo.
Tente assim:
Código:
str="adicionar_ponto[x,y]";
pos1=string_pos("[",str);
pos2=string_pos(",",str);
xx=string_copy(str,pos1+1,pos2-pos1);
É algo assim

luiz_eldorado

Ranking : Nota C
Número de Mensagens : 928
Idade : 18
Data de inscrição : 30/07/2011
Notas recebidas : C
Reputação : 47
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 1

http://luizpontes.tk/

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por Kapoty em Ter 18 Set 2012, 21:59

@luiz_eldorado

Errr... você está seguindo a mesma logica que eu, também pensei neste mesmo modo mas ai eu percebi que seria limitado a "2" argumentos, agora eu só preciso mesmo é fazer com que possa ter mais de 2 argumentos.

Por enquanto estou usando este código mas já estou precisando do outro.

Se quiserem ver como está ficando o projeto é só falarem.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por saim em Qua 19 Set 2012, 10:14

Eu estava numa preguiça danada de testar cada posição pra gerar o script (esses "+1" e "-1" me matam!), mas como o luiz_eldorado já fez a parte chata, fica viável adaptar pra qualquer número de argumentos:

Código:
var str, pos, posFinal, strArgumentos, nArgs, argumento, i;

str = "adicionar_ponto[x,y,z,...]"; // dá pra substituir por "argument0",  ou "get_string", pra usar como script
pos[0] = string_pos("[",str) + 1;
posFinal = string_pos("]",str);
strArgumentos = string_copy(str, pos[0], posFinal - pos[0]); // uma cópia da str, só com os argumentos
show_message("strArgumentos=" + strArgumentos); // debug
nArgs = string_count(",", strArgumentos); // total de vírgulas. (um a menos que o total de argumentos)
show_message("nArgs=" + string(nArgs)); // debug
// num loop, transforma os argumentos em strings, colocando-os na array "argumento"
for(i = 1; i <= nArgs; i += 1){
   pos[i] = pos[i - 1] + string_pos(",", strArgumentos);
   argumento[i - 1] = string_copy(str, pos[i - 1], pos[i] - pos [i - 1] - 1);
   show_message("argumento[" + string(i - 1) + "]=" + argumento[i - 1]); // debug
   strArgumentos = string_copy(str, pos[i], posFinal - pos[i]); // uma cópia da str, só com os argumentos restantes
   }
// falta o último argumento
argumento[nArgs] = strArgumentos; // já que só sobrou o último argumento
show_message("argumento[" + string(nArgs) + "]=" + argumento[nArgs]); // debug

Ainda não resolve o problema de ter uma função dentro da outra, mas já melhora o problema. Resolver é possível, mas chato demais. Se for um programa menos experimental, talvez valha a pena, mas parece que é mais um lance de curiosidade, então acho melhor NÃO usar uma função dentro da outra...

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: Comandos

Mensagem por vinians em Qua 19 Set 2012, 11:55

saim escreveu:Eu estava numa preguiça danada de testar cada posição pra gerar o script (esses "+1" e "-1" me matam!), mas como o luiz_eldorado já fez a parte chata, fica viável adaptar pra qualquer número de argumentos:

Código:
var str, pos, posFinal, strArgumentos, nArgs, argumento, i;

str = "adicionar_ponto[x,y,z,...]"; // dá pra substituir por "argument0",  ou "get_string", pra usar como script
pos[0] = string_pos("[",str) + 1;
posFinal = string_pos("]",str);
strArgumentos = string_copy(str, pos[0], posFinal - pos[0]); // uma cópia da str, só com os argumentos
show_message("strArgumentos=" + strArgumentos); // debug
nArgs = string_count(",", strArgumentos); // total de vírgulas. (um a menos que o total de argumentos)
show_message("nArgs=" + string(nArgs)); // debug
// num loop, transforma os argumentos em strings, colocando-os na array "argumento"
for(i = 1; i <= nArgs; i += 1){
   pos[i] = pos[i - 1] + string_pos(",", strArgumentos);
   argumento[i - 1] = string_copy(str, pos[i - 1], pos[i] - pos [i - 1] - 1);
   show_message("argumento[" + string(i - 1) + "]=" + argumento[i - 1]); // debug
   strArgumentos = string_copy(str, pos[i], posFinal - pos[i]); // uma cópia da str, só com os argumentos restantes
   }
// falta o último argumento
argumento[nArgs] = strArgumentos; // já que só sobrou o último argumento
show_message("argumento[" + string(nArgs) + "]=" + argumento[nArgs]); // debug

Ainda não resolve o problema de ter uma função dentro da outra, mas já melhora o problema. Resolver é possível, mas chato demais. Se for um programa menos experimental, talvez valha a pena, mas parece que é mais um lance de curiosidade, então acho melhor NÃO usar uma função dentro da outra...
Otima solução Saim, para resolver o problema de uma função dentro da outra é relativamente simples.
* Quando pegar o "argumento", procure em uma lista se ele existe como nome de alguma função.
* se ele NÃO existir ele é uma string comum de argumento
* se ele EXISTIR basta chamar o próprio script recursivamente. Isso faz com que o problema se auto-solucione

Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por Kapoty em Qua 19 Set 2012, 12:24

saim escreveu:Eu estava numa preguiça danada de testar cada posição pra gerar o script (esses "+1" e "-1" me matam!), mas como o luiz_eldorado já fez a parte chata, fica viável adaptar pra qualquer número de argumentos:

Código:
var str, pos, posFinal, strArgumentos, nArgs, argumento, i;

str = "adicionar_ponto[x,y,z,...]"; // dá pra substituir por "argument0",  ou "get_string", pra usar como script
pos[0] = string_pos("[",str) + 1;
posFinal = string_pos("]",str);
strArgumentos = string_copy(str, pos[0], posFinal - pos[0]); // uma cópia da str, só com os argumentos
show_message("strArgumentos=" + strArgumentos); // debug
nArgs = string_count(",", strArgumentos); // total de vírgulas. (um a menos que o total de argumentos)
show_message("nArgs=" + string(nArgs)); // debug
// num loop, transforma os argumentos em strings, colocando-os na array "argumento"
for(i = 1; i <= nArgs; i += 1){
   pos[i] = pos[i - 1] + string_pos(",", strArgumentos);
   argumento[i - 1] = string_copy(str, pos[i - 1], pos[i] - pos [i - 1] - 1);
   show_message("argumento[" + string(i - 1) + "]=" + argumento[i - 1]); // debug
   strArgumentos = string_copy(str, pos[i], posFinal - pos[i]); // uma cópia da str, só com os argumentos restantes
   }
// falta o último argumento
argumento[nArgs] = strArgumentos; // já que só sobrou o último argumento
show_message("argumento[" + string(nArgs) + "]=" + argumento[nArgs]); // debug

É saim este código resolve meu problema obrigado.

saim escreveu:Ainda não resolve o problema de ter uma função dentro da outra, mas já melhora o problema. Resolver é possível, mas chato demais. Se for um programa menos experimental, talvez valha a pena, mas parece que é mais um lance de curiosidade, então acho melhor NÃO usar uma função dentro da outra...

É eu to levando fé no meu programa, aqui vai uma versão um pouco mais atualizada com algumas funções mas sem o seu script por enquanto :

Código:
line_width[id,width]
circle_add[x,y] // não coloquei para checar mais de um algarismo ainda
line_add[x,y] // não coloquei para checar mais de um algarismo ainda
circle_dimension[id,dimension]
point_add[id]

Não vou precisar de usar uma função dentro da outra não.

Kapoty

Ranking : Nota B
Número de Mensagens : 635
Data de inscrição : 05/11/2011
Notas recebidas : E + D + C + B + D +B + A
Reputação : 22
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Re: Comandos

Mensagem por Conteúdo patrocinado Hoje à(s) 01:00


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