• 沒有找到結果。

第四章 數位化數學遊戲程式設計說明

第二節 圈叉遊戲

壹、數學遊戲模式架構

元件製作與 佈置場景。

開始遊戲,宣告變數、

陣列與設定初始值。

建立 DoCount 函 數,判定哪一位玩家 選了哪幾個位置。

建立 DoChose1~9 函 數,配合 DoCount 函 數,將玩家所選的位 置畫上圈或叉。

1.建立 Chek 函數,當玩家進行三回 合時,檢查玩家是否勝利。

2.建立 endaChek 函數,甲玩家第四 回合時,檢查甲玩家是否勝利。

3. 建立 endbChek 函數,乙玩家第 四回合時,檢查乙玩家是否勝 利。若無,則判定兩人平手。

建立 vica 函數設定甲 勝利時所出現的效果。

建立 vicb 函數設定乙 勝利時所出現的效果。

建立 saypeace 函數設定 平手時所出現的效果。

ReplayDown 函數重新遊 戲

貳、數學遊戲設計重點 一、第一影格

01 stop();

PlayBtn.addEventListener(MouseEvent.MOUSE_DOWN,PlayBtnDown);

function PlayBtnDown(me:MouseEvent) {

PlayBtn.visible = false;

gotoAndPlay(2);

}

//第01 行:開啟遊戲後將此影片片段的畫面停止在影格1 的圖案。建立遊戲開始 按鈕的滑鼠按下監聽事件,並將監聽函數命名為PlayBtnDown。於函數中設定事 件發生時將遊戲開始按鈕的visible屬性設為false,並進入第二影格。//

二、第二影格

01 stop();

var totalcount:int = 2;

var chnum:int = 2;

var senum:int = 1;

var sfnum:int = 0;

var addnum:int = 0;

var anum:int = 0;

var bnum:int = 0;

var casenum:int = 0;

var atimes:int = 0;

var btimes:int = 0;

var aList:Array = [""];

var bList:Array = [""];

var testaList:Array = [""];

var testbList:Array = [""];

var cakeArray:Array = [Btn1_mc,Btn2_mc,Btn3_mc,Btn4_mc,Btn5_mc,

Btn6_mc,Btn7_mc,Btn8_mc,Btn9_mc];

var CurrentI:int = 0;

var i:int = 0;

var Rans:int = 1;

var j:int = 1;

var k:int;

say_mc.gotoAndStop(1);

ReplayBtn.visible = false;

num_mc.visible = false;

//第 001 行: 進入第二影格後將此影片片段的畫面停止在影格 2,宣告變數及陣 列,並設定變數初始值,設定一開始指導語影片顯示第一影格—"甲先開始",

並設定重新遊戲按鈕的 visible 屬性為 false,數字影片的 visible 屬性為 false。//

028 ReturnBtn.addEventListener(MouseEvent.CLICK,ReturnDown);

function ReturnDown(me:MouseEvent) {

ReturnBtn.visible = false;

totalcount = 2;

chnum = 2;

senum = 1;

sfnum = 0;

addnum = 0;

anum = 0;

bnum = 0;

casenum = 0;

atimes = 0;

btimes = 0;

aList = [""];

bList = [""];

testaList = [""];

testbList = [""];

CurrentI = 0;

SBtn1_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn2_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn3_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn4_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn5_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn6_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn7_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn8_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn9_mc.removeEventListener(MouseEvent.CLICK,DoCount);

SBtn1_mc.removeEventListener(MouseEvent.CLICK,DoChoose1);

SBtn2_mc.removeEventListener(MouseEvent.CLICK,DoChoose2);

SBtn3_mc.removeEventListener(MouseEvent.CLICK,DoChoose3);

SBtn4_mc.removeEventListener(MouseEvent.CLICK,DoChoose4);

SBtn5_mc.removeEventListener(MouseEvent.CLICK,DoChoose5);

SBtn6_mc.removeEventListener(MouseEvent.CLICK,DoChoose6);

SBtn7_mc.removeEventListener(MouseEvent.CLICK,DoChoose7);

SBtn8_mc.removeEventListener(MouseEvent.CLICK,DoChoose8);

SBtn9_mc.removeEventListener(MouseEvent.CLICK,DoChoose9);

gotoAndStop(1);

}

//第028~0068 行: 建立返回按鈕的滑鼠按下監聽事件,並將監聽函數命名為 ReturnDown。於函數中設定事件發生時,將返回按鈕的visible屬性設為false,

設定各項變數回到初始值,返回第一影格,移除SBtn 1~SBtn 9影片上所有的滑 鼠按下監聽事件。//

071 SBtn1_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn2_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn3_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn4_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn5_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn6_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn7_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn8_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn9_mc.addEventListener(MouseEvent.CLICK,DoCount);

SBtn1_mc.addEventListener(MouseEvent.CLICK,DoChoose1);

SBtn2_mc.addEventListener(MouseEvent.CLICK,DoChoose2);

SBtn3_mc.addEventListener(MouseEvent.CLICK,DoChoose3);

SBtn4_mc.addEventListener(MouseEvent.CLICK,DoChoose4);

SBtn5_mc.addEventListener(MouseEvent.CLICK,DoChoose5);

SBtn6_mc.addEventListener(MouseEvent.CLICK,DoChoose6);

SBtn7_mc.addEventListener(MouseEvent.CLICK,DoChoose7);

SBtn8_mc.addEventListener(MouseEvent.CLICK,DoChoose8);

SBtn9_mc.addEventListener(MouseEvent.CLICK,DoChoose9);

SBtn1_mc.numbers = 1;

SBtn2_mc.numbers = 2;

SBtn3_mc.numbers = 3;

SBtn4_mc.numbers = 4;

SBtn5_mc.numbers = 5;

SBtn6_mc.numbers = 6;

SBtn7_mc.numbers = 7;

SBtn8_mc.numbers = 8;

SBtn9_mc.numbers = 9;

//第071~099 行: 建立SBtn 1~SBtn 9影片的滑鼠按下監聽事件,並將監聽函 數命名為DoCount及DoChoose1~DoChoose9,建立SBtn1~SBtn9影片的numbers 屬性並依序設定為1~9。。//

101 function DoCount(me:MouseEvent) {

totalcount += 1;

chnum = totalcount % 2;

ReturnBtn.removeEventListener(MouseEvent.CLICK,ReturnDown);

ReturnBtn.visible = false;

if (chnum == 1) {

senum = 3;

atimes += 1;

CurrentI = me.currentTarget.numbers;

aList.push(me.currentTarget.numbers);

testaList.push(cakeArray[CurrentI-1]);

say_mc.gotoAndStop(3);

}

if (chnum == 0) {

senum = 2;

btimes += 1;

CurrentI = me.currentTarget.numbers;

bList.push(me.currentTarget.numbers);

testbList.push(cakeArray[CurrentI-1]);

say_mc.gotoAndStop(2);

} }

//第101~125 行: 於函數DoCount中設定事件發生時,移除返回按鈕的滑鼠按下 監聽事件並設定visible屬性為false,並於每次事件發生時將變數totalcount 的值加1,將增加後totalcount的值除以2並取餘數存入變數chnum當中。接著使 用if陳述式來判斷變數chnum的值,並做相對應的動作。

1.當變數chnum的值為1時,做以下動作:

(1)將變數senum的值設定為3。

(2)將變數atimes的值加1。

(3)指定變數CurrentI的值為觸發事件按鈕影片的numbers屬性值,並將之存入 陣列aList之中。

(4)將觸發事件的按鈕影片實體名稱存入陣列testaList中。

(5)指導語影片顯示第三影格—"輪到乙"。

2.當變數chnum的值為0時,做以下動作:

(1)將變數senum的值設定為2。

(2)將變數btimes的值加1。

(3)指定變數CurrentI的值為觸發事件蛋糕影片的numbers屬性值,並將之存入 陣列bList中。

(4)將觸發事件的蛋糕影片實體名稱存入陣列testbList之中。

(5)指導語影片顯示第二影格—"輪到甲"。

//

127 function DoChoose1(me:MouseEvent) {

Btn1_mc.gotoAndStop(senum);

addnum = 1;

casenum = sfnum + addnum;

chek();

SBtn1_mc.removeEventListener(MouseEvent.CLICK,DoChoose1);

SBtn1_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

function DoChoose2(me:MouseEvent) {

Btn2_mc.gotoAndStop(senum);

addnum = 2;

casenum = sfnum + addnum;

chek();

SBtn2_mc.removeEventListener(MouseEvent.CLICK,DoChoose2);

SBtn2_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

function DoChoose3(me:MouseEvent) {

Btn3_mc.gotoAndStop(senum);

addnum = 3;

casenum = sfnum + addnum;

chek();

SBtn3_mc.removeEventListener(MouseEvent.CLICK,DoChoose3);

SBtn3_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

function DoChoose4(me:MouseEvent) {

Btn4_mc.gotoAndStop(senum);

addnum = 4;

casenum = sfnum + addnum;

chek();

SBtn4_mc.removeEventListener(MouseEvent.CLICK,DoChoose4);

SBtn4_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

function DoChoose5(me:MouseEvent) {

Btn5_mc.gotoAndStop(senum);

addnum = 5;

casenum = sfnum + addnum;

chek();

SBtn5_mc.removeEventListener(MouseEvent.CLICK,DoChoose5);

SBtn5_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

function DoChoose6(me:MouseEvent) {

Btn6_mc.gotoAndStop(senum);

addnum = 6;

casenum = sfnum + addnum;

chek();

SBtn6_mc.removeEventListener(MouseEvent.CLICK,DoChoose6);

SBtn6_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

function DoChoose7(me:MouseEvent) {

Btn7_mc.gotoAndStop(senum);

addnum = 7;

casenum = sfnum + addnum;

chek();

SBtn7_mc.removeEventListener(MouseEvent.CLICK,DoChoose7);

SBtn7_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

function DoChoose8(me:MouseEvent) {

Btn8_mc.gotoAndStop(senum);

addnum = 8;

casenum = sfnum + addnum;

chek();

SBtn8_mc.removeEventListener(MouseEvent.CLICK,DoChoose8);

SBtn8_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

function DoChoose9(me:MouseEvent) {

Btn9_mc.gotoAndStop(senum);

addnum = 9;

casenum = sfnum + addnum;

chek();

SBtn9_mc.removeEventListener(MouseEvent.CLICK,DoChoose9);

SBtn9_mc.removeEventListener(MouseEvent.CLICK,DoCount);

}

//第0127~0215 行:

1.設定DoChoose1函數中事件發生時,動作如下:

(1)Btn1_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為1。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn1影片上所有的滑鼠按下監聽事件。

2.設定DoChoose2函數中事件發生時,動作如下:

(1)Btn2_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為2。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn2影片上所有的滑鼠按下監聽事件。

3.設定DoChoose3函數中事件發生時,動作如下:

(1)Btn3_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為3。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn3影片上所有的滑鼠按下監聽事件。

4.設定DoChoose4函數中事件發生時,動作如下:

(1)Btn4_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為4。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn4影片上所有的滑鼠按下監聽事件。

5.設定DoChoose5函數中事件發生時,動作如下:

(1)Btn5_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為5。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn5影片上所有的滑鼠按下監聽事件。

6.設定DoChoose6函數中事件發生時,動作如下:

(1)Btn6_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為6。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn6影片上所有的滑鼠按下監聽事件。

7.設定DoChoose7函數中事件發生時,動作如下:

(1)Btn7_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為7。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn7影片上所有的滑鼠按下監聽事件。

8.設定DoChoose8函數中事件發生時,動作如下:

(1)Btn8_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為8。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn8影片上所有的滑鼠按下監聽事件。

9.設定DoChoose9函數中事件發生時,動作如下:

(1)Btn9_mc影片指定播放senum參數指定影格。

(2)指定變數addnum的值為9。

(3)將變數sfnum的值加上變數addnum的值後存入變數casenum之中。

(4)執定check函數。

(5)移除SBtn9影片上所有的滑鼠按下監聽事件。

//

217 function chek() {

if (atimes == 3) {

if (chnum == 1) {

ACheck();

} }

//第217~225 行:使用if的巢狀式迴圈來判斷,當甲畫了三個圈時執行ACheck 函數。 //

226 if (btimes == 3) {

if (chnum == 0) {

BCheck();

} }

//第226~232 行:當乙畫了三個叉時執行BCheck函數。 //

233 if (atimes == 4) {

if (chnum == 1) {

endaCheck();

} }

//第233~239 行:當甲畫了四個圈時執行endaCheck函數。 //

240 if (btimes == 4) {

if (chnum == 0) {

endbCheck();

closeCake();

} }

}

//第240~248 行:當乙畫了四個叉時執行endbCheck函數和closeCake函數。 //

250 function ACheck() {

if ((aList[1] == 1) || (aList[2] == 1) || (aList[3] == 1)) {

if ((aList[1] == 5) || (aList[2] == 5) || (aList[3] == 5)) {

if ((aList[1] == 9) || (aList[2] == 9) ||

(aList[3] == 9)) {

vica();

Btn1_mc.gotoAndStop(5);

Btn5_mc.gotoAndStop(5);

Btn9_mc.gotoAndStop(5);

closeCake();

} }

//第250~264 行: 當甲選了三個影片之後,利用巢狀if迴圈及"或"來判斷甲 選的這三個圈是否包含1號、5號、9號這三個影片,如果是的話就執行vica函數 宣布甲勝利,將1號、5號、9號這三塊個影片播放第5影格造成連線效果,再執行 closeCake函數關閉所有影片的動作監聽,讓玩家無法再對影片做任何動作。//

265 if ((aList[1] == 6) || (aList[2] == 6) || (aList[3] == 6)) {

if ((aList[1] == 8) || (aList[2] == 8) ||

(aList[3] == 8)) {

vica();

Btn1_mc.gotoAndStop(5);

Btn6_mc.gotoAndStop(5);

Btn8_mc.gotoAndStop(5);

closeCake();

} } }

//第265~276 行: 1號影片開頭共有兩組解分別為(1)1,5,9及(2)1,6,8這兩

組,故本組1,6,8和1,5,9這組共用同一個判斷1號影片的巢狀if迴圈,及"

或"來判斷甲選的這三個影片中是否包含1號、6號、8號這三個影片,如果是的 話就執行vica函數宣布甲勝利,將1號、6號、8號這三個影片播放第5影格造成連 線效果,再執行closeCake函數關閉所有影片的動作監聽,讓玩家無法再對影片 做任何動作。//

277 if ((aList[1] == 2) || (aList[2] == 2) || (aList[3] == 2)) {

if ((aList[1] == 4) || (aList[2] == 4) || (aList[3] == 4)) {

if ((aList[1] == 9) || (aList[2] == 9) ||

(aList[3] == 9)) {

vica();

Btn2_mc.gotoAndStop(5);

Btn4_mc.gotoAndStop(5);

Btn9_mc.gotoAndStop(5);

closeCake();

} }

//第277~289 行: 當甲選了三個影片之後,利用巢狀if迴圈及"或"來判斷甲 選的這三個影片中是否包含2號、4號、9號這三個影片,如果是的話就執行vica 函數宣布甲勝利,將2號、4號、9號這三個影片播放第5影格造成連線效果,再執 行closeCake函數關閉所有影片的動作監聽,讓玩家無法再對影片做任何動作。

//

290 if ((aList[1] == 5) || (aList[2] == 5) || (aList[3] == 5)) {

if ((aList[1] == 8) || (aList[2] == 8) ||

(aList[3] == 8)) {

vica();

Btn2_mc.gotoAndStop(5);

Btn5_mc.gotoAndStop(5);

Btn8_mc.gotoAndStop(5);

closeCake();

} }

//第290~300 行: 2號影片開頭共有三組解分別為(1)2,4,9和(2)2,5,8和 (3)2,6,7這三組,故本組2,5,8和2,4,9和2,6,7這兩組共用同一個判斷2 號影片的巢狀if迴圈,及"或"來判斷甲選的這三個影片中是否包含2號、5號、

8號這三個影片,如果是的話就執行vica函數宣布甲勝利,將2號、5號、8號這三 個影片播放第5影格造成連線效果,再執行closeCake函數關閉所有影片的動作監 聽,讓玩家無法再對影片做任何動作。//

301 if ((aList[1] == 6) || (aList[2] == 6) || (aList[3] == 6)) {

if ((aList[1] == 7) || (aList[2] == 7) ||

(aList[3] == 7)) {

vica();

Btn2_mc.gotoAndStop(5);

Btn6_mc.gotoAndStop(5);

Btn7_mc.gotoAndStop(5);

closeCake();

} } }

//第301~312 行: 2號影片開頭共有三組解分別為(1)2,4,9和(2)2,5,8和 (3)2,6,7這三組,故本組2,6,7和2,4,9和2,5,8這兩組共用同一個判斷2 號影片的巢狀if迴圈,及"或"來判斷甲選的這三個影片中是否包含2號、6號、

7號這三個影片,如果是的話就執行vica函數宣布甲勝利,將2號、6號、7號這三 個影片播放第5影格造成連線效果,再執行closeCake函數關閉所有影片的動作監 聽,讓玩家無法再對影片做任何動作。//

313 if ((aList[1] == 3) || (aList[2] == 3) || (aList[3] == 3)) {

if ((aList[1] == 5) || (aList[2] == 5) || (aList[3] == 5)) {

if ((aList[1] == 7) || (aList[2] == 7) ||

(aList[3] == 7)) {

vica();

Btn3_mc.gotoAndStop(5);

Btn5_mc.gotoAndStop(5);

Btn7_mc.gotoAndStop(5);

closeCake();

} }

//第313~325 行: 當甲選了三個影片之後,利用巢狀if迴圈及"或"來判斷甲 選的這三個影片中是否包含3號、5號、7號這三個影片,如果是的話就執行vica 函數宣布甲勝利,將3號、5號、7號這三個影片播放第5影格造成連線效果,再執 行closeCake函數關閉所有影片的動作監聽,讓玩家無法再對影片做任何動作。

//

326 if ((aList[1] == 4) || (aList[2] == 4) || (aList[3] == 4)) {

if ((aList[1] == 8) || (aList[2] == 8) ||

(aList[3] == 8)) {

vica();

Btn3_mc.gotoAndStop(5);

Btn4_mc.gotoAndStop(5);

Btn8_mc.gotoAndStop(5);

closeCake();

} } }

//第326~337 行: 3號影片共有兩組解分別為(1)3,5,7及(2)3,4,8這兩組,

故本組3,4,8和3,5,7這組共用同一個判斷3號影片的巢狀if迴圈,及"或"

來判斷甲選的這三個影片中是否包含3號、4號、8號這三個影片,如果是的話就 執行vica函數宣布甲勝利,將3號、4號、8號這三個影片播放第5影格造成連線效

來判斷甲選的這三個影片中是否包含3號、4號、8號這三個影片,如果是的話就 執行vica函數宣布甲勝利,將3號、4號、8號這三個影片播放第5影格造成連線效