process maza ()
begin
     file=graficos1;
     //graph=3;
     loop
         if (key(_space)) graph=3; end
         angle=fget_angle(x,y,160,-80);
         frame;
     end
end

process xilofono ()
private
       hijos[1];
       ant_left;
       ant_right;
       ant_up;
       ant_a;
       ant_b;
       ant_y;
       ant_l;
       ant_r;
       ant_mleft;
       mapa_durezas;
       nota_wav[12];
       nota[2];
       bajando[1];          //0=no se mueve     1=bajando      2=subiendo
begin
     while (key(_tab)) frame; end
     graficos1=load_fpg("xilofono.fpg");
     put_screen(graficos1,1);
     put(graficos1,2,319,239);
     mapa_durezas=load_map("xilofono.map");
     nota_wav[0]=load_wav("xilofono/00-C-Do1.wav");
     nota_wav[1]=load_wav("xilofono/01-CS-DoS.wav");
     nota_wav[2]=load_wav("xilofono/02-D-Re.wav");
     nota_wav[3]=load_wav("xilofono/03-DS-ReS.wav");
     nota_wav[4]=load_wav("xilofono/04-E-Mi.wav");
     nota_wav[5]=load_wav("xilofono/05-F-Fa.wav");
     nota_wav[6]=load_wav("xilofono/06-FS-FaS.wav");
     nota_wav[7]=load_wav("xilofono/07-G-Sol.wav");
     nota_wav[8]=load_wav("xilofono/08-GS-SolS.wav");
     nota_wav[9]=load_wav("xilofono/09-A-La.wav");
     nota_wav[10]=load_wav("xilofono/10-AS-LaS.wav");
     nota_wav[11]=load_wav("xilofono/11-B-Si.wav");
     nota_wav[12]=load_wav("xilofono/12-C-Do2.wav");
     hijos[0]=maza();
     hijos[1]=maza();
     nota[0]=4;
     nota[1]=9;
     get_point(0,mapa_durezas,nota[0]+1,&x,&y);
     hijos[0].x=x;
     hijos[0].y=y-10;
     get_point(0,mapa_durezas,nota[1]+1,&x,&y);
     hijos[1].x=x;
     hijos[1].y=y-10;
     //mouse.graph=4;
     loop
         //movimiento maza izquierda
         if (key(_left) && !ant_left && (nota[0]>0))
            ant_left=true;
            switch (nota[0])
            case 1,3,5,6,8,10,12: nota[0]--; end
            case 2,4,7,9,11: nota[0]-=2; end
            end
            get_point(0,mapa_durezas,nota[0]+1,&x,&y);
            hijos[0].x=x;
            hijos[0].y=y-10;
            bajando[0]=0;    //así hacemos que no siga bajando la maza si estaba golpeando (nota ya tocada)
         end
         if (!key(_left) && ant_left) ant_left=false; end
         
         if (key(_right) && !ant_right)
            ant_right=true;
            switch (nota[0])
            case 1,3,4,6,8,10,11:
                 if (nota[1]!=(nota[0]+1)) nota[0]++; end
            end
            case 0,2,5,7,9:
                 if ( (nota[1]-nota[0]) > 2 ) nota[0]+=2; end
            end
            end
            get_point(0,mapa_durezas,nota[0]+1,&x,&y);
            hijos[0].x=x;
            hijos[0].y=y-10;
            bajando[0]=0;
         end
         if (!key(_right) && ant_right) ant_right=false; end
         
         if (key(_up) && !ant_up)
            ant_up=true;
            switch (nota[0])
            case 0,2,5,7,9:
                 if (nota[1] != (nota[0]+1)) nota[0]++; end
            end
            case 4,11: nota[0]--; end
            end
            get_point(0,mapa_durezas,nota[0]+1,&x,&y);
            hijos[0].x=x;
            hijos[0].y=y-10;
            bajando[0]=0;
         end
         if (!key(_up) && ant_up) ant_up=false; end
         
         //movimiento maza derecha
         if (key(_control) && !ant_a)
            ant_a=true;
            switch (nota[1])
            case 1,3,5,6,8,10,12:
                 if (nota[0]!=(nota[1]-1) ) nota[1]--; end
            end
            case 2,4,7,9,11:
                 if ((nota[1]-nota[0]) > 2 ) nota[1]-=2; end
            end
            end
            get_point(0,mapa_durezas,nota[1]+1,&x,&y);
            hijos[1].x=x;
            hijos[1].y=y-10;
            bajando[1]=0;    //así hacemos que no siga bajando la maza si estaba golpeando (nota ya tocada)
         end
         if (!key(_control) && ant_a) ant_a=false; end

         if (key(_alt) && !ant_b && (nota[1]<12))
            ant_b=true;
            switch (nota[1])
            case 1,3,4,6,8,10,11: nota[1]++; end
            case 2,5,7,9: nota[1]+=2; end
            end
            get_point(0,mapa_durezas,nota[1]+1,&x,&y);
            hijos[1].x=x;
            hijos[1].y=y-10;
            bajando[1]=0;
         end
         if (!key(_alt) && ant_b) ant_b=false; end
         
         if (key(_z) && !ant_y)
            ant_y=true;
            switch (nota[1])
            case 2,5,7,9: nota[1]++; end
            case 4,11:
                 if ((nota[0]+1) != nota[1]) nota[1]--; end
            end
            end
            get_point(0,mapa_durezas,nota[1]+1,&x,&y);
            hijos[1].x=x;
            hijos[1].y=y-10;
            bajando[1]=0;
         end
         if (!key(_z) && ant_y) ant_y=false; end
         //tocando con las mazas
         
         //maza izquierda
         if (key(_backspace) && !ant_l)
            ant_l=true;
            play_wav(nota_wav[nota[0]],0);
            hijos[0].y+=2;
            bajando[0]=1;
            frame;
         end
         if (!key(_backspace) && ant_l) ant_l=false; end
         if (bajando[0]==1)
            get_point(0,mapa_durezas,nota[0]+1,&x,&y);
            if (hijos[0].y<y)
               hijos[0].y+=2;
            else
                bajando[0]=2;
            end
         end
         if (bajando[0]==2)
            get_point(0,mapa_durezas,nota[0]+1,&x,&y);
            if (hijos[0].y>(y-10))
               hijos[0].y-=2;
            else
                bajando[0]=0;
            end
         end
         //maza derecha
         if (key(_tab) && !ant_r)
            ant_r=true;
            play_wav(nota_wav[nota[1]],0);
            hijos[1].y+=2;
            bajando[1]=1;
            frame;
         end
         if (!key(_tab) && ant_r) ant_r=false; end
         if (bajando[1]==1)
            get_point(0,mapa_durezas,nota[1]+1,&x,&y);
            if (hijos[1].y<y)
               hijos[1].y+=2;
            else
                bajando[1]=2;
            end
         end
         if (bajando[1]==2)
            get_point(0,mapa_durezas,nota[1]+1,&x,&y);
            if (hijos[1].y>(y-10))
               hijos[1].y-=2;
            else
                bajando[1]=0;
            end
         end
         
         //control pantalla tactil
         if (mouse.left && !ant_mleft)
            ant_mleft=true;
            if (mouse.x>(320-32) && mouse.y>(240-32))          //se pulsa la cruz
               break;
            else                                               //se pulsa una nota
                nota[2]=map_get_pixel(0,mapa_durezas,mouse.x,mouse.y);
                if (nota[2]>0) play_wav(nota_wav[nota[2]-1],0); end
            end
         end
         if (!mouse.left && ant_mleft) ant_mleft=false; end
         
         //condiciones de salida
         if (key(_space) && key(_enter)) break; end
         frame;
     end
     signal(hijos[0],s_kill);
     signal(hijos[1],s_kill);
     clear_screen();
     unload_map(0,mapa_durezas);
     unload_fpg(graficos1);
     for (nota=0;nota<=12;nota++)
         unload_wav(nota_wav[nota]);
     end
     estado=0;
     frame;
end

//*****************************************************************************
//  MENU INICIAL
//*****************************************************************************
process xilofono_flecha (x,y)
begin
     file=graficos1;
     flags=4;
     z=-600;
     signal(id,s_freeze);
     frame;
     //loop frame; end
end

process intro_xilofono ()
private
       cont;
       hijos[1];
       ant_l;
       ant_r;
       fuentes1;
begin
     set_text_color(rgb(255,255,255));
     write(0,160,100,1,"Y : Instrucciones");
     write(0,160,140,1,"X : Tocar");
     load_pal("comic_roja.fnt");
     fuentes1=load_fnt("comic_roja.fnt");
     loop
         if (key(_z))
            delete_text(all_text);
            graficos1=load_fpg("inst_xilofono.fpg");
            file=graficos1;
            hijos[0]=xilofono_flecha(0,240);
            hijos[1]=xilofono_flecha(320,240);
            while (cont<5)
                  switch (cont)
                  case 0:      //foto: como coger la consola
                       x=480;
                       y=120;
                       graph=3;
                       hijos[0].graph=0;
                       hijos[1].graph=2;
                       while (x!=160)
                             x-=5;
                             frame;
                       end
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              while (x>=-160)
                                    x-=5;
                                    frame;
                              end
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           frame;
                       end
                  end
                  case 1:      //manejo con pantalla tactil
                       hijos[0].graph=1;
                       hijos[1].graph=2;
                       write(fuentes1,160,3,1,"TOCAR CON PANTALLA TACTIL");
                       set_text_color(rgb(255,255,0));
                       write(0,30,50,0,"Usa dos punteros para tocar el xilofono.");
                       frame;
                       write(0,10,60,0,"Simplemente toca con ellos la tecla que");
                       frame;
                       write(0,10,70,0,"quieres que suene.");
                       frame;
                       write(0,30,80,0,"Cada tecla tiene un sonido, con una");
                       frame;
                       write(0,10,90,0,"duarcion y un volumen fijo, por muy fuerte que");
                       frame;
                       write(0,10,100,0,"pulses, o lo mucho que la mantengas.");
                       frame;
                       write(0,30,110,0,"Procura mantener sólo un puntero en la");
                       frame;
                       write(0,10,120,0,"pantalla, pues sólo se reconoce una pulsación");
                       frame;
                       write(0,10,130,0,"cada vez.");
                       frame;
                       write(0,30,140,0,"No es necesario usar dos punteros, pero");
                       frame;
                       write(0,10,150,0,"así es como se toca el xilófono de verdad, y");
                       frame;
                       write(0,10,160,0,"te será más fácil tocar las notas rápidamente.");
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              graph=0;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              graph=0;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                  end
                  case 2:     //como tocar (rasgar las cuerdas)
                       x=480;
                       y=120;
                       graph=5;
                       hijos[0].graph=1;
                       hijos[1].graph=2;
                       write(fuentes1,160,3,1,"TOCAR CON BOTONES");
                       set_text_color(rgb(255,255,0));
                       write(0,30,50,0,"Aunque no sea tan real ni tan sencillo");
                       frame;
                       write(0,10,60,0,"de manejar como con la pantalla táctil, también");
                       frame;
                       write(0,10,70,0,"existe la opción de usar los controles de la");
                       frame;
                       write(0,10,80,0,"consola.");
                       frame;
                       write(0,30,90,0,"Pulsa SELECT para iniciar el modo no-táctil");
                       frame;
                       write(0,10,100,0,"(que significa que se verán los cursores en");
                       frame;
                       write(0,10,110,0,"pantalla).");
                       frame;
                       write(0,30,120,0,"Con cada lado de la consola controlas cada");
                       frame;
                       write(0,10,130,0,"una de las mazas.");
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              graph=0;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              graph=0;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                  end
                  case 3:       //Como tocar (las notas)
                       x=480;
                       y=120;
                       graph=4;
                       hijos[0].graph=1;
                       hijos[1].graph=2;
                       while (x!=160)
                             x-=5;
                             frame;
                       end
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              while (x>=-160)
                                    x-=5;
                                    frame;
                              end
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              while (x>=-160)
                                    x-=5;
                                    frame;
                              end
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                  end
                  case 4:       //Como salir
                       write(0,30,30,0,"Para dejar de tocar el instrumento presiona");
                       write(0,10,40,0,"START y SELECT al mismo tiempo.");
                       write(0,160,90,1,"Pulsa R para empezar.");
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              delete_text(all_text);
                              signal(hijos[0],s_kill);
                              signal(hijos[1],s_kill);
                              unload_fpg(graficos1);
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                  end
                  end //switch
            end   //while (cont<5)
            unload_fnt(fuentes1);
         end      //if (key(_z))

         //empieza el instrumento
         if (key(_x) || (cont==5))
            break;
         end

         frame;
     end
     delete_text(all_text);
     estado=2;
     xilofono();
end
