.
심플한 카드 매칭 메모리 게임
교육용컨텐츠 개발중에 사용할 기회가 되어서 만들어 보았습니다.
게리로젠위그님의 책에 있는 소스를 활용해 보았습니다.
카드 갯수가 늘어나도 쉽게 확장할 수가 있네요.
소스는 심플합니다.
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);
}
}
'FLASH > Flash어플소스' 카테고리의 다른 글
플래시로 웹접근성 구현하기 (0) | 2013.12.11 |
---|---|
무비클립 플레이 콘트롤러 (0) | 2013.04.05 |
Flash UI 시리즈 - 쇼핑몰배너 [CS4/AS2 제작] (0) | 2012.11.09 |
Flash UI 시리즈 - 메인페이지용 이미지 배너(205) [CS4/AS3 제작] (0) | 2012.11.09 |
Flash UI 시리즈 - 이미지 로테이션 배너(201) [CS4/AS3 제작] (0) | 2012.11.09 |
Flash UI 시리즈 - 롤링 배너(202) [CS4/AS3 제작] (0) | 2012.11.08 |