• 沒有找到結果。

中 華 大 學

N/A
N/A
Protected

Academic year: 2022

Share "中 華 大 學"

Copied!
57
0
0

加載中.... (立即查看全文)

全文

(1)

中 華 大 學

碩 士 論 文

題目:以遊戲情境建置 C 程式語言編輯器 Develop a Game-based C Programming Language

Editor

系 所 別: 資訊管理學系碩士班 學號姓名: E09310002 蔡文和 指導教授: 王偉德老師

中華民國 九十六 年 一 月

(2)

摘要

許多針對教學的研究已經發現,只要增強學習者的學習動機及給予學習過程 當中更多的樂趣,便能有效提高學習成效。在現今生活與流行文化中,電腦遊戲 已經成為不可或缺的部份,而將遊戲情境概念運用於教學上,不僅能夠幫助學習 者學習,同時也能增強學習的動機與興趣,達到寓教於樂的目的。

C 程式語言已經成為許多資訊相關科系學生第一個學習的程式語言,根據調 查指出,許多 C 程式語言的初學者經常面臨的問題是:不知該如何開始撰寫程式 碼。如何幫助他們克服面對程式碼的恐懼,進而協助他們學好 C 程式語言,是 一件非常重要而有趣的議題,因此本研究使用 Java Swing 技術,同時結合開放 原始碼軟體 GCC 和 Bomberman 遊戲,欲以寓教於樂的概念來建構一個遊戲情境 式 C 程式語言編輯器,希求能提供 C 程式語言的啟蒙學習者學習 C 程式語言時 更多的選擇。

關鍵詞:遊戲情境式學習、C 程式語言編輯器、寓教於樂

(3)

Abstract

Many researches have shown that learners will learn more effectively if we can give them more funs to increase their motivation in learning. In modern societies, computer games have become an essential element of the current life. Using game-based concept in teaching not only can help students in learning but also can enhance their motivation and interest to achieve the goal of edutainment.

C Programming Language has become the first programming language for the Information Systems Students to learn. Many surveys showed that many novices of C Programming language had found that the difficulty in the beginning was how to write codes. Therefore, it is very important to help them to overcome the fear of coding first and then teach them to write better codes next. Based on this, the aim of our research is to use edutainment concept to build a game-based C Programming Language editor by combining the Java Swing, GCC and Bomberman game. We hope that we may give a better choice to those who are going to learn C Programming Language in the very beginning.

Keywords:Game-based Learning、C Programming Language Editor、Edutainment

(4)

致謝

在兩年半的研究生涯當中,每天要不斷在學業、工作和家庭當中切換自己的 角色,生活過得很充實卻也有些辛苦。感謝王偉德老師不辭辛勞在課業上以及研 究上的指導,以及羅家駿老師和張勤振老師、張文智老師等在口試審查時提供了 許許多多寶貴的意見。還有這些日子以來幫助過我的許多同學和學弟妹,以及體 諒我的家人和同事,謝謝各位。

珍重,再見。

蔡文和謹致 中華大學資訊管理學系碩士班 中華民國九十六年一月

(5)

目錄

摘要………..…………I

Abstract..………II

致謝………III

圖目錄………..……VII

表目錄………...IX

第一章 緒論 ...1

1.1 研究背景與動機...1

1.1.1 背景...1

1.1.2 動機...2

1.2 研究目的...3

第二章 文獻探討 ...4

2.1 系統背景知識介紹...4

2.1.1 Edutainment 的定義 ...4

2.1.2 C 程式語言 ...4

2.1.3 GCC 編譯器 ...5

2.1.4 Bomberman 遊戲...6

2.1.5 設計模式...6

2.2 C 程式語言傳統教法的缺失 ...8

2.3 應用遊戲情境概念於教學研究上...9

2.3.1 虛擬實境技術的應用...10

2.3.2 拼字遊戲和數字遊戲的應用... 11

2.3.3 2D 棋盤類型遊戲的應用...12

2.3.4 迷宮類型遊戲的應用...14

2.3.5 問題解決類型遊戲的應用...14

第三章 理論架構 ...16

(6)

3.1 系統架構...16

3.2 系統實作...19

3.3 運作流程...25

3.3.1 程式檔案結構視窗...26

3.3.2 選單與工具列...26

3.3.3 程式流程編輯視窗...29

3.3.4 程式碼檢視視窗...34

第四章 功能展示 ...36

4.1 練習一:else if 程式語法練習 ...36

4.2 練習二:二維陣列程式語法練習...38

4.3 練習三:switch 程式語法練習 ...40

第五章 結論 ...43

5.1 結論...43

5.2 研究限制...43

5.3 未來展望...43

5.3.1 加入進階除錯功能...43

5.3.2 提升系統執行效率...44

5.3.3 便利使用 C 程式語言標準函數庫 ...44

5.3.4 強化聲光娛樂效果...44

5.3.5 開放系統的可能性...44

(7)

圖目錄

圖一、Lim[ 23 ]用於分子生物學教學上的遊戲手套使用場景圖 ...10

圖二、Lim[ 23 ]用於分子生物學教學上的方向盤控制器使用場景圖 .. 11

圖三、Rajaravivarma[ 2 ]課程中的數字遊戲示例圖 ...12

圖四、Goschnick 和 Balbo[ 24 ]的貪吃蛇(Snakes)遊戲示例圖...13

圖五、Goschnick 和 Balbo[ 24 ]的魯多(Ludo)遊戲示例圖...13

圖六、Goschnick 和 Balbo[ 24 ]的西洋棋(Checker)遊戲示例圖...14

圖七、Lassse 和 Steinar[ 27 ]介紹的 AoC 使用者介面場景圖 ...15

圖八、系統架構圖...17

圖九、系統所使用的 Mediator Design Pattern 示意圖 ...20

圖十、系統所使用的 Template Method Design Pattern 示意圖...21

圖十一、系統所使用的 Command Design Pattern 示意圖 ...21

圖十二、系統所使用的 Composite Design Pattern 示意圖...22

圖十三、Li Yang[ 30 ]的 Proxy 作法運作示意圖 ...23

圖十四、Li Yang[ 30 ]的 Proxy 動態載入 Java Class 的示意圖 ...24

圖十五、程式編輯練習,系統運作流程圖...24

圖十六、系統所使用的 Strategy Design Pattern 示意圖...25

圖十七、系統初始畫面圖...26

圖十八、switch 範例的執行畫面圖 ...28

圖十九、練習開始,前置元件演示結果圖...28

圖二十、訊息提示說明資訊視窗示例圖...30

圖二十一、蹦現式(pop-up)編輯元件選項視窗示例圖...30

圖二十二、程式編輯時,程式碼自動輸入功能示例圖...31

圖二十三、程式編輯時,程式碼立即檢視功能示例圖...32

圖二十四、Control 的 else if 集群圖示圖...32

圖二十五、Control 的 while 集群圖示圖 ...32

(8)

圖二十六、Control 的 do while 集群圖示圖 ...33

圖二十七、Control 的 for 集群圖示圖...33

圖二十八、Control 的 switch 集群圖示圖...33

圖二十九、else if 集群圖示的展示動畫圖...34

圖三十、while 集群圖示的展示動畫圖...34

圖三十一、程式碼檢視視窗示例圖...35

圖三十二、else if 語法練習的說明與建議對話框圖...37

圖三十三、else if 語法練習的練習畫面圖...37

圖三十四、else if 語法練習的遊戲執行畫面和除錯視窗顯示圖...38

圖三十五、二維陣列語法練習的說明與建議對話框圖...39

圖三十六、修改二維陣列語法練習畫面圖...40

圖三十七、switch 語法練習的說明與建議對話框圖 ...41

圖三十八、switch 語法練習的練習畫面圖 ...41

圖三十九、switch 語法練習的遊戲執行畫面圖 ...42

(9)

表目錄

表一、GoF 23 個設計樣式的分類整理 ...7

表二、系統用到的八個設計樣式的意義整理...8

表三、系統四個主要模組的功能整理...18

表四、系統四個延伸模組的功能整理...19

表五、系統中 C 程式圖像元件整理...30

(10)

1. 第一章 緒論

1.1 研究背景與動機

1.1.1 背景

對一個程式語言的初學者而言,第一個學習的程式語言,在教學過程中,真 正的重點並不是在於這個程式語言要學習些什麼,而是到底要以何種合適的方式 來教導這個程式語言[ 1 ]。對所有的程式語言來說,在學習上其語法和語言結構 其實只佔有很小的一部分而已,而教導程式語言的課程,為了要設法幫助學習者 擁有堅實的程式語言發展技巧與能力,通常在教學過程中會特別強調問題解決的 技巧、邏輯思考能力的培養和程式設計的過程[ 2 ]。一般而言,程式設計的目標 就是為了要驅使電腦進行一系列的電腦操作,而程式設計者所進行的問題解決和 邏輯思考過程,則牽涉到一系列為達成這些目標所展現出來的心智活動[ 3 ]。然 而,許多學生因為在目前基礎教育上的缺失,特別是在問題解決和邏輯思考能力 等方面訓練上的不足,導致他們在其後的學習過程中,學習的效果有愈來愈差的 情況,因此,對許多程式語言的教導者而言,他們所面對的挑戰是:要用何種方 式來幫助這些缺乏足夠學習興趣與動機的學生來學好程式語言?

在現代社會中,電腦遊戲已經變成流行文化中不可或缺的部份。而「遊戲情 境式學習方式」,在現今的電腦科學教育課程中,已經成為最新的流行用語。國 外研究[ 4 ]則指出,現代的學生已經擁有各種各式各樣不同的學習方式。通常,

學生們對互動式學習能夠產生較良好的學習反應。而且,如果他們無法在學習過 程中感覺到快樂和滿足,那麼,教導者將會無法幫助他們產生良好的學習效果。

然而,對現代的學生而言,大部份他們必須學習的內容,只會讓他們興趣缺缺、

無法產生足夠的學習動機。學生們經常在課堂上,對學習內容枯燥無味、過於技

(11)

術性和難以理解,會以不同方式來表達他們的不滿[ 5 ],最終,這樣的結果只會 導致他們在學習過程中的挫折與失敗。

一套好的遊戲能夠輔助學習者在諸如實作中學習、從錯誤中學習、目標導向 式學習、探索式學習、以任務為基礎式學習、問題導向式學習等各種學習方式中,

強化學習效果[ 6 ]。雖然,遊戲情境式學習方式在學術研究上已經取得不錯的進 展[ 7 ],不過以教學為目的的電腦遊戲還是不常見。雖然,教育界已經開始採用 了從遊戲中學習的教學方式[ 8 ],然而,這樣的方式在目前的基礎教學活動中,

依然尚未普及。

1.1.2 動機

C 程式語言已經成為許多資訊相關科系的學生,第一個需要接觸到的程式 語言。原因不僅在於它是許多後繼程式語言發展的基礎,而學習它有助於再學習 其他的程式語言,同時也在於它是個比較容易入門的程式語言,學習它有助於幫 助學生建立設計程式的觀念與能力,而且發展至今,依然非常實用而應用範圍也 非常廣泛。

工欲善其事,必先利其器,在初學C 程式語言的過程當中,選擇一個好用 的編輯器也是一件非常重要的事情,現今常見的程式語言編輯器,大多數設計的 目的是為了支援大型軟體專案的開發,這些程式語言編輯器通常也包括許多程式 語言啟蒙學習者也用不到的功能,雖然功能很強大,但卻是難以上手[ 9 ][ 10 ]。

如果能有一個針對C程式語言啟蒙學習者的程式編輯器,相信對他們的學習必定 能有所助益。

根據國外針對學習C程式語言學生的調查,在他們的學習過程當中所碰到的 最大問題,除了眾所皆知的程式除錯問題之外,就是在開始寫程式時,不知該如 何開始撰寫程式碼[ 11 ],因此,如果能提供一個方便的編輯器,能讓他們以比較 方便、直覺且容易上手的方式,可以避免他們對程式碼的恐懼感和排斥感,應能 提升他們的學習興趣與成效。

(12)

互動式學習已經被證明相較於傳統式學習,有較佳的學習效果,而將電腦遊 戲融入學習課程之中,也普遍受到學生們的歡迎,其原因不僅在於它能夠提供更 多學習上的樂趣,也在於它能夠強化學習的動機。本研究,嘗試以寓教於樂的方 式於 C 程式語言的啟蒙學習上,希望能以一個遊戲情境式編輯器作為學習工 具,提供初學者有更多的選擇。

1.2 研究目的

傳統上,C 程式語言的啟蒙教學是授課老師在課堂上以講解語法、觀念與 程式範例等,讓學生被動地參與學習,本研究希望能以更具互動性的作法,結合 電腦遊戲,以寓教於樂的方式,設計出一套系統,使學生們在學習過程中,能夠 感受到更多的樂趣,同時,也讓學生們願意更主動地參與學習過程、提高學習的 興趣與成效。

(13)

2. 第二章 文獻探討

2.1 系統背景知識介紹

2.1.1 Edutainment 的定義

本研究希望能以寓教於樂(Edutainment)的方式設計出一套系統來幫助 C 程 式語言的初學者學習,我們首先來為寓教於樂(Edutainment)下一個定義:寓教於 樂(Edutainment)是來自於兩個單字,教育 (Education) 與娛樂 (Entertainment)。

它意味著要把教育與娛樂結合起來,使用諸如數位遊戲等方式來提升教學的效 果、達到教育的目的。

2.1.2 C 程式語言

幫助C程式語言的初學者學習,是本研究的主要目的,在此將對C程式語言 進行簡要的介紹。C程式語言是由 Ken Thompson 在西元 1972 年,任職於Bell Labs 時 與Dennis Ritchie 一同進行Unix 作業系統的設計時所發明,C程式語言 最初是從 B 程式語言所發展而來,通常被歸類為高階的程式語言,C程式語言 在西元 1989 年經過了ANSI(American National Standards Institute)制定了標準規範 (ANSI C),在西元 1990 年由ISO(International Organization for Standard)制定了ISO C,進而結合先前的ANSI C產生C90 的版本,目前最新的版本是在西元 1994 年 所制定的標準規範:C99[ 12 ]。從西元 1972 年至今,在經過了三十多年的發展 之後,C程式語言依然是目前最重要和最受歡迎的程式語言其中之一。

C程式語言本身具有以下特色[ 12 ]:

(1) 強大的控制結構:在邏輯處理上,具有很高的應用彈性。

(2) 快速:執行速度快,效能高。

(14)

(3) 精簡的程式碼-程式小:可以用很少的程式碼來完成一支程式,且可善 用許多現成的函數庫。

(4) 可移植到其它電腦上使用:只要修改主程式和伴隨的標頭檔(header file),再加上有適合該作業環境的 C 編譯程式,即可在不同作業系統的 電腦中使用。

而在實務上,通常開發與設計一支C程式語言的程式[ 1 ][ 12 ],會經過以下 七個步驟:

(1) 探索與了解欲解決的問題。

(2) 針對欲開發的程式進行系統設計的作業。

(3) 開始進行程式的開發作業。

(4) 把已完成的程式進行編譯與連結的作業。

(5) 對程式進行完整的運行。

(6) 針對邏輯上會出現的錯誤進行測試與除錯。

(7) 驗證已完成的程式是否能處理好要解決的問題。

2.1.3 GCC 編譯器

GCC[ 13 ],全名為(the GNU Compiler Collection,GNU編譯器套裝),是本 研究中的系統用來作為C程式語言語法檢查和程式編譯時所結合的工具,GCC它 的產生是源自於GNU計畫的需要,在西元 1985 年時,由GNU計畫的創始者 Richard Matthew Stallman[ 14 ]在發展GNU系統時所產生,後來歷經了許多分歧版 本的更新與演變,目前最新的版本是 4.1.1 版,發展至今,GCC已成為轉換到各 種不同作業系統最多的編譯器,不僅是GNU系統的官方編譯器(包括GNU/Linux 家族),它也成為編譯與建立其他作業系統時的主要編譯器,包括BSD家族、Mac OS X、NeXTSTEP與BeOS等,同時,GCC不僅能夠處理C程式語言,更可處理 C++、Fortran、Pascal、Objective-C、Java以及Ada等其他程式語言[ 15 ]。

(15)

2.1.4 Bomberman 遊戲

Bomberman(炸彈超人)是本研究中的系統為了增加C程式語言初學者學習的 樂趣所結合的一套遊戲,而Bomberman(炸彈超人)是一套屬於策略類型,以走迷 宮的方式來進行的電腦遊戲,它的原創作者是:Hudson軟體公司[ 16 ],最初的 第一個版本是在西元 1983 年時就被發展出來,而直至現在,炸彈超人遊戲依然 持續地不斷被進行更新與發行新版本的動作。最新的版本已經發展到第五代,是 一套命名為:炸彈超人王國的遊戲[ 17 ]。

2.1.5 設計模式

Design Patterns (設計樣式)是本研究中的系統在系統設計階段所大量採用的 設計概念與方式,而所謂的Design Patterns (設計樣式)本身是樣式分類中的一 種,廣義而言是指在系統設計階段可以加以運用的樣式,而樣式的概念是在 1970 年代,由建築設計師Christopher Alexander,在其一系列說明工程與建築界之樣式 應用的相關叢書中首先提出,在他所撰寫一本的書,名為「A Pattern Language」,

對樣式定義為:「每個樣式都是由三個部份所組成的規則,這三個部份就是確定 的背景(Context)、問題(Problem)及解決方案(Solution),而且此三者之間存在著 某些關連」。[ 18 ]簡言而之,樣式就是在某種背景環境(Context)的條件之下,對 特定所發生的問題(Problem)的慣用解決方案(Solution)。 隨後軟體界開始逐漸 採用他的樣式概念,並且發展出諸如設計樣式、架構樣式、分析樣式、創造樣式、

結構樣式、行為樣式等不同種樣式類別,其中並以設計樣式最廣為人知,而後來 在西元 1995 年,由軟體工程界的四位大師:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides(簡稱為四人幫Gang of Four,GoF)所撰寫的一本書,名 為「Design Patterns: Elements of Reusable Object-Oriented Software」[ 19 ],第一 次將軟體工程界常用的 23 個設計樣式整理成書,該書所列舉的 23 個設計樣式,

如今已經成為在軟體開發與設計時的共用概念,而這 23 個設計樣式主要分成三

(16)

類,整理如表一所示。

而 在 本 研 究 中 , 計 有 應 用 到 Flyweight 、 Mediator 、 Template Method 、 Command、Composite、Factory Method、Strategy、Proxy等八個設計樣式,針對 這些樣式的意義,整理如下表二:

表一、GoF 23 個設計樣式的分類整理

樣式類型 樣式名稱 主要用途

Creational Factory Method、Abstract Factory、Builder、

Prototype、Singleton

協助處理軟體系統中物件或元

件的建立

Structural Adapter、Bridge、Composite、Decorator、

Façade、Proxy

協助處理軟體系統中不同物件

或元件彼此之間的組合或結合

關係

Behavioral Interpreter、Template Method、Chain of

Responsibility、Command、Iterator、

Mediator、Memento、Flyweight、Observer 、

State、Strategy、Visitor

協助處理軟體系統運作時各流

程中的物件或元件之狀態和行

(17)

表二、系統用到的八個設計樣式的意義整理

樣式名稱 樣式意義

Flyweight 協助形成一種共享機制,以重覆使用物件資源,並減少資源的浪費

Mediator 協助形成一個能將一群物件彼此之間互動關係封裝起來的物件,經由此

來讓這一群物件彼此之間不直接相互產生關聯,不僅能達到鬆散耦合的

效果,同時也能較輕易地更動彼此之間的合作關係

Template Method 在一群物件的繼承體系之中,針對某一系統功能,只在父類別中定義此

一功能使用的介面規格,和內部運作的演算法,而將實作的細節交由子

類別來完成

Command 將系統的一些操作程序和運作流程封裝成物件,以便能運用於暫存、復

原、執行等各種用途上

Composite 將一群有繼承關係的物件,形成樹狀的包含階層關係,例如在電腦系統

中的檔案與目錄關係,目錄裏面不僅能包含檔案,也能包含目錄

Factory Method 在父類別中定義物件生成的介面規格,而在子類別中才來決定具體物件

的生成內容與種類

Strategy 為了使系統某一功能的演算法能夠輕易抽換成不同實作方式,所以定義

演算法的介面規格,同時形成實現此一介面規格但以不同方式實作的一

系列物件

Proxy 指引如何以類似工作職務代理人的方式,在系統的主要運作物件之外,

生成另一物件,以協助分擔主要運作物件的工作量,同時也能提升系統

運作的效能

2.2 C 程式語言傳統教法的缺失

根據實務上 C 程式語言的開發步驟,一般 C 程式語言的教學步驟如下:

(18)

(1) 教導學習者解決問題的重要技巧與理論。

(2) 開始強調邏輯思考在解決問題上的重要性。

(3) 教導學習者 C 程式語言的語法和語言的結構。

(4) 開始強調如何將邏輯思考的結果寫成 C 程式語言的程式。

(5) 介紹編譯、連結和載入程式的過程。

(6) 教導學習者如何運用諸如 Microsoft Visual Studio 等整合式程式語言開發 環境來編譯和執行程式。

(7) 介紹一些開發程式時的基本除錯方法。

以上的教學步驟雖然具有條理性且程序分明,不過,這些傳統的教導步驟並 無法促使學習者保持較長較久的學習熱誠,通常可能連一小時也辦不到,當然更 別說可以帶給他們成功的喜悅,或者能夠幫忙他們克服失敗的挫折[ 5 ]。追究其 原因,主要是因為這些傳統的教導步驟,會讓學習者在學習過程中只有毫無樂趣 的感受。Draper[ 20 ]建議可以給學習者更多學習上的自由,同時,適切的結合從 寓教於樂中所產生的樂趣。Carroll[ 21 ]則總結說:樂趣是一種經由刺激學習者新 的或者不常有的感受,可能是過去沒有被喚醒的,或者在一般的情境下通常不會 被喚醒的,從而能夠吸引學習者的目光、抓住學習者的心思,並且保持住學習者 的注意力所產生。為了能夠提供一個可以有效吸引學習者心思意念的學習環境,

並且保持住他們的注意力,設法給予更多在學習過程中所產生的樂趣,至少是一 個值得嘗試的方向。而對C程式語言的啟蒙教學而言,寓教於樂的教學方式應該 也會是一個不錯的方向。

2.3 應用遊戲情境概念於教學研究上

在本節中,將簡介一些運用遊戲情境概念於教學研究上的案例,並嘗試加以 探討其優缺點:

(19)

2.3.1 虛擬實境技術的應用

在過去,已經有很多教學的研究,運用了虛擬實境技術在教學過程之中。例 如在物理學的教學上,Tomaz[ 22 ]運用了Macromedia Shockwave w3d VR系統製 作了Lake Pollution遊戲與Radiation遊戲,而在生物學的教學上,他也運用了 VRML技術,製作一個虛擬實境模型,最後他發現這樣的教學方式比傳統以書面 教科書為主的教學方式更具互動性,也更受學生的歡迎。

而像Lim[ 23 ]則在分子生物學的教學上,運用了虛擬實境技術。他們發展了 一套名叫MolecularStudio的系統,可用來學習諸如蛋白質的分子結構等知識,同 時,此套系統也結合了遊戲手套及方向盤控制器,如圖一及圖二所示。人機介面 讓整個學習過程中虛擬實境的感受更為真實,他們針對七個志願者所作的教學實 驗也證明了以遊戲玩樂式學習,確實可以幫助學習者願意花費更多的時間來學 習,也更加投入於整個學習的過程之中。

使用虛擬實境技術最大的困難點還是在於教材製作的不易,同時,也常需要 更多輔助教具的配合,且同一時間能夠參與學習的人數也較少,在應用上也較偏 向於生物學、物理學等領域上。

圖一、Lim[ 23 ]用於分子生物學教學上的遊戲手套使用場景圖

(20)

圖二、Lim[ 23 ]用於分子生物學教學上的方向盤控制器使用場景圖

2.3.2 拼字遊戲和數字遊戲的應用

Rajaravivarma[ 2 ]針對程式語言的啟蒙教學課程規劃了一套以遊戲情境為基 礎的學習步驟。Rajaravivarma認為遊戲情境式學習的步驟能夠以各種不同的測驗 與挑戰來增進學習者的問題解決能力,且能夠讓學習者更加投入於學習過程之 中。遊戲情境式學習的步驟同時也能夠讓學習者更重視程式的分析設計過程與撰 寫過程。

Rajaravivarma在他的課程內容之中運用了兩種很常見的遊戲類型:拼字遊戲 和數字遊戲,如圖三所示。這些課程內容,剛開始是先運用簡單的遊戲來對基礎 的程式設計技巧進行教學,而隨著課程內容的進行,再將更進階的程式設計技巧 融入課程之中。不過,以上這些課程內容,都要求學習者至少必須具備基礎的程 式設計技巧,且所運用到的遊戲都是以文字內容為主要的呈現方式的,並不具有 互動性,也沒有任何的聲光效果。

(21)

圖三、Rajaravivarma[ 2 ]課程中的數字遊戲示例圖

2.3.3 2D 棋盤類型遊戲的應用

Goschnick 和 Balbo[ 24 ]以製作 2D棋盤類型遊戲的方法來規劃課程內容,

例如貪吃蛇(Snakes)、爬梯者(Ladders),如圖四所示、魯多(Ludo),如圖五所 示) 和西洋棋(Checker),如圖六所示,來幫助資訊科系的學生們增加他們學習 的動機和興趣。然而,這些學生們首先必須設法熟習該如何運用SG_Board[ 25 ]的 函式庫,接著他們才能夠進行課程上的練習。SG_Board的函式庫是一組以Java 程式語言開發而成的棋盤類型遊戲函式庫,對這些在電腦程式語言的設計上沒有 足夠使用經驗的學生們而言,他們所進行的這樣的學習步驟,與其說是在進行程 式語言的啟蒙教學課程,不如說更像是在進行一門以教導遊戲程式設計為目標的 教學課程,如果學習者不具能充分運用SG_Board函式庫的能力的話,則在整個 學習的過程當中,將會無可避免地遇到許多困難。

(22)

圖四、Goschnick 和 Balbo[ 24 ]的貪吃蛇(Snakes)遊戲示例圖

圖五、Goschnick 和 Balbo[ 24 ]的魯多(Ludo)遊戲示例圖

(23)

圖六、Goschnick 和 Balbo[ 24 ]的西洋棋(Checker)遊戲示例圖

2.3.4 迷宮類型遊戲的應用

Nevison 和 Wells[ 26 ]發表了一個研究案例,此研究案例是使用一套複雜的 軟體程式框架來進行一個以迷宮遊戲為基礎的教學,此套課程的目的是要教導學 生來啟蒙電腦科學的基本知識,像是程式基本控制結構、軟體設計概念、演算法 等。他們的研究發現運用這些各種不同類型的迷宮地圖設計方式,能有助益於學 生們對設計模式(Design Patterns)的認識。雖然,他們聲稱在他們之中已經有人運 用了這樣的概念在一個以啟蒙Java程式設計為教學目的的課程之中,同時也已經 獲得很大的成功,不過,由於這樣的學習方式,主要是運用一套複雜的程式框架,

來進行課程上的學習與練習,而要如何學會運用這一套複雜的軟體程式框架,對 這些學生們而言,恐怕會是第一個碰到的難關。

2.3.5 問題解決類型遊戲的應用

Lassse和Steinar[ 27 ]在他們的研究中介紹了以幫助學習者探索個人電腦演 進歷史的系統:Age of Computers(AoC),如圖七所示,AoC是一套以網站形式存

(24)

在的遊戲系統,它的遊戲方式是讓學習者在探索個人電腦歷史時,同時要解答一 些問題,問題的類型有諸如多重選擇題、數字題、邏輯訊號控制題等,Lassse和 Steinar的研究結果也發現學習者對這樣的學習方式反應良好,而且更願意投注更 多時間來學習。然而,此系統的遊戲方式過於單調,主要是以交談式介面為主,

娛樂性與互動式不足,也缺乏足夠吸引學習者的特色。

圖七、Lassse和Steinar[ 27 ]介紹的AoC使用者介面場景圖

從上述運用遊戲情境概念於教學研究上的案例中,本研究有以下發現:

(1) 如果能夠給予學習者更容易使用的學習工具或學習材料,應該能夠協助減少 學習者所碰到的學習困難,而像是太複雜的軟體程式框架或函式庫,其實並 不適合初學者使用。

(2) 在學習過程當中,必須將學習的標的與學習的方法,進行有效的結合,應避 免掉例如要教導程式語言,卻反而變成教導遊戲設計的情況發生。

(3) 如果能夠提供更多在學習上的樂趣,能夠提供在學習過程中更多的聲光娛樂 效果,吸引住學習者的注意力,或者給予在學習過程當中更多的挑戰與刺激,

應該也能夠促使學習者更願意投注時間於學習。

(25)

3. 第三章 理論架構

在我們所設計的系統中,主要的概念是希望協助 C 程式語言的啟蒙學習 者,能有效提升學習的興趣和成果,我們採用了在遊戲情境中以圖像來呈現 C 程 式元素,同時,結合了開放原始碼軟體 GCC ,使本系統也同時具有 C 程式語 言語法檢查器與程式編譯器的功能,而且,為了幫助 C 程式語言的啟蒙學習者 能夠儘快上手使用本系統,也為了提高學習的成就感與挑戰性,本系統也提供了 操作範例與實作練習,同時,本系統也結合了 Bomberman 遊戲,來讓學習者能 以遊戲的方式來呈現 C 程式語言編輯之後的成果。

以下將詳細介紹我們所設計的系統模組架構、系統實作方式與運作流程。

3.1 系統架構

本系統是依據 Model-View-Controller (MVC) 架構來設計,MVC 架構強調將 系統分割成模型層、顯示層、控制層等三個邏輯層次來設計,以使系統各模組的 功能角色更為明確,同時也可以達到系統元件鬆散耦合的目的,同時,本研究為 了更方便管理系統的環境與資源,所以另外設計了管理層。系統的四個主要模組 說明如下:

(1) Management Module:負責管理系統的環境與資源。

(2) Flow Control Module:負責控制層(Controller)的工作。

(3) UI Display Module:負責顯示層(View)的工作。

(4) Component Factory Module:負責模型層(Model)的工作。

除四個主要模組之外,為了提供更多的功能,所以另外以外掛的形式設計了 四個延伸模組,分別是:

(1) Example Extended Module:負責提供操作範例的功能。

(2) Exercise Extended Module:負責提供練習範例的功能

(26)

(3) GCC Extended Module:負責整合 GCC,並提供語法檢查與程式編譯功 能。

(4) Game Extended Module:負責整合 Bomberman 遊戲,並提供遊戲的功能。

整個系統的架構圖如圖八所示,其中四個主要模組的詳細說明,整理如表三 所示,而四個延伸模組的詳細說明,整理如表四所示。

圖八、系統架構圖

(27)

表三、系統四個主要模組的功能整理

模組名稱 模組說明

Management Module 負責整個系統在運作時的資源管理、錯誤控制與處理、

狀態管理,各物件的生命周期管理,並且維繫各相關物

件與模組的關連與合作關係,同時,也負責生成整個系

統的運作環境。

Flow Control Module 負責整個系統在功能運作與畫面操作時,所進行的所有

指令與命令的控制與聯絡工作,在接受前端畫面呈現模

組所要求的工作時,會及時委派後端元件工廠模組進行

元件的生產與配送。

UI Display Module 負責整個系統相關操作功能與執行畫面的呈現工作,包

括選單功能列、對話視窗、編輯功能視窗、程式碼視窗、

程式與檔案樹狀結構視窗、蹦現式編輯元件選項視窗、

右鍵功能選項視窗等。

Component Factory Module 負責整個系統在操作與編輯時相關元件的生成,生成的

元件可能是容器元件,也可能是一般元件,同時也在此

模組中賦予各元件彼此之間的階層關係與識別體系。而

相對映於 C 程式語言程式元素或分類的 Assignment、

Declaration、Control、Null、Include、Define、Undefined、

Add Function、Call Function 等也有相關的系統代表元

件。

(28)

表四、系統四個延伸模組的功能整理

模組名稱 模組說明

Example Extended Module 延伸系統本體的功能,儲存各程式相關範例的說明資訊 腳本,以精靈的方式,一步一步解說各範例的編輯步驟

與流程,最後再透過流程控制模組聯結到 Game 延伸模

組,以遊戲的方式,執行範例的結果。

Exercise Extended Module 延伸系統本體的功能,儲存各程式相關練習的說明資訊

腳本,在運作此模組時,系統會進入 Exercise 模式,系

統會先自動演示練習前所需準備之前置元件的生成,使

用者也可參考說明資訊的提示,來進行程式編輯的練

習,最後,再透過及時編譯元件,及時檢查與編譯練習

之後的結果,若正確無誤的話,會執行練習的遊戲結果。

GCC Extended Module 負責與外部的 GCC 程式庫進行聯結,以 Runtime 的方

式,在系統的編輯器運作時,動態檢查程式的語法與結

構,並提供錯誤資訊的及時回饋。

Game Extended Module 負責提供給系統 Bomberman 遊戲的操作與執行功能,

同時管理遊戲的地圖資訊、遊戲的物件與圖片的對映關

係、遊戲 AI 人工智慧的切換等。

3.2 系統實作

本系統主要是以Java Swing 技術實作而成,Java Swing技術是Java官方版本 的視窗開發技術,具有Java跨平台的特點,且技術本身是參考MVC架構實作而 成。除此之外,本系統結合了一些開放原始碼的程式專案,例如在UI Display Module裡面使用了FloatingBarPane 0.1 版本[ 28 ],讓蹦現式(pop-up)編輯元件

(29)

選項視窗能夠呈現類似Microsoft Outlook的Outlook Bar功能。而為了呈現更美觀 的畫面,在畫面風格上採用了Substance 專案[ 29 ]的Java look & feel程式庫。

另外,在GCC Extended Module裡面的GCC程式元件則是採用了 3.23 的版本。

接下來將分別簡介本系統各模組的實作方式:

(1) Management Module:此模組主要負責管理各物件的關係,和維持整個系統運 作時的環境,為了有效重覆利用已產生的物件,所以採用了GoF[ 19 ]的 Flyweight Design Pattern的概念,集中保存所有生成的物件。同時,也採用了 GoF的Mediator Design Pattern的概念,如圖九所示,來方便管理和處理各物件 之間的溝通與聯繫。

圖九、系統所使用的 Mediator Design Pattern 示意圖

(2) Flow Control Module:此模組主要負責系統中各指令的控制與聯絡工作,在 實作時採用了GoF的Template Method 和Command等 Design Pattern的概念,

如圖十和圖十一所示。我們先制定所有指令的共通父介面規格,再由子類別 進行實作,這些進行實作的子類別同時也成為各命令執行時的命令工廠,負 責系統實際指令的執行。

(30)

圖十、系統所使用的 Template Method Design Pattern 示意圖

圖十一、系統所使用的 Command Design Pattern 示意圖

(3) UI Display Module:此模組主要負責呈現系統的操作與編輯畫面,在實作上 主要是採用 Java Swing 本身的技術規格,同時為了管理與組織眾多的 UI 畫 面和彼此之間的溝通關係,所以也使用 GoF 的 Template Method 和 Mediator 等 Design Pattern 的概念來進行實作。

(31)

(4) Component Factory Module:此模組主要負責系統在操作與編輯時對映於C程 式語言之各元件的產生,在實作上為了呈現物件與容器之間的包含關係,所 以採用了GoF的Composite Design Pattern的概念,如圖十二所示。

圖十二、系統所使用的 Composite Design Pattern 示意圖

(5) Example Extended Module:在此模組中,用簡單的 Factory Method 來儲存相 關範例的說明資訊腳本,使說明資訊可以不斷地擴增,同時,以在許多系統 中都可以看到的輔助精靈的方式,一步一步指引使用者來學習範例。

(6) Exercise Extended Module:在此模組中,首先,為了先將練習前所需具備的 程式元件準備齊全,也為了能自動展示系統功能給使用者進行了解,在此模 組中採用了Java Robot技術,此技術正如Robot的中文意思是「機器人」一般,

是一項可以用程式的方式來模擬使用者操作系統流程的技術,本模組應用此 技術來自動執行並演示相關練習程式元件的建置工作。再來,必須實作一個 從C程式語言的程式碼轉換成Java程式語言的程式碼的元件,同時,因為使用 者會不斷修改練習的結果,且由於Java程式的實體在執行時是由JVM(Java虛 擬機器)來統一進行管理的,因此必須設法讓轉換過來的Java程式碼能夠動態 地被編譯與執行,本研究參考了Li Yang[ 30 ]的作法,他使用了GoF的Proxy

(32)

Design Pattern的概念,此樣式概念的一般作法就是在操作功能的需求者 (Client)與實際功能的執行者(DynamicClass)間,存在著一個代替實際功能的 執行者的代理者(Proxy),此代理者可能是充當一個接受服務的介面,可能是 用來代理執行較輕量級的工作,可能是一個緩衝的角色以提升整個系統運作 的效率,以在此的應用來說,此代理者(Proxy)會在每次經手操作功能的需求 者(Client)的需求時,偵測實際功能的執行者(DynamicClass)的狀態是否已改 變,若改變的話就會重新動態載入並運作執行最新的實際功能的執行者 (DynamicClass)以回應需求。在實際功能的執行者(DynamicClass)的狀態未 改變時,整個Proxy運作的示意圖說明如圖十三所示。在實際功能的執行者 (DynamicClass)的狀態已改變時,整個Proxy運作的示意圖說明如圖十四所 示,而整個運作的流程如圖十五所示,並說明如下:

(a) 編輯程式階段:首先,使用者開始進行練習,在使用者完成練習的 C 語 言程式之後,會交由 GCC 元件進行程式的 C 語法檢查,若檢查無誤的 話,會執行將練習的 C 語言程式轉換成 Java 語言程式並塞入到 Java 語 言程式範本檔,接著會對這組合而成的 Java 語言程式進行編譯的動作,

並形成最新的 Java 類別檔。

(b) 執行遊戲階段:在形成最新的 Java 類別檔後,便會以動態類別重新載入 的方式,將最新的 Java 類別檔載入到 JVM 中,接著執行最新練習所完 成的遊戲。

圖十三、Li Yang[ 30 ]的Proxy作法運作示意圖

(33)

圖十四、Li Yang[ 30 ]的Proxy動態載入Java Class的示意圖

圖十五、程式編輯練習,系統運作流程圖

(7) GCC Extended Module:在此模組中,必須與外部的 GCC 程式進行聯結,所 以本研究採用了 Java SE 5.0 所新增的 ProcessBuilder 函數庫, ProcessBuilder 函數庫可用來協助 Java 程式來執行外部的程式,藉由 ProcessBuilder 函數庫 的協助,不僅能呼叫 GCC 程式、傳遞 GCC 運行所需的參數,同時也能接收 GCC 執行過後所回應的訊息資訊,在取得訊息資訊之後,此模組會再將訊息 進行剖析,並及時回應編輯的結果。

(8) Game Extended Module:在此模組中,整合並改寫了Bomberman遊戲,用簡

(34)

單的Factory Method來儲存遊戲地圖資訊,不僅新增了更多的遊戲地圖,同時 也以GoF的Strategy Design Pattern的概念,如圖十六所示,設計了數種不同的 遊戲AI人工智慧,可動態切換,以便讓遊戲的進行更多樣化。

圖十六、系統所使用的 Strategy Design Pattern 示意圖

3.3 運作流程

以下將針對本系統的運作流程與重要功能,進行說明:

在進入本系統之後,畫面上主要分成三大部份,分別是左邊的程式檔案結構 視窗、上方的選單與工具列、右邊的程式流程編輯視窗與程式碼檢視視窗,整個 系統進入之後的初始畫面如圖十七所示。

(35)

圖十七、系統初始畫面圖

3.3.1 程式檔案結構視窗

程式檔案結構視窗,以樹狀結構來呈現各個不同的程式檔案,可以用來新增 程式、修改程式檔名、刪除程式、儲存程式,也可用來切換到不同程式檔案的編 輯畫面。

3.3.2 選單與工具列

選單與工具列在功能上,主要分為五個部份:File、Example、Exercise、Help、

Exercise 功能鍵等,說明如下:

(1) File 選單:可用來新增新程式、刪除程式、儲存程式,也有離開系統的功能。

(2) Help 選單:可用來觀看輔助說明與查閱系統的版本號碼。

(3) Example選單:提供範例程式,目前包含了三個範例,分別是:else if範例、

if else & else if範例、switch範例,執行畫面如圖十八所示,經由精靈的方式 來進行範例的說明,按下Next鍵可進行下一階段的說明,最後按下Run Game

(36)

鍵可執行範例運作的結果。

(4) Exercise 選單:提供練習程式,目前包含了三個練習,分別可用來練習 else if 的語法、二維陣列的語法、switch 的語法,當選擇進行某一個練習之後,首 先會出現一個說明與建議對話框,針對此練習的目的、注意事項和編輯建議 進行說明,同時在此對話框中也可以針對練習的前置元件準備作業是要以自 動演示的方式,還是以直接顯示的方式來完成進行選擇。接著系統會進入練 習模式,系統也會立即常駐顯示遊戲地圖的視窗,且此時 Exercise 功能鍵 群就會變成可選擇的狀態,Exercise 功能鍵群計有 Begin Exercise 鍵、

Suggestion 鍵、Run game 鍵、Show Game Map 鍵、Coding Free 鍵及 Close Exercise Mode 鍵等,各鍵之說明如下:

(a) Begin Exercise鍵:按下Begin Exercise鍵後,系統會依據在說明與建議對 話框中所選擇的練習前置元件的建置方式,來自動執行前置元件的建構 工作,如圖十九所示。

(b) Suggestion 鍵:可用來重新開啟說明與建議對話框。

(c) Run game 鍵:按下後就表示練習完畢,準備執行練習的成果,系統將會 進行語法與要求條件的檢查工作,若練習無誤將會使用遊戲的方式來呈 現練習的結果,同時會開啟除錯視窗,並且在練習時也具有可以調整遊 戲人物行走速度快或慢的功能。

(d) Show Game Map 鍵:可用來重新開啟遊戲地圖的常駐視窗。

(e) Coding Free 鍵:用來啟動可在程式碼檢視視窗中自行輸入程式碼的功能。

(f) Close Exercise Mode 鍵:可用來關閉練習模式,重新回到正常編輯模式 中。

(37)

圖十八、switch 範例的執行畫面圖

圖十九、練習開始,前置元件演示結果圖

(38)

3.3.3 程式流程編輯視窗

程式流程編輯視窗可用來編輯程式的流程,剛開始編輯時會出現Start、Link 與End圖像元件,只要把滑鼠移動到Link圖像元件處就會出現訊息提示說明資訊 視窗,如圖二十所示,若離開Link圖像元件則訊息提示說明資訊視窗就會自動關 閉,而在Link圖像元件處按下滑鼠右鍵則會出現右鍵功能選項視窗,可按下New 鍵,就會出現蹦現式(pop-up)編輯元件選項視窗,

在 蹦 現 式 (pop-up) 編 輯 元 件 選 項 視 窗 中 , 依 照 使 用 情 況 的 不 同 , 共 有 Assignment(指定類型)、Declaration(宣告類型)、Control(控制類型)、Others(新 增函式、呼叫函式、定義常數等)共四大類,每一類相對應於C程式元素的圖像 元件,如圖二十一所示,明細整理如表五所示。

而為了方便使用者輸入程式碼,也另外設計了程式碼輸入記憶功能,系統會 自動記憶使用者所輸入的程式碼,只要輸入部份已輸入的程式碼,系統就會顯示 其餘的程式碼,以方便使用者輸入,如圖二十二所示。

同時系統也具有程式碼立即檢視的功能,只要點選已編輯過的C程式的圖像 元件,就會顯現該元件的C程式碼,如圖二十三所示。在點選了add f(x)的圖像元 素之後,系統會另外開啟一個視窗,在此視窗中可再新增其他的C程式元件。

而在點選了所有Control的圖像元素後,系統會出現其相對應的集群圖示,例 如else if集群圖示,如圖二十四所示,while集群圖示,如圖二十五所示,do while 集群圖示,如圖二十六所示,for集群圖示,如圖二十七所示,switch集群圖示,

如圖二十八所示,各自代表的就是C程式語言控制語法的圖像呈現,可在各個圖 示按下滑鼠右鍵進行編輯,系統會再開啟各對應的新視窗來,

另外也可以在各Control類型的集群圖示的識別標題中,按下滑鼠右鍵,就會 出現各集群圖示的展示動畫,可使用這樣的展示動畫來幫助學習者了解C程式語 言控制語法的意義,如圖二十九是else if集群圖示的展示動畫,會展示的是遊戲 人物順著通道依序走到迷宮的出口,而如圖三十是while集群圖示的展示動畫,

(39)

會展示的是遊戲人物一直順著通道繞行迷宮行走。

圖二十、訊息提示說明資訊視窗示例圖

圖二十一、蹦現式(pop-up)編輯元件選項視窗示例圖

表五、系統中 C 程式圖像元件整理

(40)

C 程式元件類別 C 程式元件項目 C 程式元件說明

Assignment = ,+ =,- =,* =,/ =,% =,>>=,<<=,

& =,^ =,| =,= =

可用來指定 C 程式語言語法

中的運算子

Declaration int,short,long,long long,u int,u short,

u long,u long long,char,float,double,long

double,_Bool,_Complex,_Imaginary

可用來宣告 C 程式語言語法

中的資料形態

Control if,if else,else if,while,do while,for,switch 可用來產生 C 程式語言語法

中的控制類型

Others add f(x),call f (x),null,# define,# undef,

# include,Code

相對於 C 程式語言語法中的

新增函式、呼叫函式、宣告

Null、定義常數等

圖二十二、程式編輯時,程式碼自動輸入功能示例圖

(41)

圖二十三、程式編輯時,程式碼立即檢視功能示例圖

圖二十四、Control 的 else if 集群圖示圖

圖二十五、Control 的 while 集群圖示圖

(42)

圖二十六、Control 的 do while 集群圖示圖

圖二十七、Control 的 for 集群圖示圖

圖二十八、Control 的 switch 集群圖示圖

(43)

圖二十九、else if 集群圖示的展示動畫圖

圖三十、while 集群圖示的展示動畫圖

3.3.4 程式碼檢視視窗

程式碼檢視視窗的功能是用來方便學習者檢視編輯過後所自動產生的程式

(44)

碼,如圖三十一所示。

圖三十一、程式碼檢視視窗示例圖

(45)

4. 第四章 功能展示

在本章中,將以系統中的三個練習,來展示系統的功能。

4.1 練習一:else if 程式語法練習

此練習的目的是要讓學習者熟悉使用C程式語言中的else if語法,在選擇此練 習之後,系统首先會開啟說明與建議對話框,如圖三十二所示,在此對話框中會 針對此練習的練習條件、練習要求與練習提示進行說明,整理如下:

(1) 練習條件:在此練習中會預先準備好一個代表遊戲地圖的二維陣列,以及代 表地圖陣列兩個維度的常數,另外,有一些針對地圖地形的定義用常數,再 加上用來識別移動方向的字元,以及遊戲人物移動用的常數和驅動人物移動 的函式等,來提供給學習者在練習時參考和利用。

(2) 練習要求:必須在程式中新增一個函式「void moveit(int i, int j)」,加入可控 制遊戲人物行走 AI 的程式碼,協助他走出迷宮,且須以 else if 語法來完成。

(3) 練習提示:請善用地圖陣列索引值與地圖地形定義用常數的關係,以及設法 將移動方向用識別字元與遊戲人物移動用常數結合起來,另外,請記得呼叫 驅動人物移動的函式。

而此練習進行當中的參考畫面如圖三十三所示。練習完成後的遊戲執行畫面 和除錯視窗的顯示如圖三十四所示。

(46)

圖三十二、else if 語法練習的說明與建議對話框圖

圖三十三、else if 語法練習的練習畫面圖

(47)

圖三十四、else if 語法練習的遊戲執行畫面和除錯視窗顯示圖

4.2 練習二:二維陣列程式語法練習

此練習的目的是為了要讓學習者熟悉使用C程式語言中的二維陣列語法,在 選擇此練習之後,系统會首先開啟說明與建議對話框,如圖三十五所示,在此對 話框中會針對此練習的練習條件、練習要求與練習提示進行說明,整理如下:

(1) 練習條件:此練習的練習條件除了接續練習一的練習條件之外,額外提供了 一個控制人物移動 AI 的函式「void moveit(int i, int j)」。

(2) 練習要求:要求學習者練習修改遊戲地圖二維陣列的索引值,並觀察遊戲地 圖所產生的變化。

(3) 練習提示:請學習者參考遊戲地圖二維陣列的索引值與地圖地形定義用常數 的關係。

學習者在此練習中已經先獲得了一個完整可以執行的程式,但可藉由在練習 中修改程式裡面的二維陣列的各個陣列元素值,如圖三十六所示,因而改變遊戲 執行時的遊戲地圖樣貌。學習者可由此練習而對二維陣列的觀念、語法和使用方

(48)

式有更進一步的認識,同時,可更改地圖樣貌的設計,也增加了學習者練習時的 趣味性。

圖三十五、二維陣列語法練習的說明與建議對話框圖

(49)

圖三十六、修改二維陣列語法練習畫面圖

4.3 練習三:switch 程式語法練習

此練習的目的是要讓學習者熟悉使用C程式語言中的switch語法,在選擇此 練習之後,系统會首先開啟說明與建議對話框,如圖三十七所示,在此對話框中 會針對此練習的練習條件、練習要求與練習提示進行說明,整理如下:

(1) 練習條件:此練習的練習條件除了接續練習一的練習條件之外,另外準備了 兩個代表草莓(Strawberry)和番茄(Tomato)的常數,此兩個常數不僅代表地圖 地形定義用常數,同時也是用來計算分數用的常數。

(2) 練習要求:必須在程式中新增一個函式「void moveit(int i, int j)」,加入可控 制 遊 戲 人 物 行 走 AI 的 程 式 碼 , 協 助 他 走 出 迷 宮 , 並 且 儘 量 走 過 草 莓 (Strawberry)和番茄(Tomato)的地圖所在位置,且須以 switch 語法來完成。

(3) 練習提示:請善用地圖陣列索引值與地圖地形定義用常數的關係,尤其要特 別應用代表草莓(Strawberry)和番茄(Tomato)的這兩個常數,以及設法將移動 方向用識別字元與遊戲人物移動用常數結合起來,另外,請記得呼叫驅動人 物移動的函式。

同時,為了增加此練習的趣味性,在此練習中系統也會紀錄學習者所獲得的 草莓(Strawberry)和番茄(Tomato)的各別分數。練習進行當中的參考畫面如圖三十 八所示,練習完成之後的遊戲執行畫面如圖三十九所示。

(50)

圖三十七、switch 語法練習的說明與建議對話框圖

圖三十八、switch 語法練習的練習畫面圖

(51)

圖三十九、switch 語法練習的遊戲執行畫面圖

(52)

5. 第五章 結論

5.1 結論

本研究針對目前 C 程式語言教學所面臨的困境和應用遊戲情境概念於教學 研究上的現況,作了一些整理,發現缺乏學習動機、缺乏足夠的學習樂趣,是目 前許多學生在學習時最常碰到的問題。本研究嘗試引進了寓教於樂的概念,結合 了 Java Swing、開放原始碼軟體 C 程式語言編輯與連結器 GCC、Java Bomberman 遊戲等,營造出一個遊戲情境式 C 程式語言編輯器,希望能以這樣一個新的 C 程式語言編輯器,可以對 C 程式語言的啟蒙學習者在初學 C 程式語言時能有所 助益。

5.2 研究限制

目前現行的 C 程式語言依然存在著許多不同的版本,本研究只能針對標準 化後的 ANSI C99 這個版本進行最佳化的動作,同時,在 C 程式語言上最複雜的 指標語法,由於實作不易,所以此功能也並未包含在目前的系統中。

5.3 未來展望

本節將討論在本研究中尚未解決的問題,並提出可能的解決方案,以作為未 來發展的方向。

5.3.1 加入進階除錯功能

在本研究中,目前系統本身所提供的除錯功能是針對程式在編輯時的語法檢 查與偵錯,對於在執行時期程式所可能產生的錯誤,像是陣列元素引用超過範 圍、變數值的改變超出本身宣告的資料型態長度等,並無法處理。而像是可以逐

(53)

步進行除錯、觀察程式執行時於記憶體中的物件配置與變化等除錯功能,也尚未 提供,本研究建議這些功能可以在後續版本中加入。

5.3.2 提升系統執行效率

在選擇開發本研究中的系統所要採用的主要技術時,由於我們對Java Swing 技術較熟悉,所以採用它為主要的開發技術,然而Java Swing技術有著執行效率 較慢的缺點,本研究建議在系統的後續的版本中,可以使用另一套執行效率更高 的視窗開發技術:SWT[ 31 ](The Standard Widget Toolkit),以提升系統的執行效 率。

5.3.3 便利使用 C 程式語言標準函數庫

C 程式語言之所以功能強大、便利好用,大部份原因是因為在程式語言本身 已經提供了許許多多方便的標準函式庫,建議在將來的研究中,可以提供針對這 些標準函數庫更方便使用的功能,例如以精靈的呈現方式來導引使用者運用這些 標準函數庫等。

5.3.4 強化聲光娛樂效果

由本研究中發現樂趣對學習效果的提升佔有很重要的地位,而本研究中目前 只提供了一個遊戲 Bomberman,我們建議將來可以朝向使本系統能夠具有外掛 其他遊戲程式的能力,能夠經此來融入更多遊戲類型和遊戲方式,豐富本系統的 聲光娛樂效果。

5.3.5 開放系統的可能性

本系統目前僅止於在實驗室研究階段,未來在系統更成熟之後,建議可以朝 向將此系統開放原始碼化,可以申請成為一個開放原始碼專案,不僅能夠使更多 C 程式語言的啟蒙學習者來使用,更可以得到不同的寶貴意見,甚至支援維護、

(54)

改善與經營本系統,讓本系統在功能完整性與使用效益上,都能獲得提升。

(55)

參考文獻

[ 1 ] K. Howell, “First Computer Languages,” Journal of Computing Sciences in Colleges archive, Vol. 18, No. 4, pp. 317-331, 2003.

[ 2 ] R. Rajaravivarma, “A Games-Based Approach for Teaching the Introductory Programming Course,” ACM SIGCSE Bulletin archive, Vol. 37, No. 4, pp.

98-102, 2005.

[ 3 ] R. E. Mayer, Thinking, Problem Solving, and Cognition, Freeman Publishing, San Francisco, CA, 1983.

[ 4 ] M. Feldgen1 and O. Clua, “Games As A Motivation for Freshman to Learn Programming,” 34th ASEE/IEEE Frontiers in Education Conference, Vol. l3, S1H /11-S1H/16, 2004.

[ 5 ] M. Prensky, “Digital Game-Based Learning,” ACM Computers in Entertainment, Vol. 1, No. 1, pp. 1-4, 2003.

[ 6 ] H. W.-H. Din, “Play to Learn: Exploring Online Education Games in Museums,”

International Conference on Computer Graphics and Interactive Techniques, No.

13, 2006.

[ 7 ] K. Squire, H. Jenkins, and R. Hinrichs, “Games-to-Teach Project: Envisioning the Next Generation of Educational Games,” Educational Game Conference, Edinburgh, Scotland, 2002.

[ 8 ] Maria, Roussou, “Learning by Doing and Learning Through Play: An Exploration of Interactivity in Virtual Environments for Children,” ACM Computers in Entertainment, Vol. 2, No. 1, pp. 1-10, 2004.

[ 9 ] M. Felleisen, R. B. Findler, M. Flatt, S. Krishnamurthi, “The TeachScheme!

(56)

Project: Computing and Programming for Every Student,” Computer Science Education, Vol. 14, No. 1, pp. 55-77, 2004.

[ 10 ] M. Kling, B. Quig, A. Patterson, J. Rosenberg, “The BlueJ system and its pedagogy,” Journal of Computer Science Education, Vol. 13, No. 4, pp. 249-268, 2003.

[ 11 ] Y. Miyadera, N. Huang, S. Yokoyama, “A programming language education system based on program animation,” Proc. Education Uses of Information and Communication Technologies, IFIP 16th World Computer Congress, pp.

258-261, 2000.

[ 12 ] S. Prata, C Primer Plus.5th edition, SAMS, Indianapolis Indiana, 2004.

[ 13 ] GCC Compiler, http://gcc.gnu.org/.

[ 14 ] Richard Matthew Stallman’s Homepage, http://www.stallman.org/

[ 15 ] GCC介紹, http://zh.wikipedia.org/wiki/GCC [ 16 ] Hudson Soft, http://www.hudsonsoft.net/

[ 17 ] Bomberman 介紹, http://en.wikipedia.org/wiki/Bomberman

[ 18 ] D. Alur, J. Crupi, D. Malks, Core J2EE™ Patterns: Best Practices and Design Strategies, Second Edition, Prentice Hall PTR, Indiana, 2003.

[ 19 ] E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley Professional, Boston, 1995.

[ 20 ] S. W. Draper, “Analysing Fun as a Candidate Software Requirement,” Personal and Ubiquitous Computing, Vol. 3, No. 3, pp. 117-122, 1999.

[ 21 ] J. M. Carroll, “Beyond Fun,” Interactions, Vol. 11, No. 5, pp. 38-40, 2004.

(57)

[ 22 ] T. Amon, “Web Virtual Reality Edutainment in Biology and Physics,” Lecture Notes in Computer Science, Vol. 3942, pp. 810-817, Springer-Verlag, Berlin Heidelberg New York, 2006.

[ 23 ] B. F. Lu, K. T. Lim, J. M. Zheng and Y. Y. Cai, “Learning Molecular Biology By VR Playing,” ACM SIGGRAPH International Conference on Virtual Reality Continuum and Its Applications in Industry, pp. 168-172, 2004.

[ 24 ] S. Goschnick, S. Balbo, “Game-first Programming for Information Systems Students,” Proceedings of the Second Australasian Conference on Interactive Entertainment, Sydney, Austria, pp. 71-74, 2005.

[ 25 ] S. Goschnick, “An Object Lesson in OOP-A General Board Game Class,”

Proceedings of the first Australian Software Developer Conference, Sydney, Australia, 1992.

[ 26 ] C. Nevison, B. Wells, “Using a Maze Case Study to Teach Object-Oriented Programming and Design Patterns,” Proceedings of the sixth conference on Australasian computing education, pp. 207-215, 2004.

[ 27 ] L. Natvig, S. Line, “Age of Computers-Game-Based Teaching of Computer Fundamentals,” ACM SIGCSE Bulletin,Vol. 36, pp. 107-111, 2004.

[ 28 ] FloatingBarPane, http://webpages.charter.net/daltontk/components.html [ 29 ] Substance, https://substance.dev.java.net/

[ 30 ] L. Yang, "Add dynamic Java code to your application," JavaWorld.com, 2006.

[ 31 ] SWT Homepage, http://www.eclipse.org/swt/

參考文獻

Outline

相關文件

Proceedings of the 19th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval pp.298-306.. Automatic Classification Using Supervised

Proceedings of IEEE Conference on Computer Vision and Pattern Recognition, pp... Annealed

and Liu, S.J., “Quantifying Benefits of Knowledge Management System: A Case Study of an Engineering Consulting Firm,” Proceedings of International Symposium on Automation and

Lange, “An Object-Oriented Design Method for Hypermedia Information Systems”, Proceedings of the Twenty-seventh annual Hawaii International Conference on System Sciences, 1994,

Godsill, “Detection of abrupt spectral changes using support vector machines: an application to audio signal segmentation,” Proceedings of the IEEE International Conference

D.Wilcox, “A hidden Markov model framework for video segmentation using audio and image features,” in Proceedings of the 1998 IEEE Internation Conference on Acoustics, Speech,

The effect of gender on motivation and student achievement in digital game-based learning: A case study of a contented-based classroom. Using game-based learning to

Sun, “The Application of Role-Based Access Control in Workflow Management Systems”, Proceedings of IEEE International Conference on System, Man and Cybemetics, vol.6, pp.