Treballs amb cadenes. Continuació  
 
 
  En la pràctica anterior, heu treballat amb les accions que feia el botó Iniciar joc on s'escollia la paraula i es buscava el nombre de comodins segons el nombre de caràcters de la paraula, i heu mesurat la quantitat de caràcters que forma la paraula o frase.  
      
  En aquesta pràctica, utilitzareu aquestes dades per programar una funció que seleccioni cada caràcter de la paraula, comprovi si és el caràcter escollit per l'usuari/ària i, en cas que ho sigui, substitueixi el caràcter en el comodí corresponent. Si la paraula té el caràcter escollit, visualitzarà una part del dibuix i esborrarà o amagarà el botó per evitar la duplicació o la repetició de les lletres escollides.  
      
  Creiem que l'aplicació didàctica d'aquest programa pot enriquir el vocabulari específic en qualsevol matèria, fins i tot, utilitzar-se a les àrees de llengües pel que fa a aspectes morfològics, sintàctics, frases fetes, refranys...  
      
Desenvolupament de la pràctica
    
»  Obriu l'arxiu flor1.fla de la pràctica anterior.
      
  Ara, es tracta que cada vegada que l'usuari/ària faci clic en un botó (la lletra que vol escollir), el programa comprovi si aquesta lletra forma part de la paraula escollida a l'atzar, i que, per evitar que l'usuari/ària torni a fer clic en la mateixa lletra, aquesta desaparegui.  
      
  » Com que aquesta tasca s'hauria de repetir 27 vegades (una per a cada botó), creeu una funció amb un paràmetre que correspondrà a la lletra escollida. Aquesta funció tindrà el nom de comprova() i la programareu després d'haver posat el codi corresponent a cada botó, que quedaria així:  
      
  Exemple d'uns botons:

 

      
 

on (release) {
x=_root.comprova ("A");
_root.aa._visible=false;
}

on (release) {
x=_root.comprova (" ");
_root.espesp._visible=false;
}

 

      
  Quan feu clic a cada botó, es fa una crida a la funció comprova i li passeu el paràmetre que correspon a la lletra.  
  
Totes les funcions retornen un valor, que podeu utilitzar o no segons el cas. En el vostre, la variable x no té cap efecte, però en altres aplicacions es podria utilitzar amb la sentència return. És una bona tècnica de programació utilitzar sempre una variable de retorn del valor de funció, encara que, en el vostre cas, no tingui cap efecte.
  
  S'ha escollit el botó espai que, com a paràmetre, envia a la funció un espai en blanc donant la possibilitat d'utilització de frases, com ja s'ha comentat.  
      
  Programeu la funció que farà tota la tasca que queda de l'aplicació:  
      
 

» Feu doble clic a la capa principal i tindreu el codi programat a la pràctica anterior, on s'inicialitzaven les variables globals del programa.

» Inseriu, a continuació, el codi corresponent a la funció que voleu programar.

Per crear la funció, utilitzeu la paraula reservada function amb el nom que voleu que tingui la funció, i entre parèntesis, el paràmetre que voleu que rebi.

En el vostre cas, function comprova(a) { }

» Escriviu entre els claudàtors d'inici i fi de bloc de codi les accions que cal fer per a la funció, tenint en compte que ha recollit un valor en la seva variable a que correspondrà al caràcter que heu enviat quan s'ha fet clic a la lletra escollida.

 

 
 

» Declareu les variables locals de la funció: jj, hh i h.

La variable jj us servirà per treballar amb la cadena de comodins que s'anirà modificant a mesura que aneu encertant les lletres de la paraula que ha escollit a l'atzar el programa.

La variable hh us servirà per emmagatzemar un caràcter de la cadena de comodins que, per mitjà d'un bucle, anirà canviant cada vegada.

La variable h tindrà el mateix objectiu que l'anterior, però emmagatzemarà un caràcter de la paraula escollida original que el programa té en memòria.

 
      
 

Heu de tenir en compte que els mètodes de l'objecte string treballen com les matrius, començant per l'índex 0 corresponent al primer element de la matriu i, en el vostre cas, correspondria a la primera lletra de la paraula, i és per això que el bucle començarà per 0.

 
      
 

function comprova(a){

var jj="";
var hh="";
var h="";
for(i=0;i<l;i++) {// inserir el codi}

}

 
      
  » Inseriu dins el bloc de codi del bucle for les següents accions:  
      
  »  Poseu dins la variable h el primer caràcter de la paraula escollida a l'atzar i que està continguda dins la variable p. El codi corresponent seria: h=p.substr(i,1);  
      
  Aquest codi posarà dins la variable h la part que correspon des del lloc 0 inclòs, tants caràcters com indiqui el nombre. En el vostre cas del bucle for, començarà escollint el primer element (element de matriu 0) i prenent, només, aquest caràcter. En accions successives del bucle, anirà agafant un caràcter cada vegada avançant per la cadena.  
       
  »  Feu al mateix amb la variable hh, però el caràcter que s'extraurà serà el corresponent a la variable p1, que és on teniu emmagatzemada la cadena de comodins. El codi seria: hh=p1.substr(i,1);  
       
  »  El pas següent serà que el programa comprovi si el caràcter que ha entrat en la funció és idèntic a l'escollit en la variable h, i, a tal efecte, feu un bucle de control condicional: if (a==h) {}.  
       
 

Si el caràcter que ha entrat com a paràmetre en la funció és idèntic al caràcter escollit segons l'acció del bucle for, posareu a la variable jj el valor que tenia jj més aquest caràcter. Això vol dir que hi ha hagut un encert i, aleshores, s'hauria de veure una part del dibuix. Feu que la variable comptador d'encerts augmenti una unitat, i segons el nombre d'encerts, s'haurien de visualitzar successives parts del dibuix modificant la propietat efecte alpha dels clips corresponents.

El codi del bucle hauria de ser com aquest:

 
       
 

if(a==h) {

jj=jj+a;
c++;
if(c==1) { _root.sep1._alpha=100;}
if(c==2) { _root.pet1._alpha=100;}
if(c==3) { _root.pet2._alpha=100;}
if(c==4) { _root.pet3._alpha=100;}
if(c==5) { _root.ov1._alpha=100;}
if(c==6) { _root.ant1._alpha=100;}
if(c==7) { _root.ant2._alpha=100;}
if(c==8) { _root.ant3._alpha=100;}
if(c==9) { _root.ant4._alpha=100;}
if(c==10) { _root.fil1._alpha=100;}
if(c==11) { _root.fil2._alpha=100;}
if(c==12) { _root.fil3._alpha=100;}
if(c==13) { _root.fil4._alpha=100;}

}

 
     
 

Com que el dibuix està fet per tretze clips de pel·lícula, en cada cas es visualitzarà un clip segons es vagi encertant els caràcters de la paraula.

En el cas que no hi hagi encert, heu de completar la condició contrària amb la sentència else posant en la variable jj el caràcter que tenia en la cadena de comodins: else { jj=jj+hh; }

 
      
  Finalitzat el bucle for de comprovació de caràcters amb la cadena, heu de visualitzar els encerts posant aquesta cadena en el quadre de text dinàmic, i tornar a canviar el contingut de la variable p1 amb les modificacions dels encerts que estan a la variable jj: t1=jj;p1=jj;  
      
  »  Una vegada feta la comprovació lletra a lletra del bucle for, i ja que les paraules tenen un nombre variable de caràcters, heu de preveure que la paraula estigui completament encertada, i per aconseguir això, afegiu un bucle if de comprovació:  
       
 

if (p1==p) {

_root.sep1._alpha=100;
_root.pet1._alpha=100;
_root.pet2._alpha=100;
_root.pet3._alpha=100;
_root.ov1._alpha=100;
_root.ant1._alpha=100;
_root.ant2._alpha=100;
_root.ant3._alpha=100;
_root.ant4._alpha=100;
_root.fil1._alpha=100;
_root.fil2._alpha=100;
_root.fil3._alpha=100;
_root.fil4._alpha=100;

}

 
      
 

Com podeu esbrinar, si la cadena de la paraula escollida a l'atzar correspon de forma idèntica a la cadena de la variable que està continguda en el quadre de text dinàmic, es visualitzen tots els clips de pel·lícula que formen el dibuix.

El codi sencer resultant del fotograma principal hauria de ser aquest:

 
      
 

p="";
p1="";
l=0;
c=0;

function comprova(a){


var jj="";
var hh="";
var h="";

for(i=0;i<l;i++) {

h=p.substr(i,1);
hh=p1.substr(i,1);
if(a==h) {


jj=jj+a;
c++;
if(c==1) { _root.sep1._alpha=100;}
if(c==2) { _root.pet1._alpha=100;}
if(c==3) { _root.pet2._alpha=100;}
if(c==4) { _root.pet3._alpha=100;}
if(c==5) { _root.ov1._alpha=100;}
if(c==6) { _root.ant1._alpha=100;}
if(c==7) { _root.ant2._alpha=100;}
if(c==8) { _root.ant3._alpha=100;}
if(c==9) { _root.ant4._alpha=100;}
if(c==10) { _root.fil1._alpha=100;}
if(c==11) { _root.fil2._alpha=100;}
if(c==12) { _root.fil3._alpha=100;}
if(c==13) { _root.fil4._alpha=100;}

}
else { jj=jj+hh; }

}
t1=jj;
p1=jj;
if (p1==p) {

_root.sep1._alpha=100;
_root.pet1._alpha=100;
_root.pet2._alpha=100;
_root.pet3._alpha=100;
_root.ov1._alpha=100;
_root.ant1._alpha=100;
_root.ant2._alpha=100;
_root.ant3._alpha=100;
_root.ant4._alpha=100;
_root.fil1._alpha=100;
_root.fil2._alpha=100;
_root.fil3._alpha=100;
_root.fil4._alpha=100;

}

}

 
      
  El programa encara té algunes deficiències de robustesa que podeu modificar i completar, no obstant, ja es pot preveure i intuir que, amb les corresponents modificacions, es poden aconseguir aplicacions didàctiques molt interessants.