1. 程式人生 > >關於AS3.0 五子棋悔棋功能和五子棋覆盤功能的實現

關於AS3.0 五子棋悔棋功能和五子棋覆盤功能的實現

      最近在用Flash AS3.0做一個五子棋的遊戲,今天來跟大家分享我實現五子棋悔棋和覆盤的方式。
<strong><span style="font-size:18px;">    1 悔棋功能</span></strong>

首先我用MovieClip實現落子的功能,程式碼如下:

/**********
函式名:whchess
功能:生成白棋
引數:x(x座標) y(y座標)
引用外部變數:mc(儲存棋子)
返回值:無
**********/
function whchess(x:uint,y:uint):void{
	var mc1:MovieClip = new MovieClip();
	var whc:whitechess = new whitechess();
	mc1.x = x-15;
	mc1.y = y-15;
	mc1.addChild(whc);
	mc.addChild(mc1);
}
 其中whitechess型別是棋子圖片物件,mc1和mc是MovieClip物件,x,y是棋子的座標。我將所有棋子物件都裝入一個總MovieClip中。 接下來是我實現悔棋的程式碼:
<span style="font-size:10px;">/**********
設定悔棋按鈕屬性
**********/
var back:Button = new Button();
back.label = "back";
back.setSize(120,40);
back.move(520,300);
back.setStyle("textFormat",textformat);
back.useHandCursor = true;
this.addChild(back);

/**********
為悔棋按鈕新增滑鼠點選事件
**********/
back.addEventListener(MouseEvent.CLICK,Toback);


/**********
函式名:Toback
功能:實現悔棋功能
引數:mouse(MouseEvent型別)
引用外部變數:size mc steps map step_x step_y enable theWin
返回值:無
**********/
function Toback(mouse:MouseEvent):void{
	if(steps > 0){
		mc.removeChildAt(--steps);
		size = (map[step_x[steps]][step_y[steps]] == 1) ? -1 : 1;
		map[step_x[steps]][step_y[steps]] = 0;
		step_x[steps] = 0;
		step_y[steps] = 0;
		enable =true;
		theWin.text = "";
		if(size == 1){
			bl_chess.visible = false;
			wh_chess.visible = true;
		}else{
			bl_chess.visible = true;
			wh_chess.visible = false;
		}
	}
}</span>
首先設定悔棋按鈕back的屬性:大小(120,40)  座標(520,300),接下來新增滑鼠點選事件Toback(); 在滑鼠點選事件中我用到了removeChildAt()函式實現對mc中的Child的索引移除,其中steps是記錄棋子步驟的變數,size決定當前落子的顏色,step_x和step_y陣列記錄棋盤上棋子的座標。 2 覆盤功能 覆盤功能我沒有使用檔案操作,我使用了SharedObject型別變數,SharedObject型別相當於網頁中的Cookie,被譽為“超級Cookie” 它的功能和Cookie相同,下面是我的程式碼:
var chess_style:SharedObject = SharedObject.getLocal("chess");//儲存棋局

var stay:Button = new Button();
stay.label="stay";
stay.setSize(120,40);
stay.move(520,360);
stay.setStyle("textFormat",textformat);
stay.useHandCursor = true;
this.addChild(stay);

/**********
為儲存按鈕新增滑鼠點選事件
**********/
stay.addEventListener(MouseEvent.CLICK,Stay);

function Stay(mouse:MouseEvent):void{
	this.addChild(bground);
	chess_style.clear();
	if(size != 0){
		chess_style.data.step_x = new Array();
		chess_style.data.step_y = new Array();
		chess_style.data.map = new Array();
		for(var i=0;i<step_x.length;i++){
			chess_style.data.step_x[i] = step_x[i];
			chess_style.data.step_y[i] = step_y[i];
			chess_style.data.map[i] = map[step_x[i]][step_y[i]];
		}
		chess_style.data.blname = bl_name.text;
		chess_style.data.whname = wh_name.text;
		chess_style.data.steps = steps;
		chess_style.flush();
		tap_text.text = "儲存成功!";
	}else
		tap_text.text = "儲存失敗!";
}
首先定義SharedObject物件將資料儲存為“chess”,然後將chess_style.data.step_x和chess_style.data.step_y定位陣列,依次將step_x和step_y中的資料記錄到SharedObject的陣列中並記錄bl_name(黑子使用者名稱) wh_name(白子使用者名稱) steps(步驟總數) 用flush儲存。 顯示程式碼如下:
<span style="font-size:10px;">/**********
為顯示棋局新增滑鼠點選事件
**********/
show_chess.addEventListener(MouseEvent.CLICK,Show);

function Show(mouse:MouseEvent):void{
	this.addChild(bground);
	if(size == 0 && chess_style.data.whname != undefined){
		for(var i=0;i<chess_style.data.steps;i++){
			if(i%2 == 0)
				whchess(chess_style.data.step_x[i]*30,chess_style.data.step_y[i]*30);
			else
				blchess(chess_style.data.step_x[i]*30,chess_style.data.step_y[i]*30);
			step_x[i] = chess_style.data.step_x[i];
			step_y[i] = chess_style.data.step_y[i];
			steps = chess_style.data.step_x.length;
			map[chess_style.data.step_x[i]][chess_style.data.step_y[i]] = chess_style.data.map[i];
		}
		box.addChild(mc);
		bl_name.text = chess_style.data.blname;
		wh_name.text = chess_style.data.whname;
		steps = chess_style.data.steps;
		if(chess_style.data.step_x.length%2 == 0){
			size = 1;
			bl_chess.visible = false;
			wh_chess.visible = true;
		}
		else{
			size = -1;
			bl_chess.visible = true;
			wh_chess.visible = false;
		}
		tap_text.text = "顯示成功!";
	}else
		tap_text.text = "顯示失敗";
}
</span>
用遍歷陣列的方式將SharedObject中的資料返回給step_x和step_y並將其他資料返還。