<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="codigo.transformacao.xml" ?>
<página>
<aplique nome="processamento" atores="ondaprocessamento, surfprocessamento, tubaraoprocessamento" máquina="maquinaTelis_2007-06-06.jar" altura="600" largura="1000" esquerda="0" topo="0">

<modelo nome="tubaraoprocessamento" moldes="">
<agendaInicial>
<![CDATA[

{o processamento do tubarao faz com que ele ande aleatorio e mande sua posicao para saida e para
o processamento do surfista. Sempre que o tubarao sem ter pego ele, outro tubarao aparecerá no final
da onda}

REDE fixarAlcance

{estimulos para iniciar, pausar e despausar o jogo}

["surf" "tuba" "comecar"]
[
1 comecar associar
] seDito

["surf" "tuba" "pausar"]
[
0 comecar associar
] seDito

{estimulo para o final do jogo}

["surf" "tubarao" "gameover"]
[
 ["surf" "tuba" "proc" "morrer"] dizer
 ["surf" "tuba" "proc" "morrer"] dizer
 ["surf" "tuba" "proc" "morrer"] dizer
 suicidar
] sedito

{estimulo para o inicio de uma nova rodada. o processamento seta suas variaveis inciais}

["surf" "tuba" "morrer"]
[
 ["surf" "tuba" "proc" "morrer"] dizer
 ["surf" "tuba" "proc" "morrer"] dizer
 ["surf" "tuba" "proc" "morrer"] dizer
 1 descansar
 450 Xtuba associar
 -100 Ytuba associar
] sedito


{estimulo para o proximo tubarao aparecer}

["surf" "tuba" "chamaroutro"]
[
 ["surf" "tuba" "proc" "outro"] dizer
 1 descansar
 450 Xtuba associar
 -100 Ytuba associar
] seDito

450 Xtuba associar
-100 Ytuba associar
0 comecar associar

{comandos que fazem com que o tubarao ande aleatorio e manda essa posicao para o processamento
do surfista e para a saida do tubarao}

[ 
 [] [comecar 1 =] ateQue
 Ytuba 0 maiorque [-10 Ytuba associar] seVerdade
 Ytuba -250 menorque [-240 Ytuba associar] Severdade

 Xtuba 15 geraraleatorio - Xtuba associar
 Ytuba [-30 30] geraraleatorio + Ytuba associar

 ["surf" "tuba" [@Xtuba @Ytuba]] dizer
 ["surf" "tuba" "surf" [@Xtuba @Ytuba]] dizer
 0,1 descansar
] prasempre

]]>
</agendaInicial>
</modelo>

<modelo nome="ondaprocessamento" moldes="">
<agendaInicial>
<![CDATA[

{
modelo responsavel pelo processamento da velocidade da onda. ele muda a velocidade de 
acordo com a inclinacao do surfista, dando a impressao que o surfista ta mais lento ou mais rapido.
Alem disso, diz pro processamento do surfista a posicao em que a onda se encontra.}

REDE fixarAlcance

{estimulo que recebe da entrada associando uma variavel que permite o inicio 
ou despausamento do jogo}

["surf" "onda" "comecar"]
[
 1 comecar associar
] seDito

{estimulo responsavel para pausar o jogo, associando um valor negativo a variavel} 
 
["surf" "onda" "pausar"]
[
 0 comecar associar
] seDito

{estimulo responsavel pelo fim do jogo}

["surf" "onda" "gameover"]
[
 ["surf" "onda" "proc" "cair"] dizer
 suicidar
] sedito

{estimulo responsavel pela diminuicao da velocidade da onda. alem de diminuir, ela recua dando
a impressao que está mais lenta e o surfista mais rapido}

["surf" "onda" "recuar"]
[-1 velo associar] sedito

{estimulo responsavel pelo aumento da velocidade da onda}

["surf" "onda" "avancar"]
[4 velo associar] sedito


{estimulo executado quando o surfista cai. a repeticao do comando 'dizer' é apenas para evitar
que a mensagem seja perdida. Com esses comando, nao ha necessidade de suicidar o processamento e
roda-lo novamento. Apenas associa-se a posicao da onda a posicao inicial}

["surf" "onda" "cair"]
[
 ["surf" "onda" "proc" "cair"] dizer
 ["surf" "onda" "proc" "cair"] dizer
 ["surf" "onda" "proc" "cair"] dizer
 1 descansar
 -200 Xonda associar
 -145 Yonda associar
 4 velo associar
] sedito

{comandos executados no inicio..associa a posical inicial da onda e a velocidade incial}

-200 Xonda associar
-145 Yonda associar
0 comecar associar
4 velo associar
1 descansar


{espera que a variavel que de inicio ou despause o jogo seja verdadeira e vai aumentando o valor
da 'velocidade' da onda no eixo X. Apos isso, manda a posicao para a saida e para o processamento
do surfista}
[
 [] [comecar 1 =] ateQue
 ["surf" "onda" "proc" [@Xonda @Yonda]] dizer
 ["surf" "onda" [@Xonda @Yonda]] dizer
 Xonda velo + Xonda associar
 0,15 descansar
] prasempre

]]>
</agendaInicial>
</modelo>

<modelo nome="surfprocessamento" moldes="">
<agendaInicial>
<![CDATA[

{esse eh o modelo principal do jogo, responsavel pelo processamento do surfista e do jogo em geral.
A movimentacao do surfista depende da sua inclinacao e da alternancia de direcao. Por exemplo, se voce
ir muito pra cima de uma soh vez, o surfista perdera velcoidade e cairá. O segredo é ir alternando pra
cima e pra baixo. A velocidade da onda e do surfista sao inversamente proporcionais, dando mais realidade
ao jogo. O objetivo eh fazer com que o surfita chegue ao final da onda sem que seja pego pelo tubarao
nem pela onda. O jogador possui tres vidas, apos isso o jogo termina }

REDE fixarAlcance

{comando que determina o inicio ou despausamento do jogo}

["surf" "entrada" "comecar"]
[
1 comecar associar
] seDito

{pausa o jogo, atribuindo valor negativo a variavel 'comecar'}

["surf" "entrada" "pausar"]
[
0 comecar associar
] seDito

{recebe da entrada o estimulo para o surfista subir. primeiro ha uma verificacao se a variavel
que da inicio ao jogo eh verdadeira, pois caso contrario o surfista ia girar com o jogo pausado ou
nao-iniciado. Alem disso incrementa um na variavel 'cairsubindo' e zera a variavel 'cairdescendo', o 
que vai ser responsavel para obter a direcao do surfista e determinar sua velocidade. A medida que 
essa variavel vai aumentando a velocidade do surfista aumenta ateh certo ponto e depois comeca
a diminuir resultando em sua queda, identificando assim que o jogador subiu de vez. Ja a variavel
'angulo' eh responsavel pelo movimento vertical do surfista para saber se ele estah subindo ou descendo }
 
["surf" "entrada" "subir"]
[
 comecar 1 = 
 [ 
  ["surf" "proc" "subir"] dizer
  angulo 3 + angulo associar
  Ysurfista 3 + Ysurfista associar
  cairsubindo 1 + cairsubindo associar
  0 cairdescendo associar 
 ] seVerdade
]
SeDito

{faz exatamente o inverso do codigo acima}
 
["surf" "entrada" "descer"]
[ 
 comecar 1 = 
 [ 
  ["surf" "proc" "descer"] dizer
  angulo 3 - angulo associar
  Ysurfista 3 - Ysurfista associar
  cairdescendo 1 + cairdescendo associar
  0 cairsubindo associar 
 ] seVerdade
]
SeDito


{recebe a posicao do tubarao para identificar quando eles se encontram}

["surf" "tuba" "surf" lista]
[
4 obterelemento [Xtuba Ytuba] associar
] sedito

{recebe a posicao da onda para verificar se o surfista foi engolida por ela ou nao}

["surf" "onda" lista]
[
3 obterelemento [Xonda Yonda] associar
] SeDito

{atribui os valores inciais as variaveis. o 'cairdescendo' comeca com 5 pois o surfista jah comeca
inclinado apontando pra baixo}

0 comecar associar
3 vidas associar
0 mortes associar
0 angulo associar
0 cairsubindo associar
5 cairdescendo associar
2 velosurfista associar
-130 Xsurfista associar
-80 Ysurfista associar
-200 Xonda associar
-145 Yonda associar
450 Xtuba associar
-100 Ytuba associar


[
 {espera que a varivale comecar seja verdadeira para comecar ou despausar o jogo}

 [] [comecar 1 =] ateQue

{codigo que determina que o surfista chegou ao final da onda e venceu o jogo. a onda e o tubarao
agem iguais tanto no game over tanto quando o jogo eh vencido}

 Xsurfista 420 maiorque
 [
  ["surf" "onda" "gameover"] dizer
  ["surf" "onda" "gameover"] dizer
  ["surf" "tubarao" "gameover"] dizer
  ["surf" "tubarao" "gameover"] dizer
  ["surf" "proc" "ganhou"] dizer
  suicidar
 ] seVerdade


{
fatores que determinam a queda do surfista respctivamente:
subir ou descer de vez
o surfista estar muito acima ou muito abaixo da onda
o tubarao encontrar o surfista
a onda encontrar o surfista
}

 cairsubindo 20 MaiorQue
 cairdescendo 20 MaiorQue
 +

 Ysurfista 0 maiorque
 Ysurfista -250 menorque
 +

 Xtuba Xsurfista - absoluto 30 menorque
 Ytuba Ysurfista - absoluto 30 menorque
 *

 Xonda Xsurfista - absoluto 5 menorque
 
 +++

{caso ele caia, adiciona um na variavel que conta quantas vezes ele caiu. Caso ela seja igual
ao numero de vidas, da game over. Caso contrario, o surfista cai e o jogo recomeca.
O processamento seta novamente todas as 
variaveis inciais, exceto a variavel 'morte' e e manda o estimulo para cada saida si chamar de novo}

  [
   mortes 1 + mortes associar
   mortes vidas = 
   [ 
    ["surf" "onda" "gameover"] dizer
    ["surf" "tubarao" "gameover"] dizer
    ["surf" "gameover"] dizer suicidar 
    suicidar
   ]
   [ 
    ["surf" "onda" "cair"] dizer
    ["surf" "tuba" "morrer"] dizer
    ["surf" "proc" "cair"] dizer
    1 descansar 
    limparfundo
    3 vidas associar
    0 angulo associar
    0 cairsubindo associar
    5 cairdescendo associar
    2 velosurfista associar
    -130 Xsurfista associar
    -80 Ysurfista associar
    -200 Xonda associar
    -145 Yonda associar
    450 Xtuba associar
    -100 Ytuba associar
    ["surf" "onda" "recomecar"] dizer
    ["surf" "tuba" "recomecar"] dizer
    ["surf" "proc" "recomecar"] dizer
   ] entaoSenao
  ] seVerdade

{caso o tubarao passe pelo surfista, entao outro tubarao aparecerá no final da onda}

 Xsurfista Xtuba - 80 maiorque
 [
  ["surf" "tuba" "chamaroutro"] dizer
 ] severdade


{codigos que aumentam e diminuem a velocidade do surfista e da onda de acordo com sua inclinacao}


{velocidade maxima}
 cairsubindo 10 Maiorque cairsubindo 15 Menorque
 *
 cairdescendo 10 Maiorque cairdescendo 15 Menorque
 *
 +
 [
 3 velosurfista associar 
 ["surf" "onda" "recuar"] dizer
 ] SeVerdade

{velocidade normal}
 cairsubindo 1 Maiorque cairsubindo 10 Menorque
 *
 cairdescendo 1 Maiorque cairdescendo 10 Menorque
 *
 +
 [
 2 velosurfista associar
 ["surf" "onda" "avancar"] dizer
 ] SeVerdade

{velocidade minima}
 cairsubindo 15 Maiorque cairsubindo 20 Menorque
 *
 cairdescendo 15 Maiorque cairdescendo 20 Menorque
 *
 +
 [
 1 velosurfista associar
 ["surf" "onda" "avancar"] dizer
 ] SeVerdade

{verifica se o surfista eh pra subir o descer. Note que ele sobe na mesma proporcao que 
anda horizontalmente}

 angulo 0 maiorque
 [Ysurfista velosurfista + Ysurfista associar]
 [Ysurfista velosurfista - Ysurfista associar] entaosenao

{vai somando sua 'velocidade' na sua componente x}

 Xsurfista velosurfista + Xsurfista associar
 ["surf" "proc" "posicao" [@Xsurfista @Ysurfista]] dizer
 0,1 descansar
] prasempre

]]>
</agendaInicial>
</modelo>



</aplique>
</página>
