汪紅兵 姚琳 張敏 武航星 李莉


摘要:軟件課程設計是大學生計算機實踐教育體系中的重要環節。通過具有較高顯示度的作品激發學生學習興趣,使得學生在做完課程實踐之后具有強烈的成就感,是做好軟件課程設計的關鍵。作為基于游戲界面的C、C++和Java語言綜合實驗教學平臺,Funcode完全滿足這些要求。本文在簡要介紹我校計算機應用實踐體系之后,對Funcode平臺的使用、教學案例設計、教學效果等進行了詳細的解析。今后需要結合計算思維的培養要求,將抽象的計算思維轉化為直觀的游戲精靈,進一步據此建立基于Funcode平臺的計算思維訓練平臺。
關鍵詞:Funcode;軟件課程設計;實踐教育體系;計算思維
中圖分類號:G642.41 文獻標志碼:A 文章編號:1674-9324(2016)31-0253-03
一、背景
當前正處于知識經濟時代,社會需要高校培養更多的理論和應用兼備的優秀人才,要求學生具有較高的信息素養和信息處理能力。因此,社會和時代迫切需要提高程序設計類實踐性課程的教學質量和教學效果,要求在人才培養模式上進行相應的改革和創新,促使課程體系、教學內容、教學方法等緊跟社會發展的步伐。但是,教學質量的提高、教學效果的加強和高素質人才的培養不是只靠理論教學就可以達到的,同樣離不開與理論教學同等重要的實踐教學。一般來說,計算機實踐教學往往存在以下問題:
1.實踐教學以驗證為主,難以培養學生創新能力。目前在程序設計課程的課內實驗中,為了鞏固理論課堂所講解的語法規則和算法,采取驗證性的實驗居多,學生只需要按照實驗指導書的步驟,即可得到理想的實驗結果,完成實驗。這很容易導致學生實際動手能力、創新能力的不足。
2.教學案例與現實問題結合不密切。理論教學過程中以經典算法為基礎,對基本概念、語法和程序設計知識進行講解,采用的大多是比較抽象的案例,與現實問題有一定差距。對于大學一年級學生,既枯燥又難以理解,常常感到課堂上聽懂算法思想,當自己編程解決問題時,又覺得無從下手。
3.實踐教學內容單一、枯燥,學生缺乏學習興趣。程序設計課程中,首先介紹數據類型、語法規則、基本程序設計框架和函數定義等基礎知識,課內實驗內容一般與課程的知識點相對應,一個實驗對應一部分知識點,內容比較單一、枯燥。綜合性的實驗受時間、學生理解等多種因素影響,練習相對比較少。而學生的自學能力與主動學習的意識不高,很多學生課外很少主動做練習,欠賬后更缺乏學習興趣。如何激發學生對程序設計課程的興趣,調動學生的學習積極性,培養學生創新能力、計算思維能力,是教學中亟待解決的一個難題。
“實踐是催生創新的動力源泉”。近年來我校一直強化計算機類課程的實踐教學,以增強學生利用計算機解決實際問題的應用能力,順應當前信息社會發展和工程教育認證的需要為目標。基于Funcode平臺的軟件課程設計是計算機實踐教學體系改革中重要環節。
二、我校的計算機實踐教育體系
需要說明的是,這里的計算機實踐教育體系指的是我校非計算機專業的計算機相關課程第二個學習階段的實踐教育體系。第一個學習階段,非計算機專業學生主要按照大專業分類學習不同知識模塊組成的計算機基礎;第二個學習階段,非計算機專業學生按照理工和非理工類進行劃分,非理工類學生學習多媒體相關課程并據此進行有關實踐活動,理工類學生學習程序設計語言課程并據此進行有關實踐活動。
針對程序設計基礎課程,需要在課堂教學中設置單元實驗來鞏固課堂教學所講授的知識點,也可以在教學后期由教師根據需要設置一些綜合實驗來串聯各個知識點,例如可以設置一個排序實驗,可以根據鍵盤輸入的選擇來完成對整數、字符、字符串和對象構成的集合進行排序。學生在完成課堂實驗教學之后,在當年的暑期即進入軟件課程設計。由于VB語言教學中已經具有窗口功能,VB的軟件課程設計一般沿用課堂教學需要延展的綜合性案例。C和C++語言在日常教學過程中沒有涉及到窗口設計,學生做的幾乎所有實驗的運行結果都是命令行的顯示方式,迫切需要一種更能激發學生興趣且具有較高顯示度的方式來支持C和C++的軟件課程設計。Funcode平臺是一個很好的選擇。當然,學生在完成課程設計之后,還可以參加相應的程序設計大賽和SRTP項目,繼續加強對程序設計語言的實踐學習。
三、基于Funcode平臺的軟件課程設計
(一)Funcode平臺介紹
Funcode是一款全新的基于游戲和動畫界面的C、C++和Java語言綜合實驗教學平臺?;贔uncode平臺,學生用課堂里學到的程序設計知識,即能輕松開發出一款互動式游戲或應用系統。Funcode旨在點燃學生學習激情,激發學生創新靈感,培養學生綜合編程能力,最大程度減輕教師的工作負擔。Funcode包含界面設計和項目開發兩大模塊。學生在編輯器中輕松設計游戲界面、特效、各種精靈(動態精靈和靜態精靈),在VC++(或其他IDE)中編寫代碼,完成各種定制功能。
Funcode平臺實際是一個小型游戲引擎,對涉及處理流程的細節進行了封裝,將游戲運行過程劃分為游戲初始化、游戲運行和游戲結束三個函數。
以下代碼是關于CGameMain類的成員函數GameMainLoop,該函數在main函數中被循環重復調用來運行游戲。成員函數GameMainLoop內部,涉及初始化游戲、游戲運行和運行結束三種狀態,分別使用GameInit函數完成游戲初始化功能、使用GameRun函數執行游戲運行功能,使用GameEnd函數執行游戲結束功能,三種狀態按如下代碼進行切換。
void CGameMain::GameMainLoop(float fDeltaTime)
{
switch( GetGameState() )
{
// 初始化游戲,清空上一局相關數據
case 1:
GameInit();
// 初始化之后,將游戲狀態設置為進行中
SetGameState(2);
break;
// 游戲進行中,處理各種游戲邏輯
case 2:
GameRun( fDeltaTime );
if(……) GameEnd();
break;
// 游戲結束/等待按空格鍵開始
case 0:
// 通過設置游戲狀態可以讓游戲重新開始
break;
}
}
此外,Funcode平臺將游戲中所涉及的各類實體劃分為靜態精靈和動態精靈,將精靈與精靈、精靈與邊界的交互抽象為回調函數,使得當事件發生時系統會自動地進行調用。如下函數:
void CGameMain::OnSpriteColSprite(const char *szSrcName,const char *szTarName);
在精靈和精靈發生碰撞時會自動被回調,其中szSrcName指針指向發起碰撞的精靈,而szTarName指針指向接受碰撞的精靈。如下函數:
void CGameMain::OnSpriteColWorldLimit(const char *szName,const int iColSide);
在精靈與邊界發生碰撞時會自動被回調,其中,szName指針指向發起碰撞的精靈,iColSide確定精靈與邊界碰撞的方向,其中值為0表示與左邊邊界碰撞,值為1表示與右邊邊界碰撞,值為2表示與上邊邊界碰撞,值為3表示與下邊邊界碰撞。
最后,Funcode將用戶與游戲的交互劃分為鍵盤和鼠標兩類,并提供相應的函數自動處理,如下所示:
void CGameMain::OnKeyUp(const int iKey);
void CGameMain::OnKeyDown(const int iKey,const bool bAltPress,const bool bShiftPress,const bool bCtrlPress);
void CGameMain::OnMouseUp(const int iMouseType,const float fMouseX,const float fMouseY);
void CGameMain::OnMouseClick(const int iMouseType,const float fMouseX,const float fMouseY);
void CGameMain::OnMouseMove(const float fMouseX,const float fMouseY);
所有這些為學生進行代碼編寫帶來了極大的方便,實際上學生只需要根據項目需要完成這些函數的實際功能即可。
(二)教學案例設計
Funcode平臺中提供了大量的教學案例,如海底世界、黃金礦工、拼圖游戲、桌球游戲、拍飛蟲、打飛碟、太空戰機和坦克大戰等傳統小游戲。
學生根據需要,可以選擇Funcode中自帶的教學案例,教師需提供簡單的功能說明,鼓勵學生增加新的功能,如積分、排名和倒計時等。此外,鼓勵學生積極設計新的游戲,充分利用各種多媒體工具制作素材,發揮團隊作戰效能,按照制作腳本、素材準備、Funcode制作和運行優化的步驟有計劃、有步驟地完成軟件課程設計。下表分別為C++和C課堂學生自選課題和選擇Funcode平臺中題目的比例。
四、應用Funcode平臺的軟件課程設計的教學效果
(一)Funcode平臺使用情況介紹
對于2014~2015學年夏季學期,全校大約有3300名學生參加暑期實踐。暑期實踐分為計算機實踐、英語夏令營和創業訓練三個部分。其中,選擇參加計算機實踐的學生大約為1600名,近50%。這其中,選擇參加C和C++Funcode游戲設計的學生大約1200名,選擇Office綜合練習的約300名,選擇VB窗口系統設計的約120名。
(二)教學反饋
軟件課程設計結束后,基于學校課程中心提供的在線調查功能對學生進行了教學效果的網絡調查。下面分別從課程對培養團隊精神的重要性、使用程序設計語言的體驗感和成就感以及綜合評價四個方面分別進行說明。
五、總結與展望
基于Funcode平臺進行C和C++軟件課程設計達到應有的目標,在培養學生團隊能力、提升學生使用C和C++程序設計語言的體驗感和成就感方面效果顯著。未來需要進一步改進的工作包括:將C和C++程序設計語言課程中各種抽象的計算思維,實例化為游戲中各種實際的精靈和實際算法需求,進一步將Funcode建設成為計算思維的訓練平臺。
參考文獻:
[1]Jeannette M. Wing. Computational Thinking. Communications of the ACM. 2006,49(3):33-35.
[2]陳國良.計算思維[J].中國計算機學會通訊,2012,8(1):31-34.
[3]李廉.計算思維-概念與挑戰[J].中國大學教學,2012,(1):7-12.
[4]陳國良,董榮勝.計算思維與大學計算機基礎教育[J].中國大學教學,2011,(1):7-12.
[5]武航星,姚琳,張敏.基于Funcode平臺的C語言課程設計教學改革[J].計算機教育,2014,(24):30-33.