본문 바로가기

FLASH/Flash어플소스

심플한 카드 매칭 메모리 게임

.


심플한 카드 매칭 메모리 게임

기억_카드매칭.fla




교육용컨텐츠 개발중에 사용할 기회가 되어서 만들어 보았습니다.

 

게리로젠위그님의 책에 있는 소스를 활용해 보았습니다.

 

카드 갯수가 늘어나도 쉽게 확장할 수가 있네요.

 

소스는 심플합니다.



import flash.utils.Timer;
import flash.events.TimerEvent;

//게임상수
const bdW_cnt:int = 4;  //가로갯수
const bdH_cnt:int = 2;  //세로갯수
const cardW:int = 140;  //가로크기
const cardH:int = 180;  //세로크기
const bdX:int = 60;  //시작점X
const bdY:int = 80;   //시작점y
var score = 0;

//5단계 한벌로 사용할 카드명 선언
var firstCard:Card;
var secondCard:Card;  
var mc_array:Array = [];

//카드번호 리스트 생성
var cardList:Array = new Array();
for(var k:int=0; k<bdW_cnt*bdH_cnt/2; k++){
 cardList.push(k);
 cardList.push(k);
//이렇게 하면 1,1,2,2,3,3,4,4,... 이런식으로 값이 들어간다.


trace("오픈");
for(var i:int=0; i<bdW_cnt; i++){
 for(var j:int=0; j<bdH_cnt; j++){
   var c:Card = new Card();
   c.stop();
   //c.name="mc"+i+j;
   mc_array.push(c);
   c.x = i*cardW + bdX;
   c.y = j*cardH + bdY;
   
   var r:int = Math.floor(Math.random()*cardList.length); //랜덤값 얻자.
   c.cardface = cardList[r]; //카드모양 결정
   cardList.splice(r,1);  //cardList에서 제거
   //c.gotoAndStop(c.cardface+2);
   
   c.addEventListener(MouseEvent.CLICK, clickCard); //이벤트추가
   addChild(c);   //카드모습을 보여준다.
   c.gotoAndStop(c.cardface + 2);    
 }
}

 

var tm1:Timer = new Timer(2000,1);
tm1.start();
tm1.addEventListener(TimerEvent.TIMER_COMPLETE, closeCard);

function closeCard(e){
 trace("클로즈");
 for(var i:int=0; i<8; i++){
  mc_array[i].addEventListener(MouseEvent.CLICK, clickCard); //이벤트추가
  mc_array[i].gotoAndStop(1);
 }
 tm1.stop();
}


var tm2:Timer;
//게이머가 카드 클릭했을때
function clickCard(e:MouseEvent):void{
 var thisCard:Card = (e.currentTarget as Card); //어떤건지 몰라도 클릭한카드
 
 if(firstCard == null){   //한벌중에서 첫번째카드
  firstCard = thisCard;  //클릭한것이 첫번째카드
  firstCard.gotoAndStop(thisCard.cardface + 2);  //해당이미지 보여줌
 }else if(firstCard == thisCard){//첫번째 카드를 다시 클릭했을 때
  firstCard.gotoAndStop(1); //아무것도 없는 이미지로 돌아간다.
  firstCard = null;
 }else if(secondCard == null){ //한벌중에서 두번째카드
  secondCard = thisCard;  //클릭한 것이 두번째 카드
  secondCard.gotoAndStop(thisCard.cardface + 2); //해당 이미지 보여줌
  tm2 = new Timer(500,1);
  tm2.start();
  tm2.addEventListener(TimerEvent.TIMER_COMPLETE, function back(e){
        firstCard.gotoAndStop(1);
        secondCard.gotoAndStop(1);
       });
  
  //두 카드를 비교
  if(firstCard.cardface == secondCard.cardface){
    //선택을 초기화
    tm2.stop();
    firstCard = null;
    secondCard = null;
    score++;
    if(score == (bdW_cnt*bdH_cnt)/2){
     comp.gotoAndPlay(2);
     trace("게임종료");
    }
  }
 }else{// 또다른카드를 선택하기 시작
  // 이전 짝을 초기화
  firstCard.gotoAndStop(1);
  secondCard.gotoAndStop(1);
  secondCard = null;
  //다음 짝에 있는 첫번째 카드 선택
  firstCard = thisCard;
  firstCard.gotoAndStop(thisCard.cardface + 2);
 }
}