[RESOLVIDO] Ajuda em sistema de condições

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

Resolvido [RESOLVIDO] Ajuda em sistema de condições

Mensagem por Adriano Heartless em Ter 29 Mar 2011, 12:20

Fala galera viciada do GM O/
Estou aqui mais uma vez para pedir ajuda pos estou desenvolvendo um jogo educativo e a galera aqui do fórum tem me ajudado bastante. Se alguem puder me dar umas dicas para facilitar a programação ou alguma opinião vai ajudar muito lol. Então vamos lá!

Bom estou fazendo uma atividade onde aparecerá um pequeno trecho de um poema na tela.

As palavras de cada verso apareceram grudades umas nas outros sem espaço:

exemplo "chucknorriséocaramaispoderosodouniverso!"

O objetivo desse ativdade é clicar nos espaços onde as apalavras estão juntas para separar cada palavra ficando assim no final

"chuck norris é o cara mais poderoso do universo!"

Logo abaixo tem uma imagem para mostar como está o desenvolvimento




Bom, eu fiquei desesperado para fazer isso e conseguir fazer da seguinte maneira vou falar passo a passo o que fiz

:::: LÓGICA :::::

Criei uma variavel global onde se ela for false seria sem espaço e true com espaço
false >> Estoucomdordebarriga
true >> Estou com dor de barriga
Criei varios objetos chamados "espaços" no lugar de onde vai ser clicado para quando a pessoa clicar ali na verdade esta clicando no objeto espaço onde trocaria a variavel para true fazendo assim o efeito de espaço entre as palavras






:::: PASSO A PASSO:::::

--> Criei um objeto chamado "controle"
--> No create dele criei uma variavel chamada global.espaco e numerei para cada espaço que deverá ser clicada na atividade.

global.espaco[1]=false;
global.espaco[2]=false;
global.espaco[3]=false;
// verso 2
global.espaco[4]=false;
global.espaco[5]=false;
global.espaco[6]=false;
...

-->No DRAW do objeto controle eu executei o seguinte codigo

//ESTROFE 1
// VERSO 1
// JACARÉFOIALAGOA

if global.espaco[1]=false and global.espaco[2]=false and global.espaco[3]=false{
draw_text(95,130,"Jacaréfoialagoa.")}


// JACARÉ FOIALAGOA
if global.espaco[1]=true and global.espaco[2]=false and global.espaco[3]=false{
draw_text(95,130,"Jacaré foialagoa.")}


// JACARÉFOI ALAGOA
if global.espaco[1]=false and global.espaco[2]=true and global.espaco[3]=false{
draw_text(95,130,"Jacaréfoi alagoa.")}


// JACARÉFOIA LAGOA
if global.espaco[1]=false and global.espaco[2]=false and global.espaco[3]=true{
draw_text(95,130,"Jacaréfoia lagoa.")}

// JACARÉ FOIA LAGOA ( VERSO 1 COMPLETO)
if global.espaco[1]=true and global.espaco[2]=true and global.espaco[3]=true{
draw_text(95,130,"Jacaré foi a lagoa.")}

...

-->E por final criei varios objetos chamado "espaco_1", "espaco_2" ...
Coloquei eles no lugar dos espaços onde deve ser clicado
E ao ser clicado muda o valor da respectiva variavel para verdadeiro


Objeto espaco_1
Left Pressed >>
global.espaco[1]=true;
instance_destroy();





É isso pessoal, só que vem o ploblema agora com esse formato que cliquei. Eu fiz as conta e desanimei com o resultado. Vou falar o porque

No terceiro verso por exemplo são 7 espaços
Logo são 7 variaveis com 2 possibilidades diferente, true e false

Eu teria que programar todas as possibilidades ou seja
2.2.2.2.2.2.2= 128 O____O

Eu teria que fazer 128 possibilidades diferente de true e false para cada variavel!!!!!!!!!!!!!!!!!!!!!!!!!! >.<
Teria que fazer isso aqui 128 vezes

""
// JACARÉ FOIA LAGOA ( VERSO 1 COMPLETO)
if global.espaco[1]=true and global.espaco[2]=true and global.espaco[3]=true{
draw_text(95,130,"Jacaré foi a lagoa.")}
""




Pessoal se alguem tiver uma dica para facilitar ou então me der algum conselho sobre como posso fazer isso ai em cima por favor me falem. Enquanto isso eu estou programado umas das 128 possibilidades pale


Última edição por adriano Heartleless em Dom 26 Jun 2011, 01:22, editado 1 vez(es)

Adriano Heartless

Número de Mensagens : 95
Idade : 27
Data de inscrição : 12/02/2011
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://ganelse.blogspot.com.br/

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Ajuda em sistema de condições

Mensagem por Math Maker em Ter 29 Mar 2011, 16:48

Cara, você pode usar a família string e tornar isso MUITO mais fácil a partir de uma função baseada no número de letrar, largura da str e altura da str. Usa-se três variáveis: texto1 (embaralhado), texto2 (terminado), texto_modi (arrumando o texto1).

Dividindo a largura da string pelo número de letras se obtem um espaço padrão no qual pode ser dividido pela localização do mouse ao clicar (como uma escala), que pode ser arredondado com uma função do GM.

Com todos os cálculos você pode programar para ser inserido a str " " (espaço) a frente da letra clicada. No final se compara texto_mod com o texto2, quando iguais o problema está resolvido, entende? Precisa-se de algumas variáveis a mais (como uma para guardar a l clicada, etc).

Fiz aqui e deu certo, não vou dar mastigadinho, mas estiver com dificuldades é só falar.

Math Maker

Número de Mensagens : 107
Idade : 21
Data de inscrição : 26/02/2011
Reputação : 6
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Ajuda em sistema de condições

Mensagem por Adriano Heartless em Qui 31 Mar 2011, 01:05

uhmm usando string deve ser melhor do que o modo que estou fazendo. Não sou muito familharizado com string mas, vou estudar e ver como ela funciona
Cara muito obrigado pela ajuda. Pelo seu jeito é bem mais simples porem ainda é muito tecnico para mim. Nada que uma boa leitura e tópicos daqui não faça. Você me deixou no caminho certo vlw Happy

Adriano Heartless

Número de Mensagens : 95
Idade : 27
Data de inscrição : 12/02/2011
Reputação : 2
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0

http://ganelse.blogspot.com.br/

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Ajuda em sistema de condições

Mensagem por Fuzenrad em Qui 31 Mar 2011, 08:54

Só complementando/corrigindo o que o Math Maker disse, você usa o string_width que retorna o tamanho da palavra em pixels, porém só funciona corretamente com uma fonte regular (com todas as letras da mesma largura), se usar o Arial por exemplo, a letra 'I' tem uma largura diferente do 'W', isso dá uma diferença significativa na hora de clicar, ou seja, vai adicionar espaço no lugar errado, além disso pra localizar um espaço pelo mouse, você deve considerar 2 variáveis, as posições x do mouse e do objeto na tela e o string_width do texto, dividindo string_width pelo string_length, assim você obtém um valor em pixels que cada caracter ocupa na palavra e não a posição dele, fora que o string_insert adiciona na exata posição que você informar, então deve ser valor+1 (pra adicionar na frente da letra escolhida), até a 'função de arredondar' deve ser pensada, a melhor escolha é o ceil, que arredonda sempre pra cima, pode ser 1.01 ou 1.90, ele mostrará 2.

Você está iniciando agora, seria difícil você pegar um raciocínio assim de cara, então vou deixar os códigos aqui, mas lembre-se, estude, não copie e cole apenas, tudo bem?

/* CREATE */
texto="SAPONÃOLAVAOPÉ" //Texto qualquer
fixedsys=font_add("FixedSys",12,0,0,0,255) //Fonte regular FixedSys

/* STEP */
val=ceil((mouse_x-x)/(string_width(texto)/string_length(texto)))
/* Calcula a posição em caracteres considerando a posição do mouse em relação à posição x do objeto e o tamanho da palavra */

if mouse_check_button_pressed(mb_left)
texto=string_insert(" ",texto,val+1);
/* Se botão esquerdo do mouse for pressionado, adiciona na posição atual do mouse +1 */

/* DRAW */
draw_set_font(fixedsys)
draw_text(x,y,texto)

Um defeito desse código, é que adiciona espaço em qualquer lugar, até mesmo em lugares onde já existe um espaço, a solução é verificar se o caracter da posição escolhida é diferente de " " (espaço), assim:

if string_char_at(texto,val)!=" " and string_char_at(texto,val+1)!=" " {
//( ... )
}

Outro problema é que só funciona na primeira linha, o string_width só retorna a largura, não importando se tem 1 ou 10 linhas, pra corrigir isso você deverá calcular considerando posição y do mouse e somar as larguras das linhas anteriores para verificar a posição na linha corrente, é fácil eu diria, só dar uma estudada.
Dica: Use o string_height.

Sua segunda opção é usar uma array no lugar dos espaços, primeiro você indica por meio de um for que todos os espaços são vazios, assim:

for (k=0; k<=200; k+=1) {
e[k]=""; }

//O 200 representa a quantidade de espaços.

Segundo, modifica todo o texto pra ficar com o array nos lugares correspondentes aos espaços:
texto="Jacaré"+e[0]+"foi"+e[1]+"a"+e[2]+"lagoa.";

Se mostrar na tela agora, aparecerá: Jacaréfoialagoa.

E por fim adiciona um espaço na array correspondente ao espaço, logo pra fazer a frase ficar correta, os valores e[0], e[1] e e[2] devem possuir o char 'espaço', assim:

e[0]=" ";
e[1]=" ";
e[2]=" ";

É uma maneira mais simples, porém trabalhosa, mas não tanto quanto a que você estava usando. Aconselho usar a primeira.


Última edição por fUzEnRaD em Sab 16 Abr 2011, 15:59, editado 1 vez(es)

Fuzenrad

Ranking : Nota A
Número de Mensagens : 1026
Idade : 26
Data de inscrição : 04/07/2010
Notas recebidas : A-A-A-A-B
Reputação : 41
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 1
   : 0
   : 1

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Ajuda em sistema de condições

Mensagem por saim em Sex 01 Abr 2011, 09:48

Isso pode ser útil pra um projeto que eu tenho engavetado, portanto vou colocar um texto inútil aqui pra facilitar seguir o tópico.
Pro texto não ficar totalmente inútil, umas dicas bobas relativas ao código do fUzEnRaD:
- A menos que existam outros objetos definido a fonte, na room, usar draw_set_font no create, ao invés do draw, economiza memória. Havendo outros objetos, tem que ser no draw mesmo.
- Prefiro usar o evento de soltar o botão do mouse. Dá tempo do jogador mudar de idéia e soltar o botão longe de onde aconteceria alguma coisa.

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

Resolvido Re: [RESOLVIDO] Ajuda em sistema de condições

Mensagem por Markituh em Sex 01 Abr 2011, 10:34

Com o "SAPONÃOLAVAOPÉ" fica legal, mas quando eu coloco a frase que ele queria, "chucknorriséocaramaispoderosodomundo", tem um certo problema em relação a posição em que adiciona o espaço. Se eu clico na letra "s" de "Norris", ele adiciona antes do S, não na frente. E as vezes quando clico no meio de algumas letras, nem acontece nada. (Como por exemplo no meio da letra "R" e "I" de "Norris". De qualquer modo, esse método é muito interessante, serve EXATAMENTE para o que ele diz. Destaquei o exatamente porque se eu uso o ceil para desenhar uma linha(para fazer uma espécie de cursor), não fica alinhado. =/
saim escreveu: A menos que existam outros objetos definido a fonte, na room, usar draw_set_font no create, ao invés do draw, economiza memória. Havendo outros objetos, tem que ser no draw mesmo.
Não seria "Não havendo outros objetos, tem que ser no draw mesmo"? Pois quando tem vários objetos usando os Draw Sets, o Draw de um objeto pode afetar o do outro, e assim sucessivamente. Para driblar isso, só usar no Create, que só irá definir para o próprio objeto. Estou correto?

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Resolvido Re: [RESOLVIDO] Ajuda em sistema de condições

Mensagem por saim em Sex 01 Abr 2011, 13:24

Markituh escreveu:
saim escreveu: A menos que existam outros objetos definido a fonte, na room, usar draw_set_font no create, ao invés do draw, economiza memória. Havendo outros objetos, tem que ser no draw mesmo.
Não seria "Não havendo outros objetos, tem que ser no draw mesmo"? Pois quando tem vários objetos usando os Draw Sets, o Draw de um objeto pode afetar o do outro, e assim sucessivamente. Para driblar isso, só usar no Create, que só irá definir para o próprio objeto. Estou correto?
Não. Os draw_sets são globais, de forma que usar só no create e havendo mais de um objeto definindo alguma coisa, a última definição valerá para todos os objetos. Se você coloca no draw, antes de desenhar e em todos objetos, cada um irá re-definir o status do draw e usar da forma que for mais conveniente.

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

Resolvido Re: [RESOLVIDO] Ajuda em sistema de condições

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


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