關於AS3.0 五子棋悔棋功能和五子棋覆盤功能的實現
阿新 • • 發佈:2019-01-01
最近在用Flash AS3.0做一個五子棋的遊戲,今天來跟大家分享我實現五子棋悔棋和覆盤的方式。
<strong><span style="font-size:18px;"> 1 悔棋功能</span></strong>
首先我用MovieClip實現落子的功能,程式碼如下:
其中whitechess型別是棋子圖片物件,mc1和mc是MovieClip物件,x,y是棋子的座標。我將所有棋子物件都裝入一個總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); }
首先設定悔棋按鈕back的屬性:大小(120,40) 座標(520,300),接下來新增滑鼠點選事件Toback(); 在滑鼠點選事件中我用到了removeChildAt()函式實現對mc中的Child的索引移除,其中steps是記錄棋子步驟的變數,size決定當前落子的顏色,step_x和step_y陣列記錄棋盤上棋子的座標。 2 覆盤功能 覆盤功能我沒有使用檔案操作,我使用了SharedObject型別變數,SharedObject型別相當於網頁中的Cookie,被譽為“超級Cookie” 它的功能和Cookie相同,下面是我的程式碼:<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>
首先定義SharedObject物件將資料儲存為“chess”,然後將chess_style.data.step_x和chess_style.data.step_y定位陣列,依次將step_x和step_y中的資料記錄到SharedObject的陣列中並記錄bl_name(黑子使用者名稱) wh_name(白子使用者名稱) steps(步驟總數) 用flush儲存。 顯示程式碼如下: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 = "儲存失敗!"; }
<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並將其他資料返還。