數位數學遊戲於教學之應用與製作-以ActionScript 3.0為例

107  Download (0)

全文

(1)國立臺灣師範大學數學系教學碩士班碩士論文. 指導教授:許志農 博士. 數位數學遊戲於教學之應用與製作 -以 ActionScript 3.0 為例. 研 究 生:蔣友民. 中 華 民 國 一百零二 年 一 月.

(2)

(3) 誌 謝 首先要感謝我的指導教授許志農老師在這三個寒暑期間在論文上的指導,當 研究方向偏剖時能立即給我當頭棒喝,提醒我別做徒勞無功的事情,在我因在職 工作快把研究生活淡忘時,督促我要多花時間在論文上。在此向老師獻上最誠摯 的感謝。 感謝李華介教授、黃森山教授從百忙中抽空細看我的論文,並給了我許多寶 貴的建議,讓我對論文內容有更正確的觀念。感謝在我的研究生涯中時常與我一 起討論切磋論文的哥哥、鈺祺學姐,在怠惰迷失時看到你們就能提醒自己要跟上 你們的腳步。感謝基隆市立信義國中學務處的同事及其他同仁們,在暑期上課這 段時間請的公假,都有勞你們協助行政業務的代理及支持。 感謝一路走來一直支持我的同伴亮川、黎慈及給我鼓勵、建議的朋友們,讓 我在寫論文遇到瓶頸時,可以找個人聊天放空、跳脫鑽牛角尖的困境。感謝數學 暑期教學碩士在職專班的師長及同學帶給我充實的三個暑假,常熬夜念書寫作業, 但隔天上課又看到大家睡眼惺忪時總會帶給我不少繼續向上的革命情感。 最後還要感謝我的家人,他們對我的支持與鼓勵是我最大的精神支柱,不斷 地推動著我順利完成研究與撰寫論文。在此致上最深的敬意與祝福。. 蔣友民 謹誌於 師大數學系 中華民國一百零二年一月.

(4) 摘要 隨著資訊科技日新月異,各種資訊產品蓬勃發展,數位產品漸漸走入人類的 生活。而數位遊戲在數位產品中佔有了一定比例的發展,在現今越趨多元的教學 活動上,藉由資訊科技,將數位遊戲融入教學中,或可使教學活動與生活更加貼 近;或可寓教於樂,從遊戲中收到潛移默化的效果;或可藉此評量,從中發掘學 生們的潛力。 數學在許多人心中可能是個近而遠之的科目,但若能與遊戲互相結合,也許 可以讓人在遊樂中學習數學,發現數學之美,進而達到教學的效果。 研究者本身是數學教育工作者,且非常熱愛數位遊戲。在此介紹遊戲的種類、 遊戲的功用、及市面上熱門的遊戲製作工具。並在論文的末段施作三個數位數學 遊戲,且公開程式碼,希望能透過數學遊戲的開發替數學教學的領域貢獻一份心 力。. 關鍵字:數學遊戲、數位遊戲、ActionScript.

(5) 目次 第一章 緒論 .............................................................................................. 1 第一節 研究動機與背景...................................................................................... 1 第二節 研究目的.................................................................................................. 2 第三節 研究範圍與限制...................................................................................... 2. 第二章 文獻探討 ...................................................................................... 5 第一節 遊戲的相關介紹...................................................................................... 5 一、遊戲的定義............................................................................................ 5 二、數位遊戲................................................................................................ 6 三、數學遊戲............................................................................................. .12 四、本文之數位數學遊戲.......................................................................... 15 第二節 遊戲與教學............................................................................................ 19 一、遊戲式學習.......................................................................................... 19 二、遊戲對數學教學的影響...................................................................... 21 第三節 開發數位遊戲的工具............................................................................ 24 一、Flash 與 ActionScript 概述 ................................................................ 24 二、其它開發數位遊戲的工具.................................................................. 25. 第三章 數位數學遊戲說明 ....................................................................31 第一節 圓球堆積類遊戲.................................................................................... 31 一、堆球遊戲.............................................................................................. 31 二、步步高升遊戲...................................................................................... 34 第二節 「拈」的變形遊戲................................................................................ 37 一、掰巧克力遊戲...................................................................................... 37. 第四章 數位數學遊戲的程式碼說明 ....................................................41 -I-.

(6) 第一節 堆球遊戲................................................................................................ 41 一、面版佈置-第一影格 ............................................................................ 41 二、遊戲操作-第二影格 ............................................................................ 43 第二節 步步高升遊戲........................................................................................ 60 一、面版佈置-第一影格 ............................................................................ 60 二、遊戲操作-第二影格 ............................................................................ 62 第三節 掰巧克力遊戲........................................................................................ 77 一、面版佈置-第一影格 ............................................................................ 77 二、遊戲操作-第二影格 ............................................................................ 78. 參考文獻 ..................................................................................................99 中文部份.............................................................................................................. 99 英文部分............................................................................................................ 100. -II-.

(7) 第一章 緒論 第一節 研究動機與背景 研究者本身是個數位遊戲愛好者,同時也在國中任職數學老師。隨著時代的 變遷、科技的演進,現代學童們玩的遊戲與二、三十年前的小孩們玩的遊戲已大 不相同。記得研究者國小時期下課後最大的休閒活動,就是跟哥哥、堂弟及隔壁 鄰居在鄉間小路上騎腳踏車,到家裡附近的鎮公所廣場玩捉迷藏,或到曾祖母的 菜園裡抓些昆蟲來玩。而觀察現代學童放學後的休閒活動,似乎戶外活動變得越 來越少。 《親子天下》雜誌於 2008 年創刊號中,調查國小高年級學生的休閒活動 發現:國小高年級學童進行休閒活動的場合排名第一為「在家裡玩」,休閒活動 的內容排行第一的則是「上網」。由此可見,隨著資訊科技普及,現代學童的休 閒型態也受到影響。 根據資策會(2011)「台灣家庭寬頻應用現況與需求調查」顯示,2011 年台 灣家戶連網率為 81.8%,而台灣有 86.8%的家庭至少擁有 1 台電腦。由於資訊科 技當道,數位遊戲打破了城鄉的差距,成為許多學童熱愛的休閒娛樂。在研究者 任教的國中,許多學生一提到資訊課或體育課就會非常興奮,其中資訊課最讓學 生感興趣之一的可能是:當同學們把老師今天交代的作業完成後,多餘的時間可 以自行上網,或「玩電玩」!而也有許多學生一回到家的第一件事情不是馬上寫 功課、準備吃晚餐,而是跑到電腦桌前登入線上遊戲。有時下課時間仔細聽聽走 廊上學生的聊天內容,可能也會不經意的發現某些男學生聊天的話題盡是電玩遊 戲的內容,足見數位遊戲影響學子的深遠。 研究者在學校內除了任教資訊課程外,同時也教授數學。相對於學子們對資 訊課的濃厚興趣,對於數學課程,不少人會覺得這是門嚴肅的課程,甚至有些同 學一提到數學就會想放棄。《天下雜誌》在 2010 年的教育特刊中提到:「國中生 最討厭數學」。因此筆者認為,若能適時的增加學生在學習數學時的動機,在情 -1-.

(8) 意層面讓學生能喜歡數學,也許是個改變學生對數學觀感的方法。而在此正巧將 資訊融入數學,開發數位數學遊戲,藉此不經意的將數學藏在遊戲的世界裡。. 第二節 研究目的 一、設計適合中學生數學程度進行、操作的數位數學遊戲,使程度好的學生 們能從中推導相關制勝方式,做為日後科普相關領域的啟蒙;使中等程度及學習 弱勢的學生能藉此更親近數學,更期能解此引發學習動機。 二、本文於最後第四章公佈研究者所設計三款遊戲之 ActionScript 程式碼, 期使有興趣的程式設計師能加以推廣、沿用,於教學上的教育先進共襄盛舉,為 數學教育領域貢獻一份心力。. 第三節 研究範圍與限制 一、遊戲設計小而精。本研究製作之數位數學遊戲以數學相關為主,並且因 研究者任教於中學,在遊戲的取材上,也偏向適合中學生或更低學齡的學生就能 理解的數學遊戲,藉此以方便於課堂或課餘時間讓學生演練。因此研究者所設計 之遊戲皆不難,也不複雜。 二、遊戲進行時間偏短。數位數學遊戲的設計原因之一,乃希望與教學結合, 而學生就是學習的主體,因此數位遊戲的選擇及設計,以進行一輪的時間大約 5~10 分鐘,甚至更短為主。如此便於使學生不需要耗費大量時間進行遊戲,同 時也因為國中階段一堂課程只有 45 分鐘,若包含遊戲講解、回饋分享,或進行 合作學習、分組對抗等,則一節課的時間所數無幾。因此在遊戲的選用上以進行 時間偏短為主。. -2-.

(9) 三、數位遊戲的設計簡單明瞭。研究者在選定論文主題前並未學過 Flash ActionScript 3.0 的的語法,雖然大學時期曾學過其他程式語言,但難與業界 遊戲軟體公司相較,從美工設計、硬體設施、網路線上運作、遊戲複雜度等等皆 難望其項背。惟於遊戲設計之本意也大不相同,不以營利、商業用途為主,而偏 向研究、教學結合取向。. -3-.

(10) -4-.

(11) 第二章 文獻探討 第一節 遊戲的相關介紹 一、遊戲的定義 「遊戲的人」(Homo Ludens)的作者Huizinga(1955)認為,所有的人類 文明發展,最早的形式都是來自於「遊戲」,並指出遊戲的特徵是完全置身於日 常生活之外,但又強烈吸引玩家的自由活動。 遊戲可分成正式的和非正式的,非正式的遊戲就是一般指的「玩」,而正式 的遊戲就是一般指的「遊戲」。Parlett(1999) 提出正式的遊戲必須有兩個主要 的成份,分別為「目標」及「手段」,分述如下: (1) 目標(Ends): 遊戲必須有一個明確的目標,當達到目標才算遊戲結束,單純的玩並沒有明 確的定義什麼叫結束,也沒有明確的時間限制。 (2) 手段(Means): 遊戲必須有一套規則,這套規則描述了遊戲內的設備,規定了玩家在遊戲中 所能進行的行為、遊戲的目標是什麼,所有的玩家都同意並遵守這個規則。 Juul(2005)定義「遊戲」是隱含可變化與可量化結果的規則系統,不同的結 果被賦予不同的價值, 玩家會努力影響遊戲結果, 並因結果而產生情緒上的影 響, 而整個遊戲活動的結果與現實世界的關係是事先約定、協商完成的。 Caillois(2001)曾針對人類廣泛的遊戲行為,提出遊戲的六個特性: (1) 遊戲是自由的行動(Free) (2) 被隔離的行動,分離於真實世界(Separate) (3) 未確定的、變動的 (Uncertain) (4) 非生產性的活動(Unproductive),有時是反生產性、表現於無效率性 -5-.

(12) (5) 有規則性的活動(Governed by rules) (6) 虛幻的(Make-believe) 國內學者蔡淑苓( 1993) 綜合各家學者的意見, 提出遊戲的特點大致如 下: (1) 遊戲是直接動機引起的,動機就是遊戲,它是自由自在逍遙的。 (2) 遊戲是一種美的享受,是歡樂,滿足及愉悅的情緒流露。 (3) 遊戲是滿足於過程,不去想或不大注意遊戲結果會帶來什麼。 (4) 遊戲是探索、表達級釋放內在自我的途徑。 (5) 遊戲是將以前獲得的印象,重新組合的創造世界。 因此綜合上述的學者觀點,我們可以說遊戲是有規則性的自由活動,玩家在 此規則之下處在一個與真實世界隔離的情境之中,可以反覆享受美的歡樂與愉悅, 探索自我與創造出屬於自我的ㄧ個新世界。 二、數位遊戲 (一)、數位遊戲定義. 國外學者Crawford(1982)在定義數位遊戲時提到,我們無法真正清楚的給予 數位遊戲明確的定義,一般人所賦予遊戲的定義往往只是遊戲設計者認為一個好 的遊戲所該具備的元素。而洪國勳(2003)將數位遊戲定義為「使用電子型態、配 合程式語言將遊戲規則透過螢幕呈現的遊戲」。 這些定義雖有不同處,但都是透過電腦來呈現的遊戲。但總括來說,數位遊 戲是指使用電子型態、配合程式語言將遊戲規則透過螢幕呈現,並可在個人電腦 或其他數位產品上儲存與執行之遊戲軟體。 (二)、數位遊戲的歷史. 在「圖解電子遊戲史」(2004)中有指出,世界最早的數位遊戲是在1958年 Willy Higginbotham所發明,他使用一台示波器、一台類比電腦和一些簡單按鈕, 創造出一部簡單的網球遊樂器《雙人網球》(Tennis for Two),其發明的目的主 -6-.

(13) 要是要利用雙人對打的網球遊戲,讓民眾瞭解電腦的功用及用途。 隨著電腦的普及,人們開始使用電腦來玩遊戲,世界第一台商業用電子遊戲 機(Arcade Game)也於1971年,由電子遊戲之父Nolan Bushnell開發完成。隔年 1972年, 並成立全球第一家專業電玩公司ATARI,逐步引起全球性的電玩旋風 (許晉龍, 2004)。 1980年代中期,Atari、世嘉及任天堂將戰場轉移到家用遊戲機硬體上,同 時推出新款家用機,任天堂FC(Family Computer)勝出,是第一個具有世界規模 的成功遊戲主機。日本從1983年任天堂推出風靡全球的8位元「紅白機」遊戲機。 1985年,任天堂公布他們將會在全球推出FC遊戲機。由第三方開發者開發的 高質素的遊戲確保本地化,美國任天堂公司限制第三方開發者每年只可推出5個 遊戲。首個第三方開發者是科樂美,它被容許製造卡帶遊戲於FC遊戲機上使用, 隨後,它的子公司Ultra Games挑戰這條規則,增加每年推出的數量;其他開發 商如Konami等,亦都跟隨相同的手法。在這年同時,《超級瑪俐歐》這套FC遊戲 亦於日本市場推出,獲得巨大的成功。 在寬頻網路逐漸普及下,以PC為主要平台的線上遊戲趁勢崛起。我國遊戲軟 體產業在寬頻網路逐漸普及下,市場規模從1999年不到1億元快速成長到2001年 的16.8億元,兩年之間成長幅度超過18倍,以電腦為主機的數位遊戲時代儼然已 經來臨。 在此同時,不同出生年代的教師所處的時空環境也是不同的,較年長的教師 生長的環境並沒有數位遊戲,誠如Prensky(2001)所說,這些教師是因為適應 現代生活環境才去學習數位科技的ㄧ群人,也就是數位移民(digital immigrant),相對而言,年輕一代的教師在他們生長過程中、求學過程中,這些 數位科技老早就融入生活之中,也就是俗稱的數位原民(digital natives),兩 者在數位軟體與硬體的使用與認知上存在著很大的差異,因此在面對數位遊戲這 個議題的想法,想必有很大的差異。本研究所製作之數位遊戲,不僅可供學生操 作遊玩親近數學,同時也是提供不同世代教師親近數位科技的一個機會。 -7-.

(14) (三)、數位遊戲的特性. 一個好的數位遊戲所應該具備的因素包括有許多,不同學者對數位遊戲特性 的定義也大同小異,Prensky( 2001)提到數位遊戲吸引我們的原因,即為數位遊 戲所具有的特色: (1) 娛樂性: 能讓玩家在遊戲的過程中獲得享受與愉悅 (2) 遊戲性: 能促使玩家極度熱烈的投入於其中 (3) 規則性: 能提供玩家遊戲的整體架構 (4) 目標性: 能讓玩家有動力去進行遊戲 (5) 人機互動性: 能讓玩家透過電腦的操弄與互動中來進行遊戲 (6) 結果與回饋: 能提供玩家學習的機會 (7) 適性化: 能讓玩家在遊戲中流暢的進行 (8) 勝利感: 能提供玩家自我的滿足感 (9) 競爭挑戰與衝突感: 能讓玩家感受到興奮與刺激 (10) 問題解決: 能引發玩家的創造力 (11) 社會互動性: 能讓我們與其他玩家組成遊戲社群 (12) 圖像與情節性: 能讓我們在遊戲中獲致情感 這些特性讓使用者在遊玩數位遊戲的過程中很容易沈浸其中,遊戲的挑戰性、 不可預測性及競爭性更是玩數位遊戲的動力來源,也可以引發玩家的好奇心與內 在動機,將這些數位遊戲特性融入教材內容當中可以讓學生自發性的學習,使學 生在遊戲情境之中反覆的練習,進而增強其學習的功效。反之若是太過沉迷遊戲, 則會造成遊戲成癮,浪費過多時間於遊戲之中。有學者指出數位遊戲具有正面與 負面的效果(轉引自張玉佩,2009): (1) 正面效果: a.可以增加孩子的手眼協調 b.可以提供一個安全、私密的空間,讓人們可以探索現實生活所無法經驗的情緒, 遊戲行為有助於人們征服生活裡的不安全感 -8-.

(15) c.可以拓展玩家的社會網絡,展現玩家的風險管理與合作行為 (2) 負面效果: a. 容易造成玩家成癮,使得現實生活受到遊戲世界的影響 b. 遊戲的暴力刺激可能會引發攻擊性行為 c. 玩家可能因為不良遊戲經驗而對真實世界產生恐懼 d. 線上遊戲成癮對大學生的健康及學習皆有負面影響,而健康的負面影響 大於學習的負面影響 (蔡明春等,2008)。 e. 國中學生網路成癮傾向者最常從事的網路活動為玩網路遊戲,網路成癮傾向 愈嚴重,身心健康愈差(何振珮,2006)。 在英國曾經有四所學校 (BD、DSL、JC、StJ)以三種數位遊戲 (The Sim 2、 Roller Coaster Tycoon 3 (RCT3)、Knights of Honor (KoH)) 大規模的實施遊 戲教學的實驗計畫,參與的教師與家長普遍認知到遊戲有助於下列各項技能的發 展:策略思考(strategic thinking)、計畫(planning)、溝通(communication)、 數字應用(application of numbers)、談判技巧(negotiating skills)、團體決 策(group decisoin-making)以及資料處理(data-handling),所以善用數位遊戲 將有助於學生的學習與學習技能的養成。 水能載舟、亦能覆舟,善用數位遊戲為學童帶來的正面影響,導引其朝向各 項技能的發展,使學童們接觸數位遊戲的世界不至淪落到被遊戲廠商主導,這也 是身為教師的我們可以盡的心力。 (四)、數位遊戲的種類 數位遊戲依據遊戲內容可以分類為下列八種: (維基百科) (1)角色扮演(Role Playing Game,RPG) 依據玩家的興趣培養出獨特屬性的虛擬角色,此類遊戲注重玩家角色扮演的 歷程,經由達成任務目標或是打怪的經驗的累積,提升個人角色的能力。玩家角 色可透過攻擊敵方累積經驗值或是特殊道具。此類遊戲往往使玩家在遊戲歷程中 經由角色的成長或戰役勝利的次數而得到成就感,其黏著性以及玩家忠誠度相較 -9-.

(16) 於其他類型遊戲要來得高,所以此類遊戲玩家占線上遊戲玩家的比例也是最高的。 如英雄聯盟。 (2)動作遊戲(Action Game,ACT) 此類遊戲注重肢體動作以及臨場反應。玩家藉由操作遊戲角色來做移動、砍 殺、跳躍等動作的組合,以手中武器打擊遊戲關卡中出現的敵方角色。玩家必須 透過攻擊敵方角色才能提升等級並且進入下一關的挑戰。如真三國無雙。 (3)射擊遊戲(Shooting Game,STG) 此類遊戲模擬真實場景,以擊落敵方或是射殺敵方為目標的遊戲。玩家以角 色所配置的槍砲射擊並閃躲敵方角色之攻擊來完成各關卡的任務。此類線上遊戲 以第一人稱射擊遊戲為主,玩家組隊採回合制的方式進行對戰為主要內容。如 CS Online。 (4)益智/音樂遊戲(Puzzle/Rhythm Game,PRG) 此類遊戲重視腦力思考或是以音樂節奏為主的娛樂遊戲。玩家注重解題思考 或是跟隨遊戲音樂,配合節奏控制角色進行動作,注重個人技巧的提升,玩此類 遊戲的玩家多半以聯誼交友為主要目的。如熱舞Online等。 (5)策略遊戲(Simulation Game,SLG) 此類由遊戲強調策略運用和計畫的使用。玩家在遊戲中經由策略運用並妥善 使用遊戲中角色擁有的資源,以擊敗對手或達成關卡要求。如三國志。 (6)競速遊戲(Racing Game,RAC) 此類遊戲以玩家抵達終點速度的快慢來決定勝負。玩家在模擬情境中進行賽 車,遊戲進行中不只是速度以及駕駛技巧,玩家在遊戲中更可以使用一些道具來 設計陷阱或是擾亂敵手的行進速度,延誤敵手遊戲行進的速度。如跑跑卡丁車。 (7)運動遊戲(Sporting Game,SPG) 此類遊戲以運動競賽為主,或是模擬運動真實場景進行的遊戲。玩家按照遊 戲內容的運動項目規則進行遊戲。如全民打棒球。 (8)其他: 遊戲內容無法歸類在上述任何一項遊戲者,納入本項。 -10-.

(17) 不同類型的遊戲所包含的遊戲因素不同,並會造成許多刻板的印象使人面對 它時存在著不同的觀感,如益智類遊戲、策略遊戲可以刺激腦力增進思考能力, 一般人是比較正面的觀點看待此類型的遊戲;而射擊遊戲、動作遊戲那些打打殺 殺的畫面,常使人聯想到暴力與血腥,一般人則是以較負面的觀點看待此類遊戲。 但是遊戲的種類繁多,許多遊戲無法從表面的觀察來瞭解其數位遊戲類型,數位 遊戲經驗影響教師在面對不同數位遊戲種類時的觀感。 數位遊戲依操作平台分類可以分為單機遊戲與線上遊戲;單機遊戲指的是僅 使用一台遊戲機或者電腦就可以獨立運行的電子遊戲或者電腦遊戲。而線上遊戲 則可以分成三大類 (張智超、虞孝成, 2001)。 (1)網頁遊戲(Web Game) 利用網站架設的方式,呈現的大眾化的遊戲,使用者無需在電腦安裝遊戲軟 體,只要透過申請帳號密碼的輸入即可享受遊戲樂趣。玩家在閒暇時可以在虛擬 世界中進行下棋、打牌等遊戲,與線上遊戲最大的差異就是不用另外安裝軟體, 用瀏覽器即可連線對戰。早期的Web Game 受到網路技術及其頻寬限制的影響, 在遊戲畫面以及動作介面上的表現上無法執行繁雜的指令,但隨著科技資訊的進 步,Web Game 的遊戲精細度已直逼單機板遊戲,甚至提供了多人同時連線的功 能,並結合部落格的功能,在遊戲搭載自己專屬的空間。 (2)網路遊戲(Network Game) 此類的遊戲使用者利用網路進行連結,每一局競賽具有特定人數限制(4人至 8人為主),進行回合制遊戲或是即時戰略的遊戲。遊戲玩家可以選擇彼此合作夥 伴以攻擊特定的敵人或是彼此對打,亦可以選擇單獨與電腦對戰。此類遊戲已達 成攻擊使命為目的,且往往有時間限制,市面上常見的遊戲有世紀帝國、星海爭 霸。相較於線上遊戲而言,最大的差異在於缺乏專屬的遊戲伺服器,遊戲玩家裝 載遊戲軟體後,只需要透過網路即可與其他玩家進行對戰,遊戲運作環境仰賴玩 家電腦,所以對戰人數有限制,且一旦回合結束後,角色的經驗及等級都不予累 積。 -11-.

(18) (3)線上遊戲(Online Game) 此類遊戲需要自行購買遊戲光碟或是下載遊戲程式,待遊戲安裝完畢後,即 可以連線至遊戲公司的伺服器,並透過事先申請的帳號密碼登入遊戲。此類遊戲 可以容納眾多玩家同時上線即時互動,目前甚至可以容納數十萬人同時上線遊戲。 在此類遊戲中,玩家扮演各式各樣的虛擬角色,藉由培養遊戲角色而獲得成就感, 玩家更可以與氣味相投的玩家組成隊友甚至結盟與組成國家。由於社群的歸屬感 與真實的互動,與線上即時交談的功能,無形中形成一股拉力,使許多玩家沉迷 於其中。如暗黑破壞神。 單機遊戲與線上遊戲中可以參與的共同遊玩的玩伴有明顯的不同,單機遊戲 通常是自身遊玩而沒有一起玩的玩伴或是與家裡的兄弟姊妹或是學校同學共同 遊玩,幾乎沒有與不認識的陌生人共同遊玩的機會;線上遊戲則是在一個開放的 空間之中,可以一起遊玩的玩伴較複雜,但也因為如此更吸引人們去探索遊戲, 提供一個不用外出遊玩就可以結交新的朋友的管道,相對的遊玩風險性也較大。 在本研究中所設計的三款遊戲皆屬單機遊戲,在單一電腦上即可獨立運行,就遊 戲內容來說皆是兩人輪流對戰,屬益智類的遊戲。 在資訊設備充足的情形下,校園中可以使用電腦設備的地方相當多,教師給 予學生使用電腦的機會也相對較多的情形下,透過適時指導學生以正確的態度面 對數位時代,也是學校可教導學生的一環。 三、數學遊戲 數學遊戲(Mathematical recreations)是一種運用數學知識的大眾化智力 娛樂活動。一般來說,參加的人只需具備初等的數學能力便可參與這些遊戲,但 為了增加參加者的興趣,這些遊戲往往表達得比較複雜。數學遊戲的形態五花八 門,常以謎語、對局、組合、自相矛盾等各式新奇方式呈現。數學遊戲遍佈世界 各地,許多數學名題亦是由數學遊戲演變而成的。例如韓信點兵孫子問題、九連 環、斐波那契兔子問題、哥尼斯堡七橋問題、迷宮等等。 -12-.

(19) 基本上,數學遊戲可分為九類,包括: 1.代數遊戲 一般用代數方程或代數方程組來求解的問題都可納為代數遊戲。例如在西元 前三世紀,古希臘數學家阿基米德提出「群牛問題」:涉及8個未知數不定方程 組。及西元五至六世紀《張丘建算經》記載的「百雞問題」涉及的三元不定方程 式組。這些問題對促進代數的發展有很大的幫助。 2.算術遊戲 算術遊戲可分為兩種問題,一種是算數,另一種是運用算術知識解決的問題。 常見的算術問題包括數字間的有趣關係及各種不同的數學軼事等。例如對數碼 11123456789 以不改變它的排列次序,只加上運算符號和必要的括號的方法,使 它運算結果等於某數。而另一種算術遊戲,往往配合文字來表達問題。例如: 三世紀古希臘數學家丟番圖逝世後,相傳他的墓碑上刻著猜他年齡的詩歌碑文, 參加者便可透過碑文的提示計算他的年齡。許多的算術問題也可以用代數的方法 求解的,這便可使問題更簡化。 3.幾何遊戲 由勾股定理設計出來的問題在許多國家都出現過,如蓮花問題等。而古希臘 亦提出了幾何作圖三大問題,及後人提出的直尺作圖問題,圖規作圖問題以至定 角圓規作圖問題,以及用相同形狀的圖形鋪滿整個平面問題等都是典型的幾何遊 戲。 4.組合遊戲 南宋數學家楊輝曾系統的闡述過幻方,中國古代稱為縱橫圖,使它在理論上 得到很大的發展,另外,「抽屜原理」亦可構造出大量的有趣問題。至於,十九 世紀中提出的柯克曼女生問題,人們對它的求解使集合論得以不斷發展。 5.數論遊戲 數論遊戲是由數論中的基本定理構造出來的遊戲問題,能激發起人們學習數 學的興趣。西元三世紀成書的《孫子算經》中記載了著名的「孫子問題」,實際 -13-.

(20) 上,這是一次餘式問題。由於題解的理論十分深奧而為後人所研究。在十三世紀 由秦九韶成大衍求一術,這問題就被多種數學的專著改頭換面地採用。 6.圖論遊戲 十八世紀提出的柯尼斯堡七橋問題,被後人改為郵遞員問題或周遊世界問題 等式。這些直接地引起了圖論的創立,並促進了網絡理論及拓樸學的建立。 7.概率遊戲 在十五世紀末提出,並在十七世紀中葉引起了人們對「合理分配賭注問題」 的廣泛討論,其影響甚為深遠,成為概率論始創的基本問題之一。而在十八世紀 出現的「比豐投針問題」也開創了幾何概率的先河,這亦是最早用隨機數處理確 定性數學的例證。 8.分割遊戲 中國古代流行的七巧板便是分割遊戲的典範。在十八世紀末已有了專著的論 述,並在二十世紀後,嚴格的在數學理論上進行探究,例如:在1942年,證明了 七巧板最多可拼成13個不同的凸多邊形等。而在西元三世紀,劉徽證明勾股定理 所用的「出入相補」原理也是分割遊戲的一種。 9.博奕遊戲 例如中國的「翻攤」遊戲,便是博奕遊戲的一種,而翻攤遊戲可以引出深奧 的組合數學理論。還有各種的棋類遊戲等也屬於博奕遊戲。此外,博奕遊戲還為 對策論提供了素材,也對人工智能的發展有莫大的影響。 翁園國小潘清富(2010)校長也曾在其著作「數學遊戲在九年一貫課程中扮 演的角色」中指出數學遊戲應該所包含的功能如下: 1.數學遊戲能引發學習興趣 在枯燥的數學演算過程中,偶爾來點花俏的活動,學生會感到新鮮有趣,對 於教學至少不會產生排斥感。 2.數學遊戲能滿足好奇心 在千變萬化的數學遊戲裡,學生有如進入迪世尼世界中,處處好奇與質疑, -14-.

(21) 符合兒童的學習心理。 3.數學遊戲鼓勵探索與冒險 數學遊戲具有趣味性與挑戰性,會引發學生追根究底的學習態度。 4.數學遊戲具創造思考的精神。 數學遊戲基本上是動腦的活動,帶領學生進入數學解題的境界,令其有無限 揮灑空間。 5.數學遊戲豐富教材內容 數學遊戲可補教科書之不足,學生可從中獲得生意盎然的數學生命。 四、本文之數位數學遊戲 (一) 圓球堆積類遊戲介紹 在Szpiro所著《刻卜勒的猜想》一書中曾經提到: 「在無限延伸平面上排列球 /銅板最緊密的方式為何?」一般人可能會聯想到如下兩種的排列方式,但究竟 哪一種方式是最緊密的排列呢?. (圖1) 每顆球恰與4顆球相鄰 (圖2)每顆球恰與6顆球相鄰 答案是如(圖2)這種每顆球恰與6顆球相鄰的情況,也就是市面上某些巧克力 包裝內巧克力排列的方式,或是筆筒內鉛筆排列的方式。 筆者在本文中設計了兩個球類堆積相關的小遊戲,分別是「堆球遊戲」與「步 步高升遊戲」,其中「堆球遊戲」乃許志農教授提供其大學部學生繳交作業中 -15-.

(22) ,其中一位學生的創作。而「步步高升遊戲」則是討論堆球遊戲時,藉由改變規 則所衍生出來的新遊戲。此二遊戲皆以將平面上的圓做最密堆積的方式堆疊。 (二)掰巧克力遊戲介紹 1.中國「拈」的相關介紹 拈是極其古老且饒富趣味的一個遊戲。據說,拈源自中國,經由被販賣到美 洲的奴工們外傳。辛苦的工人們,在工作閒暇之餘,用石頭玩遊戲以排遣寂寞。 流傳到高級人士後,則用辨士 (Pennils)在酒吧旳櫃檯上玩。最有名的是將十二 枚辨士分三列排成「三、四、五」的遊戲,如下圖: ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ( 圖3 ) 十二枚辨士的拈 遊戲的規則很簡單。兩人輪流取銅板,每人每次需在某一列取一枚或一枚以 上的銅板,但不能同時在兩列取銅板,直到最後,將銅板拿光的人贏得此遊戲。 拈的遊戲也可以做相反的規定:最後將銅板拿光的人輸。 一個頭腦靈活的人只要稍加研究,不久就會發現:先取的人,在第一列的三 枚銅板中取走二枚,就能穩操勝算。 另一個顯而易見的規律是:只要你留下兩 列枚數相同的銅板,必可獲勝。 所以如果這個遊戲只是「三、四、五」型態,那麼不久後,大部份人就能熟 悉其中規律,並且變得沒有興趣。有一個改變的方法是,將銅板的列數增加,每 一列的枚數改變。這樣的做法,的確使人有毫無規律的感覺, 至少不至於像「三、 四、五」型態的拈一樣易於把握。 另一個改變的方法就是限制每次拿取的最大數目,遊戲者每次仍需至少取一 枚銅板,但不能無限制的一次取走一整列的銅板,最多只能拿取某一指定的數目。 這樣的做法,又使遊戲變得更加的複雜化及具挑戰性。 -16-.

(23) 用來玩拈的道具不限於銅板。工餘之時,石頭可以玩;無聊磕瓜子時,瓜子 可以玩;圍棋子可以玩;也可以將石頭分堆放置,一堆相當於一列。這些都不是 重點,我們甚至可以改變拿取銅板的規定,以及最後取光時輸贏的規定。 2.「拈」的變形遊戲介紹 在拈的遊戲中,若取到只剩兩堆銅板的情況,則此時的制勝策略為「只要對 手將其中一堆拿到剩n顆,我們就跟對手一樣把另一堆拿到剩n顆」,如此周而復 始,最後我們必可拿光所有銅板。 下圖為與猴子玩拈玩到剩下最後兩堆的情形,其中一堆剩2顆,另一堆剩7 顆,此時玩家只需把7顆那堆拿走5顆,讓所剩兩堆數目一致。接下來看猴子拿走 幾顆,我們便取幾顆,猴子若取1顆,我們就取1顆;猴子若取2顆,我們便取2 顆。在剩下兩堆的情形中,只要我們把兩堆數目取一致,猴子必定會取成不一致 的數目,把握此原則,最後猴子取光其中一堆時,我們必可把另一堆也取光,獲 得勝利。. 在兩堆拈的變形遊戲中,有個叫做「切割長方形」的遊戲,其規則如下: a.有一個 m×n 的長方形(其中m,n皆為整數),甲、乙兩人輪流切割長方形。 b.一次只能切一刀,且切掉的長方形的邊長皆須為整數。切完後,將其中一塊長 方形拿走,留下另一塊給對方。 c.兩人輪流進行,最後留下1×1的正方形給對方者獲勝。 底下是一個9×12的長方形的例子:. -17-.

(24) 輪到的人每次可切一刀。甲先開始,甲先切掉右邊 9×3 的長方形(紅色). 輪到乙。乙再切掉上方 2×9 的長方形(藍色). 如次周而復始,最後不能再將長方形切割的人算輸(亦即:拿到 1×1 的正方 形者輸)。這個遊戲有個致勝策略,其方法與本文的第三章所介紹的「掰巧克力 遊戲」類似,研究者將在第三章進行探討。 市面上的數學遊戲書刊中亦介紹了些二堆拈的相關變形遊戲,如:撕郵票遊 戲、一指棋遊戲等。台北市立興雅國中的林壽福老師在某次的工作坊中,設計了 「勝吃巧克力」遊戲,當時在工作坊中開發成學習單,可以發給學生利用只本操 作此遊戲,而筆者將其更名並設計為 Flash 遊戲。. -18-.

(25) 第二節 遊戲與教學 一、遊戲式學習 「遊戲式學習」,即透過遊戲進行學習。學習者在遊戲的過程中,透過角色 扮演、任務達成,以獲得知識及解決問題的技能,進而達到學習的目的(黃靖淳, 2008)。遊戲式學習的概念及相關研究長久以來一直被專家學者提出探討,其研 究結果顯示將遊戲融入學習過程中,讓學習變得更具趣味性與挑戰性,透過做中 學的方式,引發學習者的學習動機及提昇學習成效。Papastergiou(2009) 認 為遊戲式學習環境具備多感官的感受、行動式、經驗式、以問題為基礎的學習特 性,有助於學習者連結過去的知識、經驗,以獲取更進階知識,同時提供及時回 饋,達到互動式學習目的。Rosas等人提出運用數位遊戲教學,對學習成效、認 知能力發展、學習動機及學習專注力有正面影響。另外,相較於傳統的教學模式, 遊戲式的教學對學生有很好的記憶保留成效(凃育嫈,2007),尤其是模擬遊戲 在記憶的保留性方面有比較卓越的效果(Pierfy,1977)。 遊戲可以增進玩家主動參與的動機,我們常常看到兒童一玩起遊戲來整個忘 我,玩再久也不會厭煩,絲毫不喊累,難怪有人說『遊戲是兒童的第二生命』(吳 幸玲,2003)。遊戲在兒童心中有一種難以言喻的獨特魅力,能夠使其沉迷於遊 戲情境。正因具備高度動機的特質,多位學者認為遊戲是很棒的學習工具可帶來 很大的影響(Hun , 2008 ; Prensky , 2003 ; Rieber ,1996),這也是Prensky (2001)所提出遊戲式學習(game-based learning , GBL)的契機理由。 Rebecca(2004)就在其研究中整理出使用遊戲式教學的特點: 1.採用遊戲的方式來學習能夠引發學生學習的動機。 2.遊戲能夠讓學生沉浸其中增加學習成效。 3.遊戲中學生具有較高的信心不怕失敗並有重複學習的精熟效果。 另外國內研究者陳羿介(2010)也整理出遊戲式學習的四大特色: -19-.

(26) 1.遊戲可以引起學生的高度學習動機,使其主動參與、持續學習。 2.遊戲提供多樣化的情境,創造多元與深層的學習機會。 3.遊戲提供建構與情境式的學習情境,玩家在遊戲中創建經驗,以利日後學習遷 移。 4.遊戲的高度互動性,可增進合作學習及他人溝通的機會。 遊戲式學習,可利用遊戲中的體驗與圖形介面的親和力作為學習工具,可讓 學生積極參與和互動,這是傳統教學方式所缺乏的(盧立翔,2009),加上在遊 戲式學習活動具有競爭性、融入性、立即獎賞等特質,這與一般課堂教學上所重 視的目標性、具有動機、評量等,具有相互補助的效能(邱文祺,2005),因此 遊戲式學習近年來蓬勃發展,一致被許多教育專家認為是能有效吸引與提升學習 動機,也是廣受注目的學習方式之一(周傳傑,2010)。 根據上述遊戲式學習與傳統學習最大的差異點做區分,我們可以發現遊戲式 學習的特點為:高度的沉浸體驗感、媒體多樣貌的即時互動機制、無壓力感的自 由控制學習。 張芳全(2010)在研究指出,學生學習動機對學習成就有正向顯著影響,所 以當所設計的遊戲式學習有足夠的吸引力時,學生才有機會融入所設計好的遊戲 式學習。如何將遊戲設計到讓學生百玩不厭成了研究者的研究課題。洪玉屏(2011) 針對國內百大熱門手機遊戲進行內容分析發現遊戲成功的因素,在內容性方面以 耐玩性最為注重,互動性方面以玩家間互動性最為注重。林娟娟和蘇政泓(2007) 指出玩家在遊戲中所形成的自尊(被人注意和尊重)為影響其參與遊戲意圖之重 要因素;而另一重要之因素為沈浸體驗,顯示若遊戲能令使用者專心於其中,則 對其參與意願將有正面影響。Malone(1981)表示遊戲能吸引人的四個要素有: 挑戰性(challenge) 、好奇心(curiosity) 、操控性(control) 、幻想性(fantasy), 而國內學者涂維妮(2003)針對「挑戰性」與「好奇心」兩要素,去研究何者較 能引發學童的學習興趣且有較佳的教學效果。結果發現『好奇心』的因素比挑戰 性效果為佳。綜合以上之結論研究者在發展數位遊戲上可以有三個方向: -20-.

(27) 1.為增加遊戲的耐玩度,從『好奇心』下手。 2.為發展玩家互動話題,讓玩家有人注意及被尊重感。 3.增強遊戲沉浸體驗,讓玩家專注其中。 二、遊戲對數學教學的影響 (一)在教師教學方面: 1. 對數學的發展的價值(王右軍,2002): (1)遊戲是獲得數學內容的有效方法之一。遊戲使任何年齡的人都能透過具體的 操作經驗去為將來的學習內容做準備。 (2)遊戲有利於數學思維的培養,從而使學生更深刻的理解數學的精神,並體認 到數學不只是一門一成不變的課程,而是人類心靈的自由創造。 (3)遊戲可以培養正確的數學態度。遊戲是培養好奇心有效方法之一,而好奇心 又為探索數學現象的奧秘提供強大動力,如果學生在上課時對數學沒有強烈的好 奇心當作學習動機,那麼學習將是一個痛苦而緩慢的過程。 2. 遊戲教學的優點(Krulik & Rudnick,1983): (1)遊戲可以取代一些無趣的例行性訓練和引發學生自發性的練習。 (2)遊戲的情境可以提供獲勝的機會和取得同儕的認同。 (3)嘗試解決遊戲難題的過程中,可以引導學生研究新的問題解決之技巧。 (4)遊戲過程需要遊戲者主動參與,而一般課室中學生比較要被動聽教師解釋。 (二)在學生學習方面: 饒見維(1996)在深入研究並應用數學遊戲教學法於國小課室教學之後,提 出善用數學遊戲教學法具有下列幾項優點: 1. 激發學生學習數學的興趣及動機。數學遊戲本身活潑有變化,帶有機運性、 趣味性、挑戰性與競爭性,並能結合生活情境與經驗,讓學生在遊戲中應用數學 知識,可以避免枯燥的反覆計算及解題活動,學生在輕鬆愉快的氣氛中學習,也 可以減少對數學的排斥。此為數學遊戲教學法最大的優點。 -21-.

(28) 2. 幫助學生從具體的經驗建立基本的數學概念與技巧。有些數學遊戲設計的著 眼點,在於讓學生在模擬情境中理解數學的意義,幫助學生在數學符號和意義之 間建立堅強的聯結。有些數學遊戲則讓學生從操作具體的象徵物開始逐步培養基 本概念與運算,並讓學生反覆操作加深印象。此外,有些數學遊戲是為了創造應 用的情境,讓學生在遊戲活動中,自然而然的必須應用先前所學過的數學概念與 技巧,因而使數學變得「有用」。 3. 培養學生解決問題時的靈活變通與深度推理思考能力。建構主義強調讓學生 透過不斷的解題活動,主動建構起數學的概念和技能,培養出主動思考問題,解 決問題的能力,而以數學遊戲教學為方法恰能符合建構主義的精神,因為每一個 數學遊戲都是一個大型的問題解決活動,學生必須運用有效的數學知能才能有所 獲得。 4. 幫助學生精熟基本計算方法與計算能力。精熟基本的計算能力其實只是數學 遊戲教學法的附帶效果,遊戲本身的趣味性、挑戰性、以及培養數字推理思考的 能力,才是更重要的效果。 5. 提供學生成功的經驗並幫助學生建立自信。在不同遊戲當中,都能給部分學 生成功的經驗,尤其在機運性遊戲裡,每個學生都有機會獲得成功的經驗,不會 只有少數人重覆獲得。 6. 發揮聯絡教學與整體學習的效果。在不同的遊戲活動中,學生可以綜合應用 各種相關數學概念與技巧,並讓各種不同的單元產生聯結,即能發揮整體學習的 效果。 7. 提供即時的回饋與學習輔導。多數的遊戲在過程中,學生的表現都可以獲得 立即的回饋。學生在上台發表小組遊戲成果時,教師也可以了解學生在概念或計 算上的錯誤,並提供立即的學習輔導。 8. 遊戲的教學效果好,效率高。在良好的遊戲活動中,幾乎每個學生都會用心 投入,積極思考,並不會浪費教學時間,而且如果多數人在多數時間裡都在用心 思考與討論,則學習效果必能提昇。 -22-.

(29) Burns(2003)也提出在數學教學中使用遊戲有以下的好處: (1) 提供學生技巧的練習。 (2) 給學生在問題解決情境中運用數學概念的方法並發展在數學思維重要部分 的策略性思考。 (3) 讓學生在樂於活動及挑戰中建立學生的興趣。 (4) 支持學習可以、應該是有樂趣的想法。 (5) 創造一個有教育價值的選擇性活動的課室並提供比較快完成任務的學生較 多選擇性。 繆發鑫(2009)對於「數學遊戲教學」課堂教學模式的操作嘗試有如下的建 議: (1) 在引言、緒論教學中引入遊戲:一開始就利用學生的興趣設計活動,能激 發學生的學習積極性,獲得愉悅的學習體驗,同時促進學生主動建構有關的數學 知識。 (2) 在新概念教學中引入遊戲:數學概念是進行推理及判斷的基礎,清晰的概 念是進行正確思維的前提,也是教學的難點,因此引入數學遊戲不失為一個好方 法。 (3) 在複習題教學中引入遊戲:有些教師為了讓學生多做練習以得到較佳的學 習記憶保留,但學生並不喜歡反覆練習,若教師能引入適當的遊戲,使學生在遊 戲樂園中鞏固舊知。 融入一個良好的數學遊戲於課室之中,對教師和學生都有莫大幫助。在教師 方面,可讓課室氣氛活潑,在班級經營上有絕對的幫助,也有助於設計教材方面 能力的提升,使教學更多樣化、更具吸引力。再從學生在遊戲中的對話了解學生 的迷思,調整自己的教學方式或重點;在學生方面,會對數學課充滿好奇與興趣、 投入程度高、把所學到的數學概念運用出來,所以有實施的價值。以上各學者的 見解加上一些實徵性研究發現,可以將遊戲應用在教學上,有機會使老師上課內 容有趣不乏味、營造良好的班級氣氛、學生的好奇心、學習態度、自信心培養、 -23-.

(30) 解決問題能力獲得改善,而這些條件正是一個教師教學成功不可或缺的因素。. 第三節 開發數位遊戲的工具 一、Flash 與 ActionScript 概述 根據維基百科(2012)對 ActionScript 的介紹,ActionScript 是 Macromedia 公司(現已被 Adobe 收購)為其 Flash 產品開發的程式語言,現在最新版本 3.0, 是一種完全的物件導向的程式語言,功能強大,類庫豐富,語法類似 JavaScript, 多用於 Flash 互動性、娛樂性、實用性開發,網頁製作和 RIA 應用程序開發。 ActionScript 是一種基於 ECMAScript 的程式語言,可用於編寫 Adobe Flash 動畫和應用程式。 由於 ActionScript 和 JavaScript 都是基於 ECMAScript 語法 的,理論上它們互相可以很流暢地從一種語言翻譯到另一種。不過 JavaScript 的文件物件模型(Document Object Model,簡稱 DOM)是以瀏覽器窗口,文件 和表單為主的,ActionScript 的文檔對象模型(DOM)則以 SWF 格式動畫為主, 可包括動畫,聲音,文字和事件處理。 ActionScript 第一次以它目前的語法出現是 Flash 5 版本,這也是第一個 完全可對 Flash 編程的版本。這個版本被命名為 ActionScript 1.0。Flash 6 通 過增加大量的內置函數和對動畫元素更好的編程式控制制更進一步增強了編程 環境的功能。Flash 7(MX 2004)引進了 ActionScript 2.0,它增加了強類型 (strong typing)和物件導向特徵,如顯式類聲明、繼承、介面和嚴格數據類 型。ActionScript 1.0 和 2.0 使用相同的編譯形式編譯成 Flash SWF 文件(即 Shockwave Flash files,或 'Small Web Format')。 Flash Player 和ActionScript 的開發團隊體認到發展現有引擎,將有著太 多限制而無法繼續研發新功能。經過這些可敬的人們長期不斷的努力後,Flash. -24-.

(31) Player 的歷史轉戾點到來了。Flash Player9 版本在2006 年首次引入了 ActionScript 3.0 和新一代的ActionScript 引擎-ActionScript Virutal Machine 2(AVM2)AVM2 是一個新的、高度最佳化虛擬機,顯著超越了AVM1 可 能達到的性能。ActionScript3 基本上是ActionScript 引擎的完全覆寫,在AVM2 中執行可達到前所未有的高效率和高性能,執行速度最多可比原有 ActionScript1/2 程式碼快10 倍。(謝武宏,2010) ActionScript 3.0的編譯器程式碼基底,相較於舊版編譯器,可以執行更深 入的最佳化作業,以 ECMAScript for XML (E4X) 規格 (ECMA-357 第 2 版) 為 基礎的 XML API。E4X 是 ECMAScript 的語言擴充功能,將 XML 新增為該語言 的原生資料類型。ActionScript 3.0以「文件物件模型 (DOM) 第 3 層事件規格」 為基礎的事件模型。(奧多比系統,2012) 二、其它開發數位遊戲的工具 1.Visual C++程式語言 C++是擁有著優良傳統的程式語言,而 VC++則是微軟公司所開發出的一套適 用於 C/C++語法的程式開發工具。在 VC++的開發環境中,對於撰寫 Windows 作業 系統平台的視窗程式有兩種不同的程式架構:一是微軟在 VC++中所加入的 MFC(Microsoft Foundation Class library)架構,MFC 是一個龐大的類別函式 庫,其中提供了完整開發視窗程式所需的物件類別與函式,常用於設計一般的應 用軟體程式;一則是 Windows API 架構,使用 Windows API 來開發上述的應用軟 體程式並不容易,但用在設計遊戲程式上卻相當簡單且具有較優異的執行效能。 C++程式編譯後的檔案為可直接執行的機器碼,相較於其他程式語言如:VB、 Java,由於這類程式編譯後產生的一種所謂的「中間碼」,中間碼執行時,系統 內必須存在解譯該程式語言的「直譯器(Interpreter)」來做同步翻譯的工作。. -25-.

(32) 直譯器解釋中間碼時,本身會載入到記憶體中佔用部分記憶體,且同步翻譯中間 碼的過程亦會浪費時間,使的這類型的程式執行時會比可直接執行的機器碼來的 緩慢許多,而這也是 C++的程式有較優越執行速度的主要原因之一。 在 Visual C++的開發環境中,對於程式資源及記憶體的管理方面皆相當的 具有彈性。在資源管理部分,通嘗試透過一個資源識別碼,就可以對該項資源來 進行運用。這裡所指的資源,包括視窗、裝置、圖像、聲音等物件。在記憶體管 理部分,C/C++語言本身就具備記憶體管理的功能,除了可透過指標進行記憶體 的存取、配置外,也提供了完整的記憶體管理相關函式。(榮欽科技,2004) 2.Visual Basic 程式語言 Visual Basic 是 1991 年的產物,利用這種語言設計視窗應用程式較單純的 原因是:一般Windows 視窗複雜的介面處理動作,例如:捲軸控制 (scroll bar)、 選擇表建立 (menu)、對話方塊 (dialog box)……等複雜的運作,都已經被簡化 成簡單的指令,使用者可以用幾個簡單的步驟輕鬆的完成工作。 「Visual」的中文意思是視覺的,就程式設計的觀點而言,它是指開發圖形使用 者介面的方法,這種程式設計方法就是在建立輸出入介面時,不必撰寫程式來描述 介面元件的外觀和配置,只要使用工具箱的工具,在程式設計階段便可達成,是屬 於一種「What You See Is What You Get (WYSIWYG)」直覺式的設計觀念。Visual Basic 就是以 BASIC 語言為基礎,再加入許多和 Windows GUI 有關的設計。 (徐華青,2001). Visual Basic 不需撰寫大量程式碼來描述介面元件的外觀和配置,而只要 把預先建立的物件添加到螢幕上的某一點即可,如果曾經使用過如小畫家之類的 繪圖程式,那麼應該很容易接受這觀念。Visual Basic 以原來的 BASIC 語言為 基礎,做了更進一步的發展,至今包含了數百個陳述式、函數及關鍵字,其中有 很多都和 Windows GUI 有直接關係。專業人員可以使用 Visual Basic 製作出任 -26-.

(33) 何其它 Windows 程式語言所能做到的功能,而初學者則只要掌握幾個基本要領, 就可以建立實用的應用程式。 3.Java 程式語言. 華醫資管 JAVA 教學網(無日期)在其網站中提到了 Java 語言是美國昇陽公司 (Sun Microsystems 現在已經併入 Oracle)所開發的程式語言。再 1991 年時, 昇陽公司成立了一個名為 Green Project 的研究計劃,主要的目的是開發消費性 電子產品的控制軟體,而由於當時所使用的「C++」程式語言過於複雜且缺乏安 全性,所以,當時的計畫主持人 James Gosling 便以「C++」為基礎,重新開發 了一套新的程式語言,名稱為「Oak」,它便是 Java 的前身。 Java 語言和 C++有關,而 C++又來自於 C 語言。其實,Java 語言許多的特性 是繼承自這兩種程式語言, Java 語言的特性有以下幾點: (1) 簡單(Simple):Java 制定的原則即是要開發一種架構簡單,並且易學的程 式語言,讓設計師不用經過艱深的訓練過程即可使用。Java 捨去 C 或 C++語 言中較少使用到的功能,例如:C++語言中的運算子多載(operator overloading)、多重繼承(multiple inheritance)...等功能。同時,Java 語言也增加一些它本身的特殊功能,例如:垃圾收集(garbage collection) 機制,讓系統本身可以自行回收程式中不再使用到的資源,使得程式設計的 工作更加得容易。 (2) 物件導向(Object-Oriented):Java 是一種物件導向的程式語言,開發應用 系統時,物件導向設計是一種相當有效率的設計方式,它的強大來自於能更 清楚得定義系統所需的功能,並讓已設計好的功能可以更方便的重覆使用。 (3)網路功能(Network-Savvy):Java 利用它強大的類別庫(Library)當作開發網. -27-.

(34) 路程式的基石,讓設計者可以輕鬆的開發網路程式。 (4)強韌(Robust):Java 強調程式的穩定性,期望利用 Java 開發的應用程式能 在各種情形下都能穩定的執行。因此,Java 程式在編譯時,編譯器就會嚴格 的檢查程式碼,並嚐試找出程式執行時,可能產生的錯誤。 (5)安全性(Secure):Java 被設計的本意即是希望能用於分散式網路的開發環境 中,也因此,Java 特別強調安全性。除了提供防範病毒侵入的機制之外,Java 也採用公開金鑰的加密方式(public key encryption)來達成認證的目的。 (6)跨平台(Architecture Neutral):既然被設計成網路程式的開發工具,Java 程式必須能用於不同類型的 CPU 和作業系統中。Java 的編譯器將程式的原始 碼編譯成架構中立的位元碼(Byte Codes),而不同機器上的 Java 執行環境(稱 為 JVM, Java Virtual Machine)都能讀取這些位元碼,以便達到「Write Once, Run Anywhere」的目的。 (7)程式直譯(Interpreted):Java 的原始程式會被編譯成位元碼,在任何具有 JVM 的機器上都可以執行 Java 的位元碼,位元碼在被執行時,雖然採用直譯 的方式,但由於該位元碼特殊的設計方式,除了可以很快的專程機器碼之外, 更可利用 just in time 編譯器來產生高效率的執行結果。 (8)高效率(high-performance):執行過 Java Applet 的人也許會不認同這項優 點,總是會認為 Applet 的載入時間過長。但就 Java 的位元碼在執行時,能 夠很快速的轉換成機器碼而言,它的程式執行效率並不會比 C 或 C++語言所 開發的系統來的差。 (9)多執行緒(MultiThread):執行緒是指程式要執行的工作。傳統的程式語言, 例如:C、C++,並不容易設計出多執行緒的程式。但 Java 卻能使用簡單的幾. -28-.

(35) 行敘述就可以讓應用程式達成同時執行多項工作的任務。. 4.Game Maker GameMaker 是一款擁有圖形界面,可靈活編輯,以 2D 遊戲設計為主的遊戲 開發軟體。GameMaker 體由 Mark Overmars 使用 Delphi 語言開發,於 1999 年 11 月發布了首個公開版本,在 4.3 版之後轉為部分功能收費軟體。 後由英國 公司 Yoyogames 收購,大力推動了歐美乃至全世界獨立遊戲界的發展。目前最 新版本為 Game Maker 8.1。 Game Maker 是一套容易使用的程式,可以用來創造自己的電腦遊戲,內建 了程式語言 GML。主要為降低遊戲設計的難度而寫,不需要寫程式,用簡單直 覺的拖放滑鼠的工具列,便可設計出自己的遊戲。可以輸入或設計影像、子圖形 (會動的影像)、聲音並使用他們。可以很容易地定義遊戲中的物件以及他們的 行為表現,遊戲設計者可以設計有捲動背景的華麗場景。萬一想要對程式全面控 管,遊戲製作者中內建了程式語言,可以對遊戲當中的所有元件做控制。(百度 百科,2012). -29-.

(36) -30-.

(37) 第三章 數位數學遊戲說明 第一節 圓球堆積類遊戲 一、堆球遊戲 (一)堆球遊戲簡介 堆球遊戲是師大數學系許志農教授在某一堂課程授課時,學生繳交的作業中 的其中一項。這名同學原先以銅版放在桌上跟玩伴互玩,可以有 10 個、15 個、 21 個等等的形式,是一個雙人對戰的遊戲,甲乙雙方輪流將球不斷的往上堆, 最後拼成正三角形的形狀。 (二)堆球遊戲規則 考慮十五顆球的情況: 1.遊戲一開始,十五顆球排成一直線,甲乙雙方輪流將球往上移動。. 2.一次可將某顆球及其右方的所有球從同一層堆疊到其上的某一層,堆疊時需靠 左對齊,如下圖:. 將底層的三顆球往上一層堆。 -31-.

(38) 將底層的二顆球往第三層堆。 3.下層的球數必須比上層多,使每顆球呈現穩固狀態。 4.最後將球堆疊成下圖形式者即獲勝,亦即:讓對手無球可再往上堆便獲勝。. (三)堆球遊戲的致勝關鍵 以 10 顆球的情況來做說明 1.列出球所有可能的堆疊情況 2.將每種情況與下一步驟可能情況以箭號連接,如下圖. -32-.

(39) 3.可以發現出現最後情況的前一步驟唯一. 4.達成最後的情況即獲勝:以紅色標記,表示若達成其前一種情況必輸:以綠色 標記。 5.利用這個方法,如果下一步驟中有出現為紅色標記(獲勝),則移動到此步驟必 輸,以綠色標記;若下一步驟全為綠色標記,則移動到此步驟必勝。. -33-.

(40) 6.經沙盤推演列出所有狀況後發現:此遊戲先手必勝,但只有一種必勝方法,一 旦動錯一步,勝利就拱手讓人了。目前尚未找出必勝情況的規律,只能一步一步 慢慢往前推論。 15 顆球的勝利情況為:. 將球移成上面六個情況之一留給對手後,不管對手如何堆疊,下一步繼續將 球移成此六個情況之一,如此反覆輪流,則可確保勝利。. 二、步步高升遊戲 (一)步步高升遊戲簡介 此遊戲是筆者與指導教授在研究堆球遊戲時,想到的另一種堆球方法。因堆 球遊戲一次可以取一顆或好幾顆球,但若將規則給為一次只能取一顆球,往上堆 時不一定要靠左對齊,那麼此規則下的堆球又有了另一種玩法了。在此因本遊戲 -34-.

(41) 一次只移動一顆球,且只能往自己那一堆的上面堆積,因此取名為步步高升遊 戲。. (二)步步高升遊戲規則 1.十五顆球排成一直線,甲、乙兩人輪流移動球。. 2.一次將一顆球移動到其上的某一層。 3.以最底層的球為分界,被移動的球只能在同一堆中移動。如下圖:14 號球右 邊的藍色球要往上堆時,只能堆在 12、13、14 號球上方,但不可堆在 9、10 號球的上方。. -35-.

(42) 4.下層的球數必須比上層多,並且使球呈現穩固狀態。在此的穩固狀態是指:要 不球就在最底層,如果球已被往上堆了,那麼必須堆在左下、右下皆有球的位 置。. 5.最後使對方無法往上移動球者即獲勝。如下圖即為一無法再往上堆的例子。. (三)步步高升遊戲的變形 因「步步高升遊戲」是研究者與指導教授研究其他遊戲時,想到的新規則玩 法,並將將此規則以 Flash 軟體實現,但在研究者於教學現場進行教學活動時, 請任教班級學生以銅板代替圓球實驗此玩法是否好玩時,發現將「步步高升遊戲」 的規則「3.以最底層的球為分界,被移動的球只能在同一堆中移動」修改為「3. 往上堆球時,不限制只能堆在通一堆」,則遊戲仍然可以順利進行。如此又變為 另一新規則且不失趣味的遊戲了。 在《刻卜勒的猜想》一書中探討了空間中的圓球如何最密堆積的問題,最後 經近代科學家證明需以「六方最密」 (或「面心立方」)的方式堆積。而在本研究 中的堆球皆為平面(二維)遊戲,若能將此遊戲開發成立體(三維)遊戲,模擬 在三維空間中穩固的堆球,相信不管在同樣或改變規則的玩法下,必可玩出更不 一樣的新意。 -36-.

(43) 第二節 「拈」的變形遊戲 一、掰巧克力遊戲 (一)掰巧克力簡介 巧克力的原產地是墨西哥,主要原料是可可豆,追溯巧克力的起源,一說是 墨西哥即盛一時的阿斯帝卡王朝最後一任皇帝孟特儒(Montezuma),當時將巧 克力做成飲料,並加入辣椒、番椒、香草豆和香料調味,只有皇廷成員們能夠飲 用。巧克力的學名 theobroma 有「眾神的飲料」之意。 西元 16 世紀時,西班牙探險家 Hernando Cortez 將可可豆帶進歐洲,廣受歐 洲人喜愛。17 世紀時,西班牙的十四歲小公主與法王路易十四文定典禮,將西 班牙的巧克力帶入法國巴黎宮廷,奠定了巧克力與法國之間化不開的濃密情誼。 從此以後,法國,比利時和瑞士就成為製造巧克力的領導王國。經過多年的流行, 直到今天,巧克力已受到世界各地的歡迎。 在浪漫的情人節裡,巧克力是男女之間表達愛意的最佳禮品之一,義大利與 英國科學家的研究發現,巧克力中的抗氧化物質可能有益於人體健康,而他們的 成果已發表於 2003 年八月底的英國《自然》期刊(Nature 424:1013)。文章中指 出,食用巧克力將有助於體內抗氧化物質的提升。 相信絕大說數人都有吃巧克力的經驗,在市售的巧克力中,有一種是由許多 小長方形規則排列而成的方格形狀巧克力,在吃巧克力時,吾人可將此種方形巧 克力掰成一小片一小片的吃。方形巧克力也很適合分享給在旁的朋友共同享用, 在教學現場中進行此數位遊戲活動時,許多同學們打開遊戲的第一個反應是:巧 克力看起來好好吃!若能在掰巧克力的同時也能親近數學,也許學生就此將數學 與巧克力做成連結也未可知。. -37-.

(44) (二)掰巧克力遊戲規則 掰巧克力遊戲由雙人進行,其規則是: 1.有一塊方格狀巧克力如右下圖所示,上面有 3 條凹橫線,5 條凹豎線,這些線 將巧克力分隔成 24 個小方格。. 2.甲先沿著一條線將巧克力掰成兩塊,吃掉 l 塊(兩塊不一定相等);乙再沿一 條線將剩下的巧克力掰成兩塊,吃掉 1 塊。. 3.就這樣兩人輪流掰吃這塊巧克力,直到最後留下一小格給對方者獲勝。. -38-.

(45) (三)掰巧克力遊戲的致勝關鍵. 1.拿到的是 1×N(或 N×1)格的方格巧克力: 先手可掰 1×(N-1)顆巧克力,留下 1×1 個給對方,此時先手勝。 2. 拿到的是 M×N 格的方格巧克力,其中 M≠N: 先手掰掉其中某些巧克力,讓巧克力變成 N×N 格留給對方(假設 M >N) 。亦即,想辦法把長寬不相等的長方形巧克力掰成長寬一樣的正方形 巧克力,如此後手每次必定把巧克力掰成長寬不相等的巧克力(M≠N), 先手再拿到後,再將其掰成長寬相等的正方形,如此不斷進行,巧克力越 掰越小,最後先手把巧克力掰成 1×1 格留給對方。先手勝。 3. 拿到的是 M×N 格的方格巧克力,其中 M=N: 若對方也會玩掰巧克力,後手勝。拿到正方形的巧克力,不管如何掰, 必定留下長方形給對方,因此需等對方出錯變成仍然掰成長方形回來。. -39-.

(46) -40-.

(47) 第四章 數位數學遊戲的程式碼說明 第一節 堆球遊戲 堆球遊戲設計流程: (1)設計遊戲所需要的圓球物件,再利用陣列儲存每顆 圓球的資訊,將圓球顯示於面版上。 (2)利用函數判斷每個圓球在滑鼠滑入、滑 出、左鍵點選時,應該作何反應,以使動作符合遊戲規則。 (3)撰寫遊戲勝利條 件:最後完成堆球的玩家,就是勝利者。 一、面版佈置-第一影格. 遊戲開始時的畫面,搭配畫面下方遊戲規則說明。 var facePattern : Array = [[0,0,0,0,2,0,0,0,0], [0,0,0,2,0,2,0,0,0], [0,0,2,0,2,0,2,0,0], [0,2,0,2,0,2,0,2,0], [2,0,2,0,2,0,2,0,2]]; //在 facePattern 陣列中安排開始畫面的圓球堆積完成圖 -41-.

(48) var faceBall:Array=[[],[],[],[],[]]; var m,n : int; //做為 for 迴圈時運用的變數 var bar_blue : barStart_btn= new barStart_btn(); bar_blue.x = 140; bar_blue.y = 70; function CreatfacePanel():void { //排放開始面板的圓球 for (m=0; m<= 4; m++) { for (n=0; n<= 8; n++) { if (facePattern[m][n]!=0) { faceBall[m][n]=new Ball(); faceBall[m][n].x = 330+21*n; faceBall[m][n].y = 220+35*m; faceBall[m][n].scaleX = 1.1; faceBall[m][n].scaleY = 1.1; faceBall[m][n].gotoAndStop(facePattern[m][n]); addChild(faceBall[m][n]); } //if } //for m } //for n } // function CreatfacePanel function startGame(me:MouseEvent):void { //使用者點選開始時,將第一影格畫面清空,並進入第二影格 for (m=0; m<= 4; m++) { for (n=0; n<= 8; n++) { if (facePattern[m][n]!=0) { removeChild(faceBall[m][n]); } //if } //for m } //for n -42-.

(49) gotoAndPlay(2); } stop(); CreatfacePanel(); addChild(bar_blue);. //安插開始按鈕. bar_blue.addEventListener(MouseEvent.CLICK, startGame); 二、遊戲操作-第二影格 import flash.display.Sprite; var AnswerPattern : Array = [[0,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0], [0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0], [0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0], [0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0], [11,0,12,0,13,0,14,0,15,0,16,0,17,0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25]]; //紀錄遊戲主面版上各位置的放置了那些球 var rollArray : Array = [0,0,0,0,0,0,0]; //暫存球被滑鼠滑過時,且可被取的情況下,是哪些球可被取 var downArray : Array = [0,0,0,0,0,0,0]; //暫存球被滑鼠點選時,且可被取的情況下,是哪些球可被點選 var bar_brown : barRestart_btn = new barRestart_btn (); bar_brown.x = 140; bar_brown.y = 70; //設定重玩按鈕 var i,j:int; //協助 for 迴圈的運作 var AnswerBall:Array=[[],[],[],[],[]]; //準備將 Ball 物件存於陣列中 var CurrentI,CurrentJ : int; var moveCount : int = 0; var ballNo : int; var rollI,rollJ : int; var accum : Array = [0,0,0,0,15]; var startBallJ : Array = [4,3,2,1,0]; var permission : Array = [0,0,0,7,0];. //記錄被選取欲往上堆的第一顆球的位置 //計算搬運球的總數量 //紀錄被挑選的球的號碼 //紀錄滑鼠目前滑過第幾行、第幾列的球 //記錄各層剩餘球數 //記錄各層第一顆球的起始行 //記錄各層可再放多少顆球. var placeCheck : Array = [false,false,false,false,false]; //確認每層可否放入 moveCount 的球數 var placeJ : Array = [4,3,2,1,0]; var CanPut : Boolean = false;. //若可放球,從此列的第幾行開始放 //協助判斷放球事件是否可行 -43-.

(50) var takeI : int; var duplicate :int = 0; var CurrentI_d,CurrentJ_d : int; 點選那個位置的球. //紀錄可拿球時,是從第幾列(層)取的 //在選取欲移動的球後,紀錄已有球被選取 //已有球被選取的情況下,紀錄使用者上一次. var moveCount_d : int; //已有球被選取的情況下,紀錄使用者上一次搬運球的總數量 var moveCount_modi : int; //釐正已有球被取的情況下,使用者改變主意改選其他球時,球的數目的計算 var accum_d : Array; //已有球被選取的情況下,複製使用者上一次動作時的各層球數 var turnCount : int = 0; //記錄進行到第幾輪,以便判斷輪到誰 var turnToWho : myTurn_mc = new myTurn_mc(); turnToWho.x = 400; turnToWho.y = 500; //設定輪到誰的文字對話框 addChild(turnToWho); var Awin : A_victory = new A_victory(); Awin.x = 50; Awin.y = 200; //設定甲獲勝的文字對話框 addChild(Awin); var Bwin : B_victory = new B_victory(); Bwin.x = 750; Bwin.y = 200; //設定乙獲勝的文字對話框 addChild(Bwin); //煙火系列變數 begin var fireContainer:MovieClip = new MovieClip(); var fire:Array = []; var maxNum:int = 10; //預設煙火數目 var type:int = 0; //儲存要放哪種煙火 var sizeArray:Array = [0.4, 0.7, 1]; //宣告存有 3 種煙火縮放比率的陣列變數 var size = 0; //用來指定煙火尺寸之索引值, 預設為 0 var fireX : Array = [100,150,125,180,135,120,125,150,135,175]; // 甲獲勝時煙火施放位置的 X 值 var fireY : Array = [500,450,480,525,475,450,485,465,490,500]; // 獲勝時煙火施放位置的 X 值 var gameTimer:Timer = new Timer(1000, 0); //建立計時器實體 var onTick : int = 0; //煙火系列變數 end -44-.

(51) function CreatAnswerPanel():void { //建立影格二的遊戲開始面板 for (i=0; i<= 4; i++) { for (j=0; j<= 28; j++) { if (AnswerPattern[i][j]!=0) { AnswerBall[i][j]=new Ball(); AnswerBall[i][j].x = 100+21*j; AnswerBall[i][j].y = 220+35*i; AnswerBall[i][j].scaleX = 1.1; AnswerBall[i][j].scaleY = 1.1; AnswerBall[i][j].gotoAndStop(AnswerPattern[i][j]); addChild(AnswerBall[i][j]); AnswerBall[i][j].PositionI = i; AnswerBall[i][j].PositionJ = j; AnswerBall[i][j].addEventListener( MouseEvent.MOUSE_DOWN, PlayBallDown); AnswerBall[i][j].addEventListener( MouseEvent.ROLL_OVER, ballRollOver); AnswerBall[i][j].addEventListener( MouseEvent.ROLL_OUT, ballRollOut); } //if } //for j } //for i } // function CreatAnswerPanel. -45-.

(52) 進入遊戲後,來到遊戲主畫面,1~15 號球依序排在最底層呈一直線,左方有一 紅色正三角形的兩邊,暗示使用者往左邊堆積。 function ballRollOver(meOver:MouseEvent):void { rollI = meOver.currentTarget.PositionI; rollJ = meOver.currentTarget.PositionJ; var rollC, gapJ :int; CanPutFunction(rollI,rollJ); if ( ( (AnswerPattern[rollI][rollJ] > 10) && ( (accum[rollI] + moveCount_modi - moveCount) > accum[rollI-1]) && CanPut ) || (AnswerPattern[rollI][rollJ] == 4) ) { //有球可取 if (duplicate == 0) { i = 0; //協助 rollArray 的暫存 for ( rollC = rollJ; rollC <= (rollJ +moveCount*2-2); rollC +=2) { rollArray[i] = AnswerPattern[rollI][rollC]; //紀錄那些球改變為面貌 3:半透明臉 i++; AnswerPattern[rollI][rollC] = 3; AnswerBall[rollI][rollC].gotoAndStop(3); -46-.

(53) } //for 將可選取的球都設定為面貌 3:半透明臉 }// duplicate == 0 else {// duplicate == 1 rollArray = [0,0,0,0,0,0,0]; if (rollI != CurrentI_d) { i = 0; //協助 rollArray 的暫存 for (rollC = rollJ; rollC <= (rollJ +moveCount*2-2); rollC +=2) { rollArray[i] = AnswerPattern[rollI][rollC]; i++; } //for } // if 不同層 else if (rollJ >= CurrentJ_d) { gapJ = (rollJ - CurrentJ_d) / 2; i = 0; for (rollC = rollJ; rollC <= (rollJ +moveCount*2-2); rollC +=2) { rollArray[i] = downArray[i+gapJ]; i++; } //for } //同層且取的較少 else if (rollJ < CurrentJ_d) { gapJ = (CurrentJ_d - rollJ) / 2; i=0 for (rollC = rollJ; rollC < CurrentJ_d ; rollC +=2) { rollArray[i] = AnswerPattern[rollI][rollC]; i++; } //for 紀錄前面的球號 i = 0; for (rollC = rollJ; rollC <= (rollJ +moveCount*2-2); rollC +=2) { rollArray[gapJ+i] = downArray[i]; i++; -47-.

(54) } //for 紀錄後面的球號 } //同層且取的較多 ballNo = AnswerPattern[rollI][rollJ]; AnswerPattern[rollI][rollJ] = 3; AnswerBall[rollI][rollJ].gotoAndStop(3); }//假如 duplicate == 1 } //if 有球可取 } //function ballRollOver():當滑鼠滑入時 function ballRollOut(meOut:MouseEvent):void { rollI = meOut.currentTarget.PositionI; rollJ = meOut.currentTarget.PositionJ; if (AnswerPattern[rollI][rollJ] == 3) { // 滑過的球有被改為面貌 3,則將其改回原來的面貌 if (duplicate == 0) { i = 0; for (var roll_C = rollJ; roll_C <= (rollJ +moveCount*2-2); roll_C +=2) { AnswerPattern[rollI][roll_C] = rollArray[i]; AnswerBall[rollI][roll_C].gotoAndStop(rollArray[i]); i++; } // for for (i = 0; i < 8; i++) { }. rollArray[i] = 0; //將 rollArray 歸零. } // duplicate == 0 else { // duplicate == 1 AnswerPattern[rollI][rollJ] = ballNo; AnswerBall[rollI][rollJ].gotoAndStop(ballNo); } //假如 duplicate == 1 } // if 滑過的球有被改為面貌 3,則將其改回原來的面貌 } //function ballRollOut():當滑鼠滑出時. -48-.

(55) function CanPutFunction(CanPutI:int, CanPutJ:int):void { var tempAccum : Array // 複製 accum 陣列 var CanPutIn : Array = [0,0,0,0,0]; if (duplicate == 1) { accum[CurrentI_d] += moveCount_d; //更新取球層的球總數 /* 使用者已選球但未往上堆時,可改選其他顆球。此時,若改選的球跟已選 的球在同一層,則 moveCount_modi 變數可協助在 PlayBallDown()函數中,if 的 判斷式判斷”選擇這顆球及其右方的所有球往上堆時,是否仍為穩固堆積”的情 形。 1.改選為同一層時:計算該層總球數時,須先將原本變成綠臉的球 moveCount_d 改回為藍臉球數計算,因此令 moveCount_modi = moveCount_d 2.改選在不同層時:計算該層總球數時,不會有此困擾(綠臉的球要不要算進去), 因此令 moveCount_modi = 0 **************************/ if (CanPutI == CurrentI_d) { //改選在同一層 moveCount_modi = moveCount_d; } else { //改選在不同層 moveCount_modi = 0; } } //若有改變心意,先將原本選取的球改為未選取 else { //此輪為新局,未反悔 moveCount_modi = 0; } moveCount = accum[CanPutI] - (CanPutJ - startBallJ[CanPutI])/2; //計算要移動的球的數量 global var CanPut = false; //先預設為不可放球 tempAccum = accum; // 複製 accum 陣列 tempAccum[CanPutI] -= moveCount ; for (var updateCan = 0; updateCan < CanPutI ; updateCan++) { if (tempAccum[updateCan+1] != 0) { //假如下面一層不是空的(至少有一顆球) CanPutIn[updateCan] = tempAccum[updateCan+1] -49-.

數據

Updating...

參考文獻