Après les quelques articles sur le jeu de memory, voici le code complet du jeu pour flash. Dans ce code, il y a le chrono et la fonction de fin de jeu qui n’ont pas Ă©tĂ© expliquĂ© dans les articles prĂ©cĂ©dents, mais le code ne devrait pas vous poser de problème. Les dĂ©clarations de variables n’ont pas non plus Ă©tĂ© faites dans les prĂ©cĂ©dents articles. Mais lĂ  vous avez tout le code fonctionnel.

stop();

import gs.TweenMax;
import gs.easing.*;

var conteneur:Sprite = new Sprite( ) ;
addChild( conteneur ) ;

var arrTeinte:Array = new Array( ) ;
var arrTeinteTmp:Array = new Array( ) ;
var arrCouleurCarte:Array = new Array( ) ;
var nbCarteRetournee:Number = 0 ;
var carteNumero1:MovieClip ;
var carteNumero2:MovieClip ;
var nbCartes:Number ;
var nbPairesADefinir:Number ;
var paireATrouver:Number ;
var paireTrouvee:Number = 0 ;
var nbMouvement:Number = 0 ;
var txtChrono:TextField = new TextField( ) ;
var tempsJeu:Number ;
var timerChrono:Timer = new Timer( 1000 ) ;

arrTeinte[ 0 ] = "0x999999" ;
arrTeinte[ 1 ] = "0x33ffff" ;
arrTeinte[ 2 ] = "0xff33ff" ;
arrTeinte[ 3 ] = "0xffff33" ;
arrTeinte[ 4 ] = "0x66ffff" ;
arrTeinte[ 5 ] = "0xff66ff" ;
arrTeinte[ 6 ] = "0xffff66" ;
arrTeinte[ 7 ] = "0x6666ff" ;
arrTeinte[ 8 ] = "0xff9966" ;
arrTeinte[ 9 ] = "0x66ff99" ;

function fctInit( ):void {
fctPlacerElements( 2, 3 ) ;
fctAttribuerCouleur( 2, 3 ) ;
trace( "Nombre d'elements que contient le conteneur: " + conteneur.numChildren );
conteneur.addEventListener( MouseEvent.CLICK, fctRetourner ) ;
fctChrono( 30 ) ;
}
fctInit( ) ;

function fctPlacerElements( nbLignes:Number, nbColonnes:Number ):void {
// Liaison d'un MovieClip de la bibliotheque
// Il represente la carte de dos
// A l interieur de ce MovieClip il y a une shape
// On peut mettre une image
var carte:DosCarte ;

// La paire a trouver est une variable globale qui nous servira a savoir si le joueur a tout trouver ou non.
paireATrouver = ( nbLignes * nbColonnes ) / 2 ;

for ( var i:uint = 1 ; i <= nbLignes ; i++ ) {
for ( var j:uint = 1 ; j <= nbColonnes ; j++ ) {
// On instancie les carte avec le nom de liaison de la bibliotheque
carte = new DosCarte( ) ;
// On donne un id a chaque carte
carte["numId"] = ( nbColonnes * ( i - 1 ) ) + j ;
// On donne les coordonnees des cartes
carte.x = ( carte.width + 10 ) * ( j - 1 ) + ( carte.width / 2 ) + 10 ;
carte.y = ( carte.height + 10 ) * ( i - 1 ) + ( carte.height / 2 ) + 10 ;
// On donne la main au survol des boutons
carte.buttonMode = true ;
// On ajoute les cartes au conteneur
conteneur.addChild( carte ) ;
}
}
}

function fctAttribuerCouleur( nbLignes:Number, nbColonnes:Number ):void {
nbCartes = nbLignes * nbColonnes ;
nbPairesADefinir = nbCartes / 2 ;

// On initialise le tableau temporaire avec les couleurs du tableau principal
arrTeinteTmp = arrTeinte ;

// La boucle qui va attribuer les couleurs aux cartes
for ( var i:int = 0 ; i < nbCartes ; i++ ) {
if ( arrTeinteTmp.length > 1 ) {
arrCouleurCarte[ i ] = arrTeinteTmp[ Math.round( Math.random( ) * ( nbPairesADefinir - 1 ) + 1 ) ] ;
}
else {
// La valeur 0 du tableau arrTeinteTmp est celle de la dos de carte
arrCouleurCarte[ i ] = arrTeinteTmp[ 1 ] ;
}
for ( var j:int = 0 ; j < nbCartes ; j++ ) {
if ( arrCouleurCarte[ i ] == arrCouleurCarte[ j ] && i != j ) {
// On appelle la fonction qui va supprimer la couleur qui est utilisée deux fois.
fctRedefinirArrTeinteTemp( arrCouleurCarte [ i ] ) ;
break ;
}
}
}
}

function fctRedefinirArrTeinteTemp( couleur:String ) {
var placeCouleurAChanger:Number ;
nbPairesADefinir-- ;

for ( var i:int = 0 ; i < arrTeinteTmp.length ; i++ ) {
if ( arrTeinteTmp[ i ] == couleur || i >= placeCouleurAChanger ) {
placeCouleurAChanger = i ;
arrTeinteTmp[ i ] = arrTeinteTmp[ i + 1 ] ;
}
}
}

function fctRetourner( pEvt:MouseEvent ):void {
// On verifie qu'il n'y ait pas deja deux cartes de retournees ou qu'on ne clique pas sur une carte deja retournee
if ( nbCarteRetournee != 2 && carteNumero1 != pEvt.target as MovieClip ) {
// On attribue la carte cliquee
// A la premiere carte si celle ci est non attribuee
if ( carteNumero1 == null ) {
carteNumero1 = MovieClip( pEvt.target ) ;
}
// A la deuxiemme si la premiere est deja retournee
else {
carteNumero2 = MovieClip( pEvt.target ) ;
}
// On cree un effet de retournement de la carte. A la fin de celui-ci on decouvre la couleur
TweenMax.to( pEvt.target, 0.2, { scaleX:0.1, alpha:0.3, onComplete:fctDecouvrirCarte, onCompleteParams:[ pEvt.target ] } ) ;
}
}

function fctDecouvrirCarte( carte:MovieClip ):void {
// Variable initialisee a 0
nbCarteRetournee++ ;
// Grace a TweenMax on retablit la taille de la carte et l alpha de la carte
// Avec la propriete teinte et le tableau qu'on a prealablement defini on lui donne sa couleur
TweenMax.to( carte, 0.2, { scaleX:1, alpha:1, tint:arrCouleurCarte[ carte["numId"] - 1 ] } ) ;

// Si deux cartes sont retournees on verifie si la paire correspond ou non
if ( nbCarteRetournee == 2 ) {
var myTimer:Timer = new Timer( 1000, 1 ) ;
myTimer.addEventListener( TimerEvent.TIMER, fctCheckPaire ) ;
myTimer.start( ) ;
}
}

function fctCheckPaire( pEvt:TimerEvent ):void {
// On compte le nombre d action effectuees par le joueur, juste pour lui dire le nombre de coups dont il a eu besoin pour finir le jeu
nbMouvement++ ;
// Si la carte 1 et la carte deux ont la meme couleur
if ( arrCouleurCarte[ carteNumero1["numId"] - 1 ] == arrCouleurCarte[ carteNumero2["numId"] - 1 ] ) {
paireTrouvee++ ;

// Si toutes les paires ont ete trouvees
if ( paireTrouvee == paireATrouver ) {
fctFinJeu( ) ;
}
// La reinitialisation de la paire permet de libere les cartes en jeu
// On remet a 0 le nombre de carte et on libere les cartes : carteNumero1, carteNumero2
else {
fctReinitPaire( ) ;
}
}
// Si la paire ne correspond pas on lui met la couleur de dos de carte et on libere les cartes a la fin
else {
TweenMax.to( carteNumero1, 0.2, { scaleX:0.1, alpha:0.3, tint:arrTeinte[ 0 ] } ) ;
TweenMax.to( carteNumero2, 0.2, { scaleX:0.1, alpha:0.3, tint:arrTeinte[ 0 ], onComplete:fctRecouvrirCarte } ) ;
}
}

function fctRecouvrirCarte( ):void {
TweenMax.to( carteNumero1, 0.2, { scaleX:1, alpha:1 } ) ;
TweenMax.to( carteNumero2, 0.2, { scaleX:1, alpha:1, onComplete:fctReinitPaire } ) ;
}

function fctReinitPaire( ):void {
nbCarteRetournee = 0 ;
carteNumero1 = null ;
carteNumero2 = null ;
}

function fctChrono( temps:Number ):void {
tempsJeu = temps ;
conteneur.addChild( txtChrono ) ;
txtChrono.y = conteneur.height ;
txtChrono.height = 18 ;

timerChrono.addEventListener( TimerEvent.TIMER, fctAfficherChrono ) ;
timerChrono.start( ) ;
}

function fctAfficherChrono( pEvt:TimerEvent ):void {
if ( tempsJeu > 0 ) {
txtChrono.htmlText = "Temps de jeu: " + String( tempsJeu-- ) ;
}
else {
fctFinJeu( ) ;
}
}

function fctFinJeu( ):void {
timerChrono.stop( ) ;
conteneur.removeEventListener( MouseEvent.CLICK, fctRetourner ) ;

var monTexte:TextField = new TextField( ) ;
conteneur.addChild( monTexte ) ;

monTexte.selectable = false ;
monTexte.width = stage.stageWidth ;
monTexte.y = conteneur.height ;

monTexte.htmlText = "Vous avez réussi le jeu en " + nbMouvement + " mouvements.nLe nombre minimum de coups étant de " + paireATrouver + " mouvements." ;
}

A voir aussi :

Quelques articles au hasard

Plus de liens