10. Exercício #1

    Compartilhe
    avatar
    Um Geek
    Mensagens Nível 4
    Mensagens Nível 4

    Título : Carinha que mora logo ali
    Mensagens : 310
    Reputação : 83
    Desde : 07/03/2017
    Localização : BH - MG
    Link : http://emcodigo.blogspot.com.br/

    Re: 10. Exercício #1

    Mensagem por Um Geek em Qua 05 Jul 2017, 20:29

    @Furiioso escreveu:Diminui bastante,em... :Y:

    Valeu! Removendo a interação diminuiria mais umas 12 linhas ou mais. Claro que isto graças a bastante pesquisa e ajuda dos mestres Yoda's do cleo no fórum (XD)

    @Matheus Rivaldo escreveu:Script foda. Eu usaria WHILE em vez de REPEAT, mas isso vai do gosto de cada um :v:

    Só uso while onde preciso fazer alguma checagem ou coisa do tipo, quando só preciso contar mesmo uso repeat que é mais pratico nisto


    ____________________


    avatar
    israel
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Irineu
    Mensagens : 662
    Reputação : 111
    Desde : 22/09/2015
    Idade : 19
    Localização : Salvador - BA

    Re: 10. Exercício #1

    Mensagem por israel em Qua 05 Jul 2017, 23:39

    Legal. :)


    ____________________
    " Everyone gonna remember my name ! "
    avatar
    ThiagoD
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 6
    Reputação : 0
    Desde : 18/07/2017
    Idade : 26
    Localização : parana

    Sera que ficou bom??

    Mensagem por ThiagoD em Ter 18 Jul 2017, 17:17

    Spoiler:

    Código:
    /*ESSSE SCRIPT CRIA VARIAVEIS COM VALORES ALEATORIOS, CHECA ESSES VALORES E OS TRANSFORMA
    EM UM VALOR ESPECIFICO, SEGUNDO O QUE FOI PEDIDO NO
    EXERCICIO DO BLOG BRASILIAN MODDING STUDIO: http://brmodstudio.forumeiros.com/t5989-10-exercicio-1
    */
    SCRIPT_START
    {
    NOP
    //Criando as variaveis
    LVAR_INT var1
    LVAR_INT var2
    LVAR_INT var3
    LVAR_INT var4
    LVAR_INT var5
    WAIT 0


    iniciarProcesso:
    WAIT 0
    //O processo so começa quando o usuario pressionar a tecla B, enquanto isso sera impressa uma msg na tela dizendo para pressionar a tecla B.
    IF NOT IS_KEY_PRESSED VK_KEY_B
        PRINT_FORMATTED_NOW "Precione B para Iniciar o Processo" 1000
        GOTO iniciarProcesso  
    ENDIF

    exercicio1:
    WAIT 0

    //Definindo variaveis aleatorias
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var1
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var2
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var3
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var4
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var5
    //Imprimindo uma msg na tela, por alguns segundos, com as variaveis aleatorias.
    PRINT_FORMATTED_NOW "Todas as variaveis aleatorias: %d %d %d %d %d" 4113 var1 var2 var3 var4 var5
    WAIT 4113

    //O operador IF checa se var1 eh menor que 12, se sim, o operador WHILE vai adicionar 1 (uma unidade) ao valor de var1 ate que o seu valor seja igual a 12.
    IF var1 < 12
        WHILE var1 < 12
            var1 += 1
            WAIT 0
        ENDWHILE
    ENDIF
    //o operador IF checa se var1 eh maior que 12, se sim, o operador WHILE vai subtrair 1 (uma unidade) do valor de var1 ate que o seu valor seja igual a 12.
    IF var1 > 12
        WHILE var1 > 12
            var1 -= 1
            WAIT 0
        ENDWHILE
    ENDIF
    //daqui ate a linha 138, o mesmo processo que acontece com a var1 nos codigos acima (linha 73 ate linha 86), acontecera com as variaveis: var2, var3, var4 e var5.
    IF var2 < 12
        WHILE var2 < 12
            var2 += 1
            WAIT 0
        ENDWHILE
    ENDIF
    IF var2 > 12
        WHILE var2 > 12
            var2 -= 1
            WAIT 0
        ENDWHILE
    ENDIF
    //*******************************
    IF var3 < 12
        WHILE var3 < 12
            var3 += 1
            WAIT 0
        ENDWHILE
    ENDIF
    IF var3 > 12
        WHILE var3 > 12
            var3 -= 1
            WAIT 0
        ENDWHILE
    ENDIF
    //*******************************
    IF var4 < 12
        WHILE var4 < 12
            var4 += 1
            WAIT 0
        ENDWHILE
    ENDIF
    IF var4 > 12
        WHILE var4 > 12
            var4 -= 1
            WAIT 0
        ENDWHILE
    ENDIF
    //*******************************
    IF var5 < 12
        WHILE var5 < 12
            var5 += 1
            WAIT 0
        ENDWHILE
    ENDIF
    IF var5 > 12
        WHILE var5 > 12
            var5 -= 1
            WAIT 0
        ENDWHILE
    ENDIF
    //O computador checa se todas as variaveis sao iguais a 12
    IF var1 = 12
    AND var2 = 12
    AND var3 = 12
    AND var4 = 12
    AND var5 = 12
    //Se sim, uma msg eh impressa na tela com o valor (12) das variaveis por alguns sefundos e, depois retorna para "iniciarProcesso"
        PRINT_FORMATTED_NOW "Todas as variaveis sao 12: %d %d %d %d %d" 10000 var1 var2 var3 var4 var5
        WAIT 10000
        GOTO iniciarProcesso
    //Caso alguma variavel nao seja igual a 12, o processo retorna para "exercicio1"
    ELSE
        GOTO exercicio1
    ENDIF

    }
    SCRIPT_END

    Esse foi o jeito que fiz, mas andei olhando o pessoal ai e acho que poderia ter feito diferente... aponte meus erros!
    avatar
    Matheus Rivaldo
    Scripter CLEO - Básico
    Scripter CLEO - Básico

    Título : Noob
    Mensagens : 789
    Reputação : 28
    Desde : 13/08/2015
    Localização : Passo de Torres - SC

    Re: 10. Exercício #1

    Mensagem por Matheus Rivaldo em Ter 18 Jul 2017, 17:23


    O Script parece estar bom philosoraptor. Só não entendi esse monte de waits. Você poderia ter usado arrays e gosubs/cleo_calls, mas não sei se você
    chegou nessa parte dos tutoriais ainda. Ou talvez você pudesse fazer tudo em uma label só, mas talvez você fez assim pra ficar mais bonitinho philosoraptor. Uma dica: ao invés de usar var += 1, você pode usar var++. E var -= 1, var--.


    ____________________
    Caso te ajudei em algo, clique no botão de reputação (o "+" no canto superior direito da mensagem).

    avatar
    ThiagoD
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 6
    Reputação : 0
    Desde : 18/07/2017
    Idade : 26
    Localização : parana

    Re: 10. Exercício #1

    Mensagem por ThiagoD em Qua 19 Jul 2017, 21:15

    Matheu Rivaldo, ainda nao sei usar bem esses "WAITs" vamos ver se melhoro...

    nao usei array/cleo_calls, pq (sim, realmente nao tinha chegado a essa parte do tutorial) ate a parte 10 desse tutorial, esses temas nao foram abordados, logo, acredito que era pra utilizar apenas os conhecimentos aprendidos ate o momento (parte 10 do tutorial), entende?

    vc disse que eu poderia fazer tudo em apenas uma label, como? E... como vc teria feito esse exercicio?? (apenas utilizando o que foi passado ate a parte 10 do tutorial)

    cara, n achei o sinal de + (verdinho) que vc falou... so achei dois + (amarelinhos) que estao do lado de "editar", acredito que nao sejam esses, neeh?
    avatar
    Matheus Rivaldo
    Scripter CLEO - Básico
    Scripter CLEO - Básico

    Título : Noob
    Mensagens : 789
    Reputação : 28
    Desde : 13/08/2015
    Localização : Passo de Torres - SC

    Re: 10. Exercício #1

    Mensagem por Matheus Rivaldo em Qua 19 Jul 2017, 21:46

    Acho que pra dar reputação precisa ter umas 50 mensagens philosoraptor

    Eu faria assim:
    code:

    Código:

    SCRIPT_START
    {
        NOP
        LVAR_INT var1 var2 var3 var4 var5
        GENERATE_RANDOM_INT_IN_RANGE 0 100 var1
        GENERATE_RANDOM_INT_IN_RANGE 0 100 var2
        GENERATE_RANDOM_INT_IN_RANGE 0 100 var3
        GENERATE_RANDOM_INT_IN_RANGE 0 100 var4
        GENERATE_RANDOM_INT_IN_RANGE 0 100 var5
        MAIN_LOOP:
        WAIT 0

        IF var1 > 12
            var1--
        ENDIF
        IF var2 > 12
            var2--
        ENDIF
        IF var3 > 12
            var3--
        ENDIF
        IF var4 > 12
            var4--
        ENDIF
        IF var5 > 12
            var5--
        ENDIF
        IF var1 < 12
            var1++
        ENDIF
        IF var2 < 12
            var2++
        ENDIF
        IF var3 < 12
            var3++
        ENDIF
        IF var4 < 12
            var4++
        ENDIF
        IF var5 < 12
            var5++
        ENDIF

        IF IS_KEY_PRESSED VK_KEY_B
            PRINT_FORMATTED_NOW "%d %d %d %d %d" 1000 var1 var2 var3 var4 var5
            WHILE IS_KEY_PRESSED VK_KEY_B
                WAIT 0
            ENDWHILE
        ENDIF

        IF IS_KEY_PRESSED VK_KEY_K
            GENERATE_RANDOM_INT_IN_RANGE 0 100 var1
            GENERATE_RANDOM_INT_IN_RANGE 0 100 var2
            GENERATE_RANDOM_INT_IN_RANGE 0 100 var3
            GENERATE_RANDOM_INT_IN_RANGE 0 100 var4
            GENERATE_RANDOM_INT_IN_RANGE 0 100 var5
            WHILE IS_KEY_PRESSED VK_KEY_K
                WAIT 0
            ENDWHILE
        ENDIF
        
        GOTO MAIN_LOOP
    }
    SCRIPT_END
    Talvez esteja meio ruim philosoraptor


    Última edição por Matheus Rivaldo em Qui 20 Jul 2017, 00:49, editado 1 vez(es)


    ____________________
    Caso te ajudei em algo, clique no botão de reputação (o "+" no canto superior direito da mensagem).

    avatar
    WinterCat
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 30
    Reputação : 6
    Desde : 19/10/2016

    Re: 10. Exercício #1

    Mensagem por WinterCat em Qua 19 Jul 2017, 23:54

    Não sei se dá pra ser mais instantâneo que isso   Fuch That Guy :

    Código:

    Código:
    SCRIPT_START
    {
        NOP

        LVAR_INT iConstVar iRandomVar[5] iTempVar
     
        WHILE NOT iTempVar > 4
            iConstVar = 12
            GENERATE_RANDOM_INT_IN_RANGE 0 100 iRandomVar[iTempVar]
            iConstVar -= iRandomVar[iTempVar]
            iRandomVar[iTempVar] += iConstVar
            iTempVar++
        ENDWHILE
     
        PRINT_FORMATTED_NOW "Todas as variaveis sao 12: %i %i %i %i %i" 10000 iRandomVar[0] iRandomVar[1] iRandomVar[2] iRandomVar[3] iRandomVar[4]
    }
    SCRIPT_END
    avatar
    Junior_Djjr
    Scripter CLEO - Avançado
    Scripter CLEO - Avançado

    Título : Não quero acreditar, quero saber.
    Mensagens : 21712
    Reputação : 643
    Desde : 03/05/2012
    Idade : 21
    Localização : Ibitinga - SP
    Link : www.MixMods.com.br

    Re: 10. Exercício #1

    Mensagem por Junior_Djjr em Qui 20 Jul 2017, 07:49

    ↑ Esse método aí é praticamente (ou É) o mais eficaz e curto possível.
    Também poderia ser por REPEAT, mas possivelmente o WHILE é mais bem vindo ainda.


    ____________________

    Mestre3224 voltou, ainda há esperanças no Youtube.
    avatar
    ThiagoD
    Mensagens Nível 1
    Mensagens Nível 1

    Mensagens : 6
    Reputação : 0
    Desde : 18/07/2017
    Idade : 26
    Localização : parana

    Re: 10. Exercício #1

    Mensagem por ThiagoD em Qui 20 Jul 2017, 15:20

    @WinterCat escreveu:Não sei se dá pra ser mais instantâneo que isso   Fuch That Guy :

    Código:

    Código:
    SCRIPT_START
    {
        NOP

        LVAR_INT iConstVar iRandomVar[5] iTempVar
     
        WHILE NOT iTempVar > 4
            iConstVar = 12
            GENERATE_RANDOM_INT_IN_RANGE 0 100 iRandomVar[iTempVar]
            iConstVar -= iRandomVar[iTempVar]
            iRandomVar[iTempVar] += iConstVar
            iTempVar++
        ENDWHILE
     
        PRINT_FORMATTED_NOW "Todas as variaveis sao 12: %i %i %i %i %i" 10000 iRandomVar[0] iRandomVar[1] iRandomVar[2] iRandomVar[3] iRandomVar[4]
    }
    SCRIPT_END
    nao entendi o que esta acontecendo nesse codigo... alguem poderia explicar o "passo-a-passo so codigo???

    e ja aproveitando... porque causa, motivo, razao ou circunstancia esta dando este erro na hora de compilar: "too many arguments"

    Código:
    SCRIPT_START
    {
        NOP
    LVAR_INT var0 var1 var2 var3 var4
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var0
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var1
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var2
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var3
    GENERATE_RANDOM_INT_IN_RANGE 0 100 var4
    main_loop:
    WAIT 0

    IF var0 > 12
        var0--
    ENDIF
    IF var0 < 12
        var0++
    ENDIF
    ///////////////////////
    IF var1 > 12
        var1--
    ENDIF
    IF var1 < 12
        var1++
    ENDIF
    ///////////////////////
    IF var2 > 12
        var2--
    ENDIF
    IF var2 < 12
        var2++
    ENDIF
    ///////////////////////
    IF var3 > 12
        var3--
    ENDIF
    IF var3 < 12
        var3++
    ENDIF
    ///////////////////////
    IF var4 > 12
        var4--
    ENDIF
    IF var4 < 12
        var4++
    ENDIF
    ///////////////////////
    IF var0 = 12
    AND var1 = 12
    AND var2 = 12
    AND var3 = 12
    AND var4 = 12
        PRINT_STRING_NOW "%d %d %d %d %d" 1000 var0 var1 var2 var3 var4
    ENDIF
    }
    SCRIPT_END

    nao me parecem tantos argumentos assim...
    obrigado!
    avatar
    Matheus Rivaldo
    Scripter CLEO - Básico
    Scripter CLEO - Básico

    Título : Noob
    Mensagens : 789
    Reputação : 28
    Desde : 13/08/2015
    Localização : Passo de Torres - SC

    Re: 10. Exercício #1

    Mensagem por Matheus Rivaldo em Qui 20 Jul 2017, 15:41

    Explicação do código do WinterCat:

    No código dele alí, ele declara uma variável, uma array com 5 espaços e uma variável pra ir alternando entre os espaços da array. Daí ele cria um loop, e esse loop faz as operações que estão dentro dele, enquanto a variável iTempVar for menos do que 4. Essa iTempVar, é a variável que vai alternar entra os 5 espaços dentro da array, então começa por 0, e depois vai 1, 2, 3, 4. Dentro do loop, ele seta a variável iConstVar para 12, gera um número de 0 à 99 na array iRandomVar[iTempVar], que no caso, está no espaço 0 da array, pois iTempVar é 0 neste momento. Depois ele subtrai o valor que está na variável iConstVar, que é 12, pelo valor que está no atual espaço da array. Com isso, a variável iConstVar estará com um determinado valor (depois da subtração). Então, ele soma o valor aleatório, que está no atual espaço da array, com o valor que está na variável iConstVar. Depois disso, aumenta o valor da iTempVar. Depois de aumentar o valor da iTempVar, o script volta pro começo, pois ela ainda não é 4, agora ela é 1, então ele fará as operações no espaço 1 da array, e assim vai. Se a explicação estiver confusa, me diga.
    Sobre o seu código:
    O erro está na função PRINT_STRING_NOW, ela só tem 2 argumentos, a string e o tempo que ele ficará sendo mostrada. Você deveria usar PRINT_FORMATTED_NOW. Você também esqueceu de voltar pro começo do loop, com GOTO main_loop. Detalhe: Você pode setar o argumento de tempo para 1, pois você está num loop.


    ____________________
    Caso te ajudei em algo, clique no botão de reputação (o "+" no canto superior direito da mensagem).


    Conteúdo patrocinado

    Re: 10. Exercício #1

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Dom 23 Jul 2017, 23:46