Programando com Alice Tim Margush Department of Computer Science University of Akron © 2006
Programming in Alice © 2006 Dr. Tim Margush 2 Estruturas de Controle Sequencial Sequencial –doTogether{} and doInOrder{} Seleção Seleção –If Repetição Repetição –While, loop
Programming in Alice © 2006 Dr. Tim Margush 3 Mecanismos de Controle Expressões e Funções Expressões e Funções –Representando valores Valores podem ser numeros, Booleans ou outros tipos Valores podem ser numeros, Booleans ou outros tipos Uma expressão booleana e funções são usadas para controlar a seleção(if) e repetição(while) Uma expressão booleana e funções são usadas para controlar a seleção(if) e repetição(while) –if (expressão é true) faz algo –while (expressão é true) faz algo
Programming in Alice © 2006 Dr. Tim Margush 4 Métodos x Funções Métodos representam uma ação Métodos representam uma ação –object_name.method_name( ); Funções representam valores Funções representam valores –object_name.function_name( ); –Funções são usadas como argumentos ou como expressões para seleção e repetição Algo acontece ao objeto (Ex: mover, girar) Retorna um valor dependendo das propriedades de um objeto
Programming in Alice © 2006 Dr. Tim Margush 5 Valores Em programação valores podem ser de diferentes tipos Em programação valores podem ser de diferentes tipos –Tipos comuns são: numeros, letras, Booleans, strings, e objetos –Numeros normalmente são divididos entre integers(inteiros) e float(reais), as vezes podendo ter até outros tipos Misturar tipos normalmente causa problemas Misturar tipos normalmente causa problemas
Programming in Alice © 2006 Dr. Tim Margush 6 Funções embutidas Cada objeto tem um conjunto de funções embutidas que podem ser acessados na aba de funções do objeto Cada objeto tem um conjunto de funções embutidas que podem ser acessados na aba de funções do objeto –Funções estão agrupadas por funcionalidades (Ex: distância, tamanho, posição dos eixos, etc..) Uma chamada da função retorna a resposta para uma pergunta(ex: Distância do objeto até o chão Uma chamada da função retorna a resposta para uma pergunta(ex: Distância do objeto até o chão
Programming in Alice © 2006 Dr. Tim Margush 7 Funções úteis object.distanceTo( ) object.distanceTo( ) –Distância entre o objeto e o alvo Movimentação original (1m) Arraste a função para substituir o parametro(1m) Escolha o alvo como parametro Nova movimentação com a distância entre o objeto e o alvo
Programming in Alice © 2006 Dr. Tim Margush 8 Evitando colisões Para determinar quando dois objetos estão próximos você precisa considerar o volume e a posição do seu centro (distanceTo x colisão) Para determinar quando dois objetos estão próximos você precisa considerar o volume e a posição do seu centro (distanceTo x colisão) distanceTo() perto Centro perto da traseira do sapo A cabeça vai mais alto que a cauda
Programming in Alice © 2006 Dr. Tim Margush 9 Tricks para colisão Em conjunto com distanceTo, considere… Em conjunto com distanceTo, considere… x.distanceAbove(y) x.distanceAbove(y) –mede a distância vertical entre a base de x e o topo de y x.distanceBelow(y) x.distanceBelow(y) –Amede a distância vertical entre o topo de x e a base de y Veja também Veja também –distanceToTheLeftOf –distanceToTheRightOf –distanceInFrontOf –distanceBehind y x
Programming in Alice © 2006 Dr. Tim Margush 10 Usando o Editor Para usar uma função como argumento: Para usar uma função como argumento: –Primeiro crie a instrução com um simples argumento (ex 1m) –Arraste a função para o lugar do argumento para substituí-lo pelo retorno da função Você pode aplicar também funções aritméticas ao retorno da função clicando na seta no final da função Você pode aplicar também funções aritméticas ao retorno da função clicando na seta no final da função Clique, depois escolha a operação
Programming in Alice © 2006 Dr. Tim Margush 11 Dimensões Objetos tem 3 dimensões Objetos tem 3 dimensões Voce pode determinar o tamanho do box do objeto utilizando essas funções: Voce pode determinar o tamanho do box do objeto utilizando essas funções: –obj.getWidth() –obj.getHeight() –obj.getDepth() Dimensões são alteradas quando sub- partes se movem
Programming in Alice © 2006 Dr. Tim Margush 12 Execução condicional Alice usa a estrutura IF-ELSE Alice usa a estrutura IF-ELSE –if (condição é true){ faz isso faz isso –}else{ faz outra coisa faz outra coisa –} Perceba esses dois blocos Perceba esses dois blocos –SE (também chamado THEN/IF) –SENÃO (também chamado ELSE) condição Booleana SE (THEN/IF) SENÃO (ou ELSE) truefalse
Programming in Alice © 2006 Dr. Tim Margush 13 Funções Booleanas x.isSmallerThan(y) x.isSmallerThan(y) x.isWiderThan(y) x.isWiderThan(y) x.isAbove(y) x.isAbove(y) x.isBehind(y) x.isBehind(y) ELSE pode ser deixado em branco Se necessário, o treinador precisa abaixar o braço para passar na porta
Programming in Alice © 2006 Dr. Tim Margush 14 Operadores relacionais Comparação entre dois numeros é algo comum: Comparação entre dois numeros é algo comum: –if (x == y){ se x é igual a y se x é igual a y –if (x != y){ se x é diferente de y se x é diferente de y –if (x > y){ se x é maior de y se x é maior de y –if (x >= y){ se x é maior ou igual de y se x é maior ou igual de y
Programming in Alice © 2006 Dr. Tim Margush 15 Usando comparações Utilizando comparações: Utilizando comparações: –Selecione a aba de funções do objeto World –Arraste a função de comparação desejada para o código –Escolha os valores numéricos Arraste World!
Programming in Alice © 2006 Dr. Tim Margush 16 Usando comparações Arraste as propriedades desejadas para substituir os valores numéricos Arraste as propriedades desejadas para substituir os valores numéricos
Programming in Alice © 2006 Dr. Tim Margush 17 Repetição Em Alice existem quatro estruturas de repetição Em Alice existem quatro estruturas de repetição –Loop(FOR) utiliza um contador para controlar as repetições index < times index = 0 código true false index++ for (int index=0; index<times; index++){ bloco de código } contador condição de parada incremento do contador
Programming in Alice © 2006 Dr. Tim Margush 18 Ande 5 passos
Programming in Alice © 2006 Dr. Tim Margush 19 Outras estruturas de repetição Alice também tem o while Alice também tem o while while(condição é true){ while(condição é true){ –Bloco de código } condição código true false Em Alice existe um for all que repete a ação para cada item em uma lista. As ações podem ser feitas sequenciais ou em paradalelo(todas juntas)
Programming in Alice © 2006 Dr. Tim Margush 20 Exemplo: Caça ao Coelho Lobo caça o coelho! Lobo caça o coelho! Loop
Programming in Alice © 2006 Dr. Tim Margush 21 Testando a proximidade Quando o coelho está perto da cabeça do lobo, ele grita! Quando o coelho está perto da cabeça do lobo, ele grita! –Note o uso da comparação como uma expressão booleana na condição do IF abaixo
Programming in Alice © 2006 Dr. Tim Margush 22 Ficando visível! A função isFarFrom que diz se o coelho está longe do centro do chão é utilizada para fazê-lo voltar ao centro A função isFarFrom que diz se o coelho está longe do centro do chão é utilizada para fazê-lo voltar ao centro (SENÃO/ELSE)Caso contrário ele utiliza a função Random para escolher uma direção aleatória (turn left, entre e 0.25) (SENÃO/ELSE)Caso contrário ele utiliza a função Random para escolher uma direção aleatória (turn left, entre e 0.25)
Programming in Alice © 2006 Dr. Tim Margush 23 Gerando numeros aleatórios Random.nextDouble() é uma função do objeto mundo Random.nextDouble() é uma função do objeto mundo –Retorna um numero entre um valor minimo e máximo A faixa de valores padrão é entre 0 e 1 A faixa de valores padrão é entre 0 e 1 Escolha uma faixa maior e veja o resultado Escolha uma faixa maior e veja o resultado O Coelho vira pra esquerda algum valor entre e 0.25 O Coelho vira pra esquerda algum valor entre e 0.25 –Virar pra esquerda com um valor negativo na verdade vai fazer o coelho virar para direita
Programming in Alice © 2006 Dr. Tim Margush 24 A Caça! O Lobo sempre vira em direção a última posição do coelho O Lobo sempre vira em direção a última posição do coelho –A movimentação do lobo está dentro do dpTogether, junto com o movimento do coelho –O Coelho se move um pouco mais rapido que o lobo
Programming in Alice © 2006 Dr. Tim Margush 25 Melhorias? Mover as pernas Mover as pernas –Coelho e lobo Virar a cabeça do coelho para olhar para o lobo Virar a cabeça do coelho para olhar para o lobo –Algumas vezes olha pra trás para ver se o lobo está muito longe Movimentar a boca do lobo Movimentar a boca do lobo –Só quando chega perto do coelho