MEMORY

1. CREAR LAYERS Y ELEMENTOS GRAFICOS

Creamos 3 layers en el siguiente orden:

Dibujamos el fondo, el titulo y los cartas para el juego y los ubicamos en la carpa adecuada.

A todas las cartas damos un nombre de instancia de la siguiente forma: carta1a, carta1b, carta2a, carta2b, etc. Dentro de cada carta creamos un segundo fotograma. En el primer fotograma metemos la contraportada común de cada carta y en el segundo fotograma la cara de la carta. En cada fotograma añadimos un stop() para que la contraportada de la carta sea visible hasta que la cliqueamos.

2. PROGRAMACIÒN CARTAS

Para una funcionalidad básica solo añadimos el siguiente código a todas las cartas:

onClipEvent(mouseUp){
    if (hitTest(_root._xmouse, _root._ymouse, false)){
        gotoAndStop(2);
    }
}

3. PROGRAMACIÒN MEZCLAR CARTAS

Para que podemos mezclar las cartas tenemos que crear un array inicial y un segundo array donde metemos las cartas mezcladas. Luego creamos un bucle para ubicar las cartas en su sitio. Todo el siguiente script añadimos al fotograma donde están ubicados los cartas:

stop();
//definiciones
num_x = 4; //numero de cartas en horizontal
num_y = 3; //numero de cartas en vertical
num = num_x * num_y; //numero de cartas = 12
pos0x = 420; //posicion inicial de la primera carta
pos0y = 80; //posicion inicial de la primera carta
dist = 10; //distancia en pixeles entre las cartas
width = card1a._width; //anchura de las cartas
height = card1a._height; //altura de las cartas
//array inicial con todas las cartas ordenadas
cards_init = new Array(card1a, card1b, card2a, card2b, card3a, card3b, card4a, card4b, card5a, card5b, card6a, card6b);
//mesclar array de cartas
cards = new Array();
for (i=0;i<num;i++){
pos = random(cards_init.length);
value = cards_init[pos];
cards.push(value);
cards_init.splice(pos, 1);
}
//trace(cards.join()); 
//mesclar cartas
pos_x = 1;
pos_y = 1;
for (i=0;i<num;i++){
cards[i]._x = pos0x+(pos_x)*dist+(pos_x-1)*width;
cards[i]._y = pos0y+(pos_y)*dist+(pos_y-1)*height;
//trace(pos_x+"/"+pos_y+":x="+cards[i]._x+", y="+cards[i]._y+" >>>"+cards[i]._name);
if (pos_x == num_x) {
pos_x = 1;
pos_y++;
}
else pos_x++;
}

4. PROGRAMACIÒN JUEGO

Hasta ahora las cartas solo hacen una vuelta en cliquearlos. Nos hace falta un script que comprueba cuantas cartas están abiertas y si hemos elegido dos cartas de una pareja. Añadimos el siguiente código todas las cartas (en vez del viejo script):

onClipEvent (MouseUp) {
if (hitTest(_root._xmouse,_root._ymouse,false)){
if (this._currentframe == 1){
gotoAndStop(2);
this_name = this._name.substr(0, this.length-1);
_root.abierta += 1;
 			//una carta abierta
if (_root.abierta == 1){
_root.cartabierta1 = this;
_root.cartabierta1_name = this_name;
}
 			//Segunda carta abierta
else if (_root.abierta == 2) {
_root.abierta = 0;
_root.cartabierta2 = this;
				//cartas son iguales -> fuera del juego
if (_root.cartabierta1_name == this_name){
this._alpha = 50;
_root.cartabierta1._alpha = 50;
				}                 

//cartas no son iguales -> dar la vuelta a las 2 cartas
else{
this.gotoAndStop(1);
_root.cartabierta.gotoAndStop(1);
}
}
}
}
}

5. PROGRAMACIÒN TIMER PARA DAR LA VUELTA A LAS CARTAS

Falta unas modificaciones para que la segunda carta es visible. Hasta ahora hace la vuelta tan rápida que no la vemos.

Hace falta crear un nuevo movieclip que ubicamos en el mismo fotograma donde están las cartas y lo llamamos “timer”. Su primer fotograma contiene el siguiente código:

stop();

Luego tenemos que incluir tantas fotogramas para que dura el tiempo adecuada. En mi ejemplo la velocidad esta puesta a 12 fotogramas cada segundo (fps). Si creamos 24 fotogramas recibimos 2 segundos de pausa hasta que las cartas hacen la vuelta. En el ultimo fotograma ponemos el código que da la vuelta a las cartas:

_root.cartabierta1.gotoAndStop(1);
_root.cartabierta2.gotoAndStop(1);
_root.listo = true;

Para que el juego esta bloqueado mientras las cartas hacen la vuelto introducimos otra variable en el script del fotograma de las cartas:

_root.listo = true;

Ahora falta modificar el código de las cartas. Modificamos solamente el código del ultimo “else” en todas las cartas para que el juego funciona:

_root.listo = false;
_root.timer.gotoAndPlay(2);

6. PROGRAMACIÒN REPETIR EL JUEGO

Queremos ofrecer al usuario de repetir el juego. Por eso añadimos otro fotograma donde dibujamos un botón a cual añadimos el script para volver al juego:

on (release) {
gotoAndPlay(25);
}

En el fotograma mismo simplemente ponemos:

stop();

Hace falta modificar otra vez el código de las cartas para que el juego termina cuando uno ha encontrado todas las parejas. En la parte donde un jugador ha encontrado una pareja y el script pone el canal alpha de las dos cartas a 50 por cientos añadimos el siguiente script:

_root.parejas += 1;
if (_root.parejas == _root.num/2){
_root.parejas = 0;
_root.gotoAndPlay(26);

}

Que se divierten!