Repetições (for, while, do until, repeat)

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

Repetições (for, while, do until, repeat)

Mensagem por reddragon em Dom 14 Ago 2011, 21:37

Nome: Repetições (for, while, do until, repeat)
Nível de dificuldade: iniciante/mediano
Requerimentos: qualquer versão

Esses comandos são conhecidos como estruturas de repetição, repetição porque é exatamente isso que elas fazem repetem parte do script que você pedir o tanto de vesses que for necessário.

Entretanto podemos separar essas duas funções em duas categorias: Alto controle(for, repeat), baixo controle(while, do until).

alto controle porque no for o numero de vezes que você pedir para que o script aconteça sera o numero de vezes que ele vai acontecer. baixo controle é porque você pode não saber a quantidade de vezes que o seu código poderá rocar.

o for você só consegue contruí-lo com a ajuda de um índice conhecido também como index, abreviado como i. você da um inicio para i fala até onde ele vai e da um passo para ele. o inicio é dado atribuindo um valor a i ( i = 0 ), o passo é dado com uma formula (i = i + 1), isso é, a cada ciclo o i vai ganhar mais 1, e para dizer até onde você faz uma pergunta (i < 5) enquanto essa pergunta for respondida com um SIM o ciclo se repete se for respondida com um NÂO o ciclo para, então a quantidade de vezes esta diretamente ligada com a forma que você configurá seu for.

for(inicialização; pergunta ; formula)

com nosso exemplo fica:

for(i = 0; i < 5; i = i + 1)

esse nosso exemplo haverá 5 ciclos para melhor ser visto teste este script em um evento draw.

Código:
for(i = 0; i < 5; i = i + 1){
    draw_text(x, y + (i * 16), "i = " + string(i))
}


para testar mude o valor da pergunta por exp. i < 2 ou i < 10.

while e de baixo controle porque para finalizar os ciclos você só precisa fazer a pergunta para ele.

white(pergunta)

e é como o for se a pergunta for respondida com um SIM repete novamente e se NÂO, não repete mais.

teste esse script em um evento create para você ver:

Código:
texto = " "

while(texto != "s"){
    texto = get_string("o ultimo texto digitado foi |=>" + string(texto) + "<=| digite 's' para sair","")
}

game_end()


cada vez que a mensagem aparece quer dizer que foi feito mais um ciclo e ao contrario do for essa quantidade de ciclos não foi programada.

do until é equivalente a while de baixo controle e existem duas diferença a primeira é que while faz a pergunta no começo e já do until faz a pergunta no final, a segunda é que enquanto while espera um SIM para repetir do until espera um NÃO, isto é, se a resposta a pergunta for NÃO repeti-se o código, se a resposta for SIM os ciclos terminam

substitua o script do while por o do do until:

Código:
do{
    texto = get_string("o ultimo texto digitado foi |=>" + string(texto) + "<=| digite 's' para sair","")
}until(texto = "s")

game_end()


Enquanto while pode nem acontecer do until tem de acontecer no minimo 1 vez, note que para while eu tenho que pre definir texto já no do until não foi preciso.

repeat é equivalente ao for alto controle mas é bem mais simples é só dizer para ele a quantidade de vezes que você quer.


Código:
i = 0
repeat(5){
    draw_text(x, y + (i * 16), "i = " + string(i))
    i = i + 1
}


espero que tenha entendido e para mais explicações de uma olhada no help do GM esta em inglês mas é só jogar la no Google tradutor que já ajuda.

por ultimo quero agradecer a Super Maker que me perguntou como usar repetições e foi pro causa dele que passei 2 horas montando essa explicação e resolvi posta-la a todos.


Última edição por reddragon em Ter 16 Ago 2011, 18:35, editado 1 vez(es)

reddragon

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Repetições (for, while, do until, repeat)

Mensagem por Super Maker em Seg 15 Ago 2011, 07:28

Algumas coisa de while e for i eu não sabia.
Valeu mesmo irmão, eu tava precisando disso.

Super Maker

Número de Mensagens : 646
Idade : 33
Data de inscrição : 09/07/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

Re: Repetições (for, while, do until, repeat)

Mensagem por Nedotavio1807 em Seg 15 Ago 2011, 11:32

So achei um pouco confuso na parte do "i" (index), porque não faço ideia da sua função e ja estava querendo descobrir a um tempo, mas parabéns pelo tuto é bom ver eles a ativa denovo

Nedotavio1807

Ranking : Nota D
Número de Mensagens : 261
Idade : 23
Data de inscrição : 10/10/2010
Notas recebidas : D
Reputação : 3
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Repetições (for, while, do until, repeat)

Mensagem por Lucas 5293 em Seg 15 Ago 2011, 11:43

Bom tutorial vai ajudar muita gente que tem duvidas

E espero que voçê volte de vez para o fórum e faça mais tutoriais

Lucas 5293

Ranking : Nota C
Número de Mensagens : 695
Idade : 18
Data de inscrição : 10/12/2010
Notas recebidas : C-D-B-B-B-C-C-C
Reputação : 18
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 1
   : 0

http://dopxgames.blogspot.com

Voltar ao Topo Ir em baixo

Re: Repetições (for, while, do until, repeat)

Mensagem por Super Maker em Seg 15 Ago 2011, 13:07

reddragon escreveu:
Código:
do{
    texto = get_string("o ultimo texto digitado foi |=>" + string(texto) + "<=| digite 's' para sair","")
}until(texto != "s")

game_end()
Pelo que eu notei nesse código, pra que ele funcione como o exemplo while, deve ser retirado o caractere "!" que indica desigualdade. Então o código irá dizer- faça o loop até que a string seja "s".

Esse foi o único detalhe que eu vi de diferente.


Última edição por Super Maker em Ter 16 Ago 2011, 19:34, editado 1 vez(es)

Super Maker

Número de Mensagens : 646
Idade : 33
Data de inscrição : 09/07/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

Re: Repetições (for, while, do until, repeat)

Mensagem por reddragon em Ter 16 Ago 2011, 18:34

Erro meu Super Maker na hora não lembrei disso mas já ta corregido

reddragon

Número de Mensagens : 267
Idade : 27
Data de inscrição : 19/03/2008
Reputação : 0
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Repetições (for, while, do until, repeat)

Mensagem por Luca$ em Qua 17 Ago 2011, 16:17

Muito bom o tutorial, conteúdo ótimo.
Acho que os loops(repetições), são as coisas que o pessoal aquii da GMBR mais tem dúvidas.
Só a parte de que "i",signfica index que eu nao sabia xD.

Luca$

Ranking : Nota D
Número de Mensagens : 582
Data de inscrição : 10/10/2010
Notas recebidas : D-C
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Repetições (for, while, do until, repeat)

Mensagem por Joton em Qua 17 Ago 2011, 16:22

Parabéns por mais um "totalmente excelente" tutorial, escrevi o passo-a-passo, apagando as anteriores e notei que em:

Código:
do{
    texto = get_string("o ultimo texto digitado foi |=>" + string(texto) + "<=| digite 's' para sair","")
}until(texto = "s")

game_end()

Se você copiar direto o código vai dar erro, foi isso que aconteceu comigo, precisa do texto = " " no começo para dar certo, então é pra ser assim:

Código:

texto = " "
do{
    texto = get_string("o ultimo texto digitado foi |=>" + string(texto) + "<=| digite 's' para sair","")
}until(texto = "s")

game_end()

Cara não usei até agora essas repetições, você poderia dizer no que eles são uteis no jogo, pra poder clarear minha mente Suspect anh!


Joton

Ranking : Nota B
Número de Mensagens : 836
Idade : 28
Data de inscrição : 25/07/2010
Notas recebidas : A+B+C
Reputação : 5
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 2
   : 0
   : 0

http://jotonsn.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Repetições (for, while, do until, repeat)

Mensagem por Igor KinGamer em Qua 17 Ago 2011, 16:37

Há uma infinidade de coisas que pode-se fazer usando loops ("repetições").
Ex.:
for
> Preencher a tela com quadrados, ou criar instâncias de um determinado objeto na tela toda (casos em que seria necessário colocar manualmente os objetos/tiles, um por um);
> Quando se trabalha com primitivas, para fazer algum efeito com a imagem, se separa a imagem em vários pedacinhos, e se desenha um por um, aplicando o efeito ou seja lá o que for, usando for (vide efeito do Gouki no GM Fighters, do Capitão Commando);
> Criar objetos até haver uma determinada quantidade;
> Inicializar ou percorrer arrays;
while
> Atribuir valores aleatórios a n variáveis sem repetir nenhum
> Tem aquele típico código simplesinho: while (!place_free(x, y)) y -= 1;
> Pegar valores até chegar a um válido;

E há varias outras coisas, ainda mais fora da área de criação de jogos (Ex.: Descobrir os números primos).

Claro, para jogos mais simples, pode não haver necessidade nenhuma de loops.

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

Re: Repetições (for, while, do until, repeat)

Mensagem por Super Maker em Qua 17 Ago 2011, 20:19

Graças ao reddragon eu dominei esses loops!
O que eu gostei também foi de aprender arrays.
Claro que como todos no início eu nem imaginava como fazer, mas olha só esse exemplo que eu criei.
No create...
Código:
wordArray[0] = "A";
wordArray[1] = "B";
wordArray[2] = "C";
wordArray[3] = "D";
wordArray[4] = "E";
wordArray[5] = "F";
wordArray[6] = "G";
wordArray[7] = "H";
wordArray[8] = "I";
wordArray[9] = "J";
wordArray[10] = "K";
wordArray[11] = "L";
wordArray[12] = "M";
wordArray[13] = "N";
wordArray[14] = "O";
wordArray[15] = "P";
wordArray[16] = "Q";
wordArray[17] = "R";
wordArray[18] = "S";
wordArray[19] = "T";
wordArray[20] = "U";
wordArray[21] = "V";
wordArray[22] = "W";
wordArray[23] = "X";
wordArray[24] = "Y";
wordArray[25] = "Z";
alfabeto=0;
No step...
Código:
if alfabeto<25{
alfabeto+=1;
wordArray[]=alfabeto;
}
No draw...
Código:
draw_set_halign(fa_center)
draw_text(room_width/2,room_height/3,wordArray[alfabeto]);

Só colocar isso em uma sala pra ver o alfabeto letra por letra no mesmo lugar.
Valeu aí reddragon!!!

Super Maker

Número de Mensagens : 646
Idade : 33
Data de inscrição : 09/07/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

Re: Repetições (for, while, do until, repeat)

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


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