Flash CS4 + ActionScript 3.0으로 체스판 만들기 테스트.

각 체스의 기물들은 마우스로 누른 채 드래그하여 이동시킬 수 있게 했고 체스판 각각의 블록에 표기법에따른 명칭을 표시하게 했다.

배열과 무비클립을 이용해 체스판, 기물 만들고 배치.
boards란 무비클립을 추가하고 여기에 체스판 블록이나 기물들을 몽땅 담게 처리했고 startDrag(), stopDrag()로 기물들 수동으로 움직이게 하다.

15/4/25 토

export명이 'nemoM', 'pieceM'인 무비클립을 만들어 뒀다.
nemoM의 경우 체스판의 한 블럭으로 프레임 넘버 1은 백색, 2는 회색.
pieceM의 경우 체스의 기물들로 프레임 넘버 1: 폰, 2: 룩, 3: 나이트, 4.비숍, 5: 퀸, 6: 킹
11~16까지는 흰색 폰~킹
var abcArr:Array = ["a","b","c","d","e","f","g","h"];
var numArr:Array = [8,7,6,5,4,3,2,1];
//black 배치용 배열
var pieceBArr:Array=["BQR","BQN","BQB","BQ","BK","BKB","BKN","BKR",
			"BP1","BP2","BP3","BP4","BP5","BP6","BP7","BP8"]; 
//white 배치용 배열
var pieceWArr:Array=["WP1","WP2","WP3","WP4","WP5","WP6","WP7","WP8",
			"WQR","WQN","WQB","WQ","WK","WKB","WKN","WKR"]; 
var boards:MovieClip=new MovieClip(); //체스판 블럭들 담기용
var boardArr:Array=new Array(); //체스판 배열
var pieceArr:Array=new Array(); //기물 배열
var nX=0, nY=0; //타일 x,y 임시 위치 저장용
var tNum = 0; //배열 총 숫자 저장용

function init(){
	boardSet(); //체스판 만들고 배치
	pieceSet(pieceBArr, 0); //검정 기물 만들고 배치
	pieceSet(pieceWArr, 6*41); //흰색 기물 만들고 배치
	trace(6*40);
}
function boardSet(){ //체스판 초기설정
	stage.addChild(boards);
	boards.x=100, boards.y=30;
	tNum = 0;
	for(var i = 0; i < 8; i++){
		for(var j = 0; j < 8; j++){
			var n:MovieClip = new nemoM();
			//배경색 정하기
			//무비클립의 프레임 1은 흰색, 2는 회색
			if(i%2 == 0){ //짝수일경우
				n.gotoAndStop(tNum%2+1); 
			}else{ //홀수일 경우
				n.gotoAndStop((tNum+1)%2+1); 
			}
			//무비클립 위치 정하기
			if(tNum < 8){ //첫 8개
				nX = tNum * n.width;
				nY = 0;
			}else if(tNum % 8 == 0){ //매 9번째
				nX -= n.width * 7;
				nY += n.height;
			}else{ //그외
				nX += n.width;
			}
			n.x= nX; 
			n.y= nY;
			//체스 표기법대로 이름 붙이기.
			n.name =String(abcArr[j%8])+String(numArr[i]);
			//무비클립 안 다이나믹 텍스트에 이름 표시
			n.tb.text=n.name; 
			boards.addChild(n); //화면에 추가
			boardArr.push(n); //배열에 추가
			tNum++; //전체 숫자 증가
		}
	}
}
function pieceSet(pArr,yStart){
	tNum=nX=nY=0;
	for(var i=0; i < pArr.length; i++){
		var p:MovieClip = new pieceM();
		//기물 모양 정하기
		p.name = String(pArr[i]);
		switch(pArr[i]){
			case("BP1"):case("BP2"):case("BP3"):
			case("BP4"):case("BP5"):case("BP6"):
			case("BP7"):
			case("BP8"): p.gotoAndStop(1); break;
			case("BKR"):
			case("BQR"): p.gotoAndStop(2); break;
			case("BKN"):
			case("BQN"): p.gotoAndStop(3); break;
			case("BKB"):
			case("BQB"): p.gotoAndStop(4); break;
			case("BQ"): p.gotoAndStop(5); break;
			case("BK"): p.gotoAndStop(6); break;
			
			case("WP1"):case("WP2"):case("WP3"):
			case("WP4"):case("WP5"):case("WP6"):
			case("WP7"):
			case("WP8"): p.gotoAndStop(11); break;
			case("WKR"):
			case("WQR"): p.gotoAndStop(12); break;
			case("WKN"):
			case("WQN"): p.gotoAndStop(13); break;
			case("WKB"):
			case("WQB"): p.gotoAndStop(14); break;
			case("WQ"): p.gotoAndStop(15); break;
			case("WK"): p.gotoAndStop(16); break;
		}
		//기물 위치 정하기
		if(tNum < 8){ //첫 8개
			nX = tNum * 41; //p.width;
			nY = yStart;
		}else if(tNum % 8 == 0){ //매 9번째
			nX -= 41 * 7;// p.width 대신 41
			nY += 41; //p.height 대신 41
		}else{ //그외
			nX += 41; //p.width 대신 41
		}
		p.x= nX; 
		p.y= nY;
		
		p.addEventListener(MouseEvent.MOUSE_DOWN, mDown);
		p.addEventListener(MouseEvent.MOUSE_UP, mUp);
		boards.addChild(p); //화면에 추가
		pieceArr.push(p); //배열에 추가
		tNum++;
	}
}
function mDown(e:MouseEvent){
	//선택한 기물 맨 위로 보내기.
	e.currentTarget.parent.setChildIndex(e.currentTarget,
			e.currentTarget.parent.numChildren-1);
	e.target.startDrag(); //마우스 따라다니기
}
function mUp(e:MouseEvent){
	e.target.stopDrag(); //마우스 따라다니기 중지
}

init();