Programando com AliceProgramando com AliceTim MargushTim Margush
Department of Computer ScienceDepartment of Computer ScienceUniversity of AkronUniversity of Akron
© 2006© 2006
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 22
Estruturas de ControleEstruturas de Controle
SequencialSequencial– doTogether{} and doInOrder{}doTogether{} and doInOrder{}
SeleçãoSeleção– If If
RepetiçãoRepetição– While, loopWhile, loop
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 33
Mecanismos de ControleMecanismos de Controle
Expressões e FunçõesExpressões e Funções– Representando valoresRepresentando valores
Valores podem ser numeros, Booleans ou Valores podem ser numeros, Booleans ou outros tiposoutros tipos
Uma expressão booleana e funções Uma expressão booleana e funções são usadas para controlar a são usadas para controlar a seleção(if) e repetição(while)seleção(if) e repetição(while)– if (expressão é “true”) faz algoif (expressão é “true”) faz algo– while (expressão é “true”) faz algowhile (expressão é “true”) faz algo
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 44
Métodos x FunçõesMétodos x Funções
Métodos representam uma açãoMétodos representam uma ação– object_name.method_name(<argumentos>);object_name.method_name(<argumentos>);
Funções representam valoresFunções representam valores– object_name.function_name(<arguments>);object_name.function_name(<arguments>);
– Funções são usadas como argumentos ou Funções são usadas como argumentos ou como expressões para seleção e repetiçãocomo 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 AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 55
ValoresValores
Em programação valores podem ser Em programação valores podem ser de diferentes tiposde diferentes tipos– Tipos comuns são: numeros, letras, Tipos comuns são: numeros, letras,
Booleans, strings, e objetosBooleans, strings, e objetos– Numeros normalmente são divididos Numeros normalmente são divididos
entre integers(inteiros) e float(reais), as entre integers(inteiros) e float(reais), as vezes podendo ter até outros tiposvezes podendo ter até outros tipos
Misturar tipos normalmente causa Misturar tipos normalmente causa problemasproblemas
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 66
Funções embutidasFunções embutidas Cada objeto tem um Cada objeto tem um
conjunto de funções conjunto de funções embutidas que podem ser embutidas que podem ser acessados na aba de acessados na aba de funções do objetofunções do objeto– Funções estão Funções estão
agrupadas por agrupadas por funcionalidades (Ex: funcionalidades (Ex: distância, tamanho, distância, tamanho, posição dos eixos, etc..)posição dos eixos, etc..)
Uma chamada da função Uma chamada da função retorna a resposta para retorna a resposta para uma pergunta(ex: uma pergunta(ex: Distância do objeto até o Distância do objeto até o chãochão
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 77
Funções úteisFunções úteis
object.distanceTo(<alvobject.distanceTo(<alvo>)o>)– Distância entre o Distância entre o
objeto e o alvoobjeto 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 AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 88
Evitando colisõesEvitando colisões
Para determinar quando dois objetos Para determinar quando dois objetos estão próximos você precisa estão próximos você precisa considerar o volume e a posição do considerar o volume e a posição do seu centro (distanceTo x colisão)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 AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 99
Tricks para colisãoTricks 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 mede a distância vertical entre a base de x e o topo de ytopo de y
x.distanceBelow(y)x.distanceBelow(y)– Amede a distância vertical entre o topo de x e Amede a distância vertical entre o topo de x e
a base de ya base de y Veja tambémVeja também
– distanceToTheLeftOfdistanceToTheLeftOf– distanceToTheRightOfdistanceToTheRightOf– distanceInFrontOfdistanceInFrontOf– distanceBehinddistanceBehind
y
x
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1010
Usando o EditorUsando o Editor
Para usar uma função como argumento:Para usar uma função como argumento:– Primeiro crie a instrução com um simples Primeiro crie a instrução com um simples
argumento (ex 1m)argumento (ex 1m)– Arraste a função para o lugar do argumento Arraste a função para o lugar do argumento
para substituí-lo pelo retorno da funçãopara substituí-lo pelo retorno da função Você pode aplicar também funções Você pode aplicar também funções
aritméticas ao retorno da função clicando aritméticas ao retorno da função clicando na seta no final da funçãona seta no final da função
Clique, depois escolha a operação
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1111
DimensõesDimensões
Objetos tem 3 dimensõesObjetos tem 3 dimensões Voce pode determinar o tamanho do Voce pode determinar o tamanho do
box box do objeto utilizando essas do objeto utilizando essas funções:funções:– obj.getWidth()obj.getWidth()– obj.getHeight()obj.getHeight()– obj.getDepth()obj.getDepth()
Dimensões são alteradas quando sub-
partes se movem
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1212
Execução condicional Execução condicional
Alice usa a estrutura IF-ELSEAlice usa a estrutura IF-ELSE– if (condição é “true”){if (condição é “true”){
faz issofaz isso– }else{}else{
faz outra coisafaz outra coisa– }}
Perceba esses dois blocosPerceba esses dois blocos– SE (também chamado THEN/IF) SE (também chamado THEN/IF) – SENÃO (também chamado ELSE)SENÃO (também chamado ELSE)
condição Booleana
SE (THEN/IF)
SENÃO(ou ELSE)
true false
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1313
Funções BooleanasFunçõ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 AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1414
Operadores relacionaisOperadores relacionais
Comparação entre dois numeros é Comparação entre dois numeros é algo comum:algo comum:– if (x == y){if (x == y){
se x é igual a yse x é igual a y
– if (x != y){if (x != y){se x é diferente de yse x é diferente de y
– if (x > y){if (x > y){se x é maior de yse x é maior de y
– if (x >= y){if (x >= y){se x é maior ou igual de yse x é maior ou igual de y
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1515
Usando comparaçõesUsando comparações
Utilizando Utilizando comparações:comparações:– Selecione a aba de Selecione a aba de
funções do objeto funções do objeto WorldWorld
– Arraste a função de Arraste a função de comparação comparação desejada para o desejada para o códigocódigo
– Escolha os valores Escolha os valores numéricosnuméricos
Arraste
World!
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1616
Usando comparaçõesUsando comparações
Arraste as Arraste as propriedades propriedades desejadas para desejadas para substituir os substituir os valores numéricosvalores numéricos
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1717
RepetiçãoRepetição
Em Alice existem quatro estruturas Em Alice existem quatro estruturas de repetiçãode repetição– Loop(FOR) utiliza umLoop(FOR) utiliza um
contador para controlarcontador para controlaras repetiçõesas repetições index < times
index = 0
código
tru
e
false
index++
for (int index=0; index<times; index++){for (int index=0; index<times; index++){bloco de códigobloco de código
}}
contador condição de parada incremento
do contador
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1818
Ande 5 passosAnde 5 passos
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 1919
Outras estruturas de repetiçãoOutras estruturas de repetição
Alice também tem o whileAlice também tem o while while(condição é “true”){while(condição é “true”){
– Bloco de códigoBloco de código }} condição
código
tru
e
false
Em Alice existe um Em Alice existe um for allfor all que que repete a ação para cada item em repete a ação para cada item em uma lista. As ações podem ser uma lista. As ações podem ser feitas sequenciais ou em feitas sequenciais ou em paradalelo(todas juntas)paradalelo(todas juntas)
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 2020
Exemplo: Caça ao CoelhoExemplo: Caça ao Coelho
Lobo caça o coelho!Lobo caça o coelho! http://www.cs.uakron.edu/~margush/289Alice/hunt.a2whttp://www.cs.uakron.edu/~margush/289Alice/hunt.a2w
Loop
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 2121
Testando a proximidadeTestando a proximidade
Quando o coelho está perto da Quando o coelho está perto da cabeça do lobo, ele grita!cabeça do lobo, ele grita!– Note o uso da comparação como uma Note o uso da comparação como uma
expressão booleana na condição do IF expressão booleana na condição do IF abaixoabaixo
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 2222
Ficando visível!Ficando visível!
A função isFarFrom que diz se o coelho A função isFarFrom que diz se o coelho está longe do centro do chão é utilizada está longe do centro do chão é utilizada para fazê-lo voltar ao centropara fazê-lo voltar ao centro
(SENÃO/ELSE)Caso contrário ele utiliza a (SENÃO/ELSE)Caso contrário ele utiliza a função Random para escolher uma direção função Random para escolher uma direção aleatória (turn left, entre -0.25 e 0.25)aleatória (turn left, entre -0.25 e 0.25)
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 2323
Gerando numeros aleatóriosGerando numeros aleatórios
Random.nextDouble() é uma função do Random.nextDouble() é uma função do objeto mundoobjeto mundo– Retorna um numero entre um valor minimo e Retorna um numero entre um valor minimo e
máximomáximo A faixa de valores padrão é entre 0 e 1A faixa de valores padrão é entre 0 e 1 Escolha uma faixa maior e veja o resultadoEscolha uma faixa maior e veja o resultado
O Coelho vira pra esquerda algum valor O Coelho vira pra esquerda algum valor entre -0.25 e 0.25entre -0.25 e 0.25– Virar pra esquerda com um valor negativo na Virar pra esquerda com um valor negativo na
verdade vai fazer o coelho virar para direitaverdade vai fazer o coelho virar para direita
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 2424
A Caça!A Caça!
O Lobo sempre vira em direção a O Lobo sempre vira em direção a última posição do coelhoúltima posição do coelho– A movimentação do lobo está dentro do A movimentação do lobo está dentro do
dpTogether, junto com o movimento do dpTogether, junto com o movimento do coelhocoelho
– O Coelho se move um pouco mais O Coelho se move um pouco mais rapido que o loborapido que o lobo
Programming in AliceProgramming in Alice © 2006 Dr. Tim Margush© 2006 Dr. Tim Margush 2525
Melhorias?Melhorias?
Mover as pernasMover as pernas– Coelho e loboCoelho e lobo
Virar a cabeça do coelho para olhar Virar a cabeça do coelho para olhar para o lobopara o lobo– Algumas vezes olha pra trás para ver se Algumas vezes olha pra trás para ver se
o lobo está muito longeo lobo está muito longe Movimentar a boca do loboMovimentar a boca do lobo
– Só quando chega perto do coelhoSó quando chega perto do coelho