class MemoryGame {
private var __mTarget:MovieClip
private var __nRows:Number
private var __nColumns:Number
private var __aLinkageList:Array
private var __nMatchesMade:Number
private var __nMatchesLeft:Number
private var __nGuesses:Number
private var __nPossibleMatches:Number
private var __mCardHolder:MovieClip
private var __bFirstClick:Boolean
private var __nDelay:Number
private var __mCurrentOpenCard:MovieClip;
public function MemoryGame(mTarget, nColumns, nRows, aLinkageList){
__mTarget = mTarget;
__nColumns = nColumns;
__nRows = nRows;
__aLinkageList = aLinkageList;
init();
}
private function init(){
__bFirstClick = true;
__nPossibleMatches = (__nRows * __nColumns) / 2;
__nMatchesMade = 0;
__nGuesses = 0;
__nMatchesLeft = __nPossibleMatches;
updateTextOnScreen();
__mTarget.cbtnReset.owner = this;
__mTarget.cbtnReset.onPress = function(){
this.owner.init();
}
setUpCards();
}
private function setUpCards(){
var aCardOptions = new Array()
var nCard:Number = 0
for(var i:Number = 0; i < __aLinkageList.length; i++){
for(var j:Number = 0; j < (__nRows * __nColumns) / __aLinkageList.length; j++){
aCardOptions[nCard] = __aLinkageList[i];
nCard++;
}
}
for(var i:Number = 0; i < aCardOptions.length; i++)
{
//trace(aCardOptions[i]);
}
__mCardHolder = __mTarget.createEmptyMovieClip("__mCardHolder", 1000)
__mCardHolder._x = 260
__mCardHolder._y = 15
for(var x:Number = 0; x < __nColumns; x++){
for(var y:Number = 0; y < __nRows; y++){
var mCard = __mCardHolder.createEmptyMovieClip("mCard" + __mCardHolder.getNextHighestDepth(), __mCardHolder.getNextHighestDepth())
mCard._x = 75*x;
mCard._y = 95 *y;
var nRandomCard = random(aCardOptions.length);
var mCardFront = mCard.attachMovie(aCardOptions[nRandomCard], "mCardFront", 5);
mCard.sCardValue = aCardOptions[nRandomCard];
trace(mCard + " :: " + mCard.sCardValue);
aCardOptions.splice(nRandomCard, 1)
var mCardBack = mCard.attachMovie("card", "mCardBack", 6);
mCard.owner = this;
mCard.onRelease = function(){
this.owner.handlePress(this)
}
}
}
}
private function handlePress(mCard){
mCard.mCardBack._visible = false;
mCard.enabled = false;
if(__bFirstClick){
__mCurrentOpenCard = mCard;
}else{
upDateGuesses();
if(mCard.sCardValue == __mCurrentOpenCard.sCardValue)
{
upDateMatches();
}
else
{
trace("delay: " + __mCardHolder);
//__mCardHolder._visible = false;
__mCardHolder.onPress = function() {
};
__mCardHolder.useHandCursor = false;
__nDelay = setInterval(this, "flipCardsOver", 1000, mCard, __mCurrentOpenCard);
}
__mCurrentOpenCard = undefined;
}
__bFirstClick = !__bFirstClick;
}
private function flipCardsOver(mCard,mOpenCard){
trace("flip cards over called: " + mCard + " " + mOpenCard);
clearInterval(__nDelay);
delete __mCardHolder.onPress;
mCard.enabled = true;
mOpenCard.enabled = true;
mCard.mCardBack._visible = true;
mOpenCard.mCardBack._visible = true;
}
private function updateTextOnScreen(){
var nPercentage:Number = Math.round(__nMatchesMade/__nGuesses * 100);
__mTarget.matchesMade_txt.text = __nMatchesMade.toString();
__mTarget.matchesLeft_txt.text = __nMatchesLeft.toString();
__mTarget.guesses_txt.text = __nGuesses.toString();
if(!isNaN(nPercentage)){
__mTarget.correct_txt.text = nPercentage.toString() + "%";
}else{
__mTarget.correct_txt.text = "0%";
}
}
private function upDateGuesses(){
__nGuesses++;
updateTextOnScreen();
}
private function upDateMatches(){
__nMatchesMade += 1;
__nMatchesLeft = __nPossibleMatches - __nMatchesMade;
updateTextOnScreen();
}
}