Help! - Show message

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

Resolvido Help! - Show message

Mensagem por tha.sribeiro em Sab 30 Ago 2014, 11:00

Pessoal, estou desenvolvendo um jogo educativo sobre mudanças climáticas (faz parte de um projeto de pesquisa) e em uma determinada parte, o jogador precisa calcular a emissão de CO² da casa dele. Então ele vai em cada comodo da casa, clica em um aparelho eletrônico e responde as perguntas relacionadas. Para fazer as perguntas estou usando show_message e recebendo os valores. Mas são muitas perguntas, que vão aparecendo conforme clicamos em 'ok'. O problema é que quando clicamos em cancelar elas continuam aparecendo (o que faz todo sentido, já que são vários 'show_messages' rs). Existe alguma maneira mais eficiente de fazer essas perguntas? Ou apenas uma maneira de cancelar todas as perguntas e não apenas a que o usuário pedir para cancelar?

Link para o jogo, caso queiram visualizar. (Não reparem nos erros, preciso ajusta-lo!)

tha.sribeiro

Número de Mensagens : 14
Data de inscrição : 30/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por matheusco em Sab 30 Ago 2014, 11:52

O jeito que vejo de resolver isso é condicionar uma pergunta à outra, colocando um contador pra ir avançando de acordo com as perguntas respondidas. Caso ele clique em cancelar, então usa um "break" ou "exit' no código.

Se clicarmos em ok, aumentamos 1 no contador perguntas, se clicarmos em cancelar, o contador é resetado. Depois fazemos algo como:

switch perguntas
{
case 1: show_message("oi")
break;
case 2: show_message("qual sua idade?")
break;
}


matheusco

Número de Mensagens : 395
Idade : 24
Data de inscrição : 10/08/2014
Reputação : 51
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://www.tutoriaisgamemaker.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por tha.sribeiro em Dom 31 Ago 2014, 12:03

matheusco escreveu:O jeito que vejo de resolver isso é condicionar uma pergunta à outra, colocando um contador pra ir avançando de acordo com as perguntas respondidas. Caso ele clique em cancelar, então usa um "break" ou "exit' no código.

Se clicarmos em ok, aumentamos 1 no contador perguntas, se clicarmos em cancelar, o contador é resetado. Depois fazemos algo como:

switch perguntas
{
case 1: show_message("oi")
break;
case 2: show_message("qual sua idade?")
break;
}



Como eu passo pra ele que se for 'ok' é uma coisa e se não for é outra?
Por exemplo:

conta = 0;
switch (conta) {
case 0:
   //Sobre o numero de moradores
       mora = real(get_string("Quantas pessoas moram na sua casa?", ""));
       global.cont_moradores = global.cont_moradores + mora;
       if (mora == 'O QUE EU COLOCO AQUI??? '  ){
           conta = conta + 1;
       }
       else {
           break;
       }
case 1:              
   //Sobre televisores
       tv1 = real(get_string("Quantas TVs grandes tem na sua casa?", ""));
       global.cont_tv = global.cont_tv + tv1;
       conta = conta + 1;
       break;

Porque se eu deixo apenas contando, como está no case 1 ele não continua a exibir as perguntas depois que eu clico em ok Sad
(Não tem mais show message porque preciso guardar os valores Very Happy )

tha.sribeiro

Número de Mensagens : 14
Data de inscrição : 30/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por matheusco em Dom 31 Ago 2014, 12:52

Não precisa colocar o contador dentro do Case, faz um código à parte pra alterar o valor de "conta" e o case você coloca as situações de acordo com essas alterações.

Se clicar em ok e a pergunta for respondida, adiciona 1 à conta, se não, mostra uma mensagem mandando responder. Um bloco de código vai verificar o avanço do jogador e o case vai "guiando" como as perguntas vão ser mostradas.

Talvez tenha um jeito mais fácil de fazer isso, mas no momento não consegui pensar em algum.

matheusco

Número de Mensagens : 395
Idade : 24
Data de inscrição : 10/08/2014
Reputação : 51
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://www.tutoriaisgamemaker.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por Isaque Onix em Dom 31 Ago 2014, 13:12

bom, ainda nao intendi oque voce quer, mais voce pode, primeiramente, trocar:
Código:
mora =
real(get_string("Quantas pessoas moram na sua casa?", ""));
Por
Código:
mora = get_integer("Quantas pessoas moram na sua casa?", 0);

e no final do switch sempre coloque a funç. default... ela evita erros no seu projeto!

Isaque Onix

Número de Mensagens : 1597
Idade : 23
Data de inscrição : 15/08/2010
Reputação : 147
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

http://spyreserver.16mb.com

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por tha.sribeiro em Dom 31 Ago 2014, 13:19

matheusco escreveu:Não precisa colocar o contador dentro do Case, faz um código à parte pra alterar o valor de "conta" e o case você coloca as situações de acordo com essas alterações.

Se clicar em ok e a pergunta for respondida, adiciona 1 à conta, se não, mostra uma mensagem mandando responder. Um bloco de código vai verificar o avanço do jogador e o case vai "guiando" como as perguntas vão ser mostradas.

Talvez tenha um jeito mais fácil de fazer isso, mas no momento não consegui pensar em algum.

Ok, muito obrigada por responder!
Mas eu não sei como colocar no game maker se a pergunta foi respondida ou não, não sei como indicar o 'ok'... (sim, sou iniciante). Seria algo do tipo

conta = 0
if (mora == ok){
conta = conta+1
}

Como eu escrevo no Game Maker se foi 'ok' ou 'cancelar'?

tha.sribeiro

Número de Mensagens : 14
Data de inscrição : 30/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por tha.sribeiro em Dom 31 Ago 2014, 13:26

Isaque Onix escreveu:bom, ainda nao intendi oque voce quer, mais voce pode, primeiramente, trocar:
Código:
mora =
real(get_string("Quantas pessoas moram na sua casa?", ""));
Por
Código:
mora = get_integer("Quantas pessoas moram na sua casa?", 0);

e no final do switch sempre coloque a funç. default... ela evita erros no seu projeto!

Oii, é que eu estou fazendo essas perguntas em sequencia (são muitas), e elas são independentes pois preciso guardar os valores das respostas. Então, quando alguém clica em cancelar, cancela apenas uma pergunta e as outras continuam aparecendo. Eu preciso fazer isso de uma maneira que cancele todas as perguntas quando o usuário clicar em cancelar. Mas nunca fiz nada no Game Maker e tenho pouca experiencia em programação, então fico perdida hahaha

tha.sribeiro

Número de Mensagens : 14
Data de inscrição : 30/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por matheusco em Dom 31 Ago 2014, 13:42

Bom, ai depende como é seu botão de "ok". Se for uma instância você pode aumentar a conta em cada clique sobre ela. Ou você pode analisar se a pergunta anterior teve uma resposta válida.

matheusco

Número de Mensagens : 395
Idade : 24
Data de inscrição : 10/08/2014
Reputação : 51
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://www.tutoriaisgamemaker.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por tha.sribeiro em Dom 31 Ago 2014, 13:52

matheusco escreveu:Bom, ai depende como é seu botão de "ok". Se for uma instância você pode aumentar a conta em cada clique sobre ela. Ou você pode analisar se a pergunta anterior teve uma resposta válida.

É uma janela do windows mesmo, ele cria sozinho. Tipo, eu coloco o real(get.... e ele já cria a pergunta com o campo de resposta e os botões ok e cancelar.

tha.sribeiro

Número de Mensagens : 14
Data de inscrição : 30/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por matheusco em Dom 31 Ago 2014, 13:56

Hm, não sei como o Game Maker verifica se apertou OK ou Cancelar nesse método :/

matheusco

Número de Mensagens : 395
Idade : 24
Data de inscrição : 10/08/2014
Reputação : 51
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://www.tutoriaisgamemaker.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por tha.sribeiro em Dom 31 Ago 2014, 14:01

matheusco escreveu:Hm, não sei como o Game Maker verifica se apertou OK ou Cancelar nesse método :/

Vou pensar em outra maneira de fazer isso.
Muito obrigada!!!

tha.sribeiro

Número de Mensagens : 14
Data de inscrição : 30/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por matheusco em Dom 31 Ago 2014, 14:05

De nada Happy

matheusco

Número de Mensagens : 395
Idade : 24
Data de inscrição : 10/08/2014
Reputação : 51
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 0

http://www.tutoriaisgamemaker.com.br

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por Igor KinGamer em Dom 31 Ago 2014, 16:05

Usando get_string, você pode testar se o valor retornado é uma string nula (get_string(...) == "", pelo menos é o que é retornado aqui ao cancelar). Se usar get_integer, como o Isaque Onix sugeriu, o único jeito é testar se o valor retornado é igual ao valor padrão (que teria que ser um valor negativo, como qualquer outro teoricamente é possível).

Se o resultado do teste for verdadeiro (uma string nula ou o valor padrão), exit. Esse comando sai na hora do script/piece of code que está sendo executado. Por exemplo:

Código:
var valor;
valor = get_string("Quantas pessoas moram na sua casa?", "");
if (valor == "")
    exit; // Para tudo
mora = real(valor);
... // Usa o valor de "mora"
valor = get_string("Quantas TVs grandes tem na sua casa?", "");
if (valor == "")
    exit;
tv1 = real(valor);
... // Usa o valor de "tv1"

Sobre o 'var valor':
O "var" em "var valor;" declara a variável como local, ou seja, ela vai existir apenas durante esse script/evento e depois desaparecer. É uma boa prática usar var para variáveis que só são necessárias na hora (como a "valor", que só é usada para o teste).

O help do GMS diz que get_string e get_integer são apenas para debug (portanto, não indicam se clicou em ok ou cancel), e que no projeto final não devem ser usadas, mas sim get_string_async e get_integer_async em vez delas. Com essas funções, dá para saber se foi apertado ok ou cancel, mas elas são um pouco mais complicadas: elas não travam o resto do jogo e retornam o valor de um jeito diferente, por meio do evento Asynchronous > Dialog.

Se quiser usar, pode ler mais sobre elas no help, mas como você "nunca fiz nada no Game Maker e tenho pouca experiencia em programação", talvez não seja uma boa ideia... Mas não vou dizer que você não vá conseguir. Very Happy

Até explicaria como usar, mas não tenho tempo... =/

Igor KinGamer

Número de Mensagens : 890
Idade : 21
Data de inscrição : 26/09/2008
Reputação : 11
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

Mensagem por tha.sribeiro em Seg 01 Set 2014, 12:37

Igor KinGamer escreveu:Usando get_string, você pode testar se o valor retornado é uma string nula (get_string(...) == "", pelo menos é o que é retornado aqui ao cancelar). Se usar get_integer, como o Isaque Onix sugeriu, o único jeito é testar se o valor retornado é igual ao valor padrão (que teria que ser um valor negativo, como qualquer outro teoricamente é possível).

Se o resultado do teste for verdadeiro (uma string nula ou o valor padrão), exit. Esse comando sai na hora do script/piece of code que está sendo executado. Por exemplo:

Código:
var valor;
valor = get_string("Quantas pessoas moram na sua casa?", "");
if (valor == "")
    exit; // Para tudo
mora = real(valor);
... // Usa o valor de "mora"
valor = get_string("Quantas TVs grandes tem na sua casa?", "");
if (valor == "")
    exit;
tv1 = real(valor);
... // Usa o valor de "tv1"

Sobre o 'var valor':
O "var" em "var valor;" declara a variável como local, ou seja, ela vai existir apenas durante esse script/evento e depois desaparecer. É uma boa prática usar var para variáveis que só são necessárias na hora (como a "valor", que só é usada para o teste).

O help do GMS diz que get_string e get_integer são apenas para debug (portanto, não indicam se clicou em ok ou cancel), e que no projeto final não devem ser usadas, mas sim get_string_async e get_integer_async em vez delas. Com essas funções, dá para saber se foi apertado ok ou cancel, mas elas são um pouco mais complicadas: elas não travam o resto do jogo e retornam o valor de um jeito diferente, por meio do evento Asynchronous > Dialog.

Se quiser usar, pode ler mais sobre elas no help, mas como você "nunca fiz nada no Game Maker e tenho pouca experiencia em programação", talvez não seja uma boa ideia... Mas não vou dizer que você não vá conseguir. Very Happy

Até explicaria como usar, mas não tenho tempo... =/

Hey, deu certo!!!! Muito obrigada Happy

tha.sribeiro

Número de Mensagens : 14
Data de inscrição : 30/08/2014
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

Voltar ao Topo Ir em baixo

Resolvido Re: Help! - Show message

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


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