第四章 數位化數學遊戲程式設計說明
第二節 圈叉遊戲
壹、數學遊戲模式架構
元件製作與 佈置場景。
開始遊戲,宣告變數、
陣列與設定初始值。
建立 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影格造成連線效