徐婉珍,李 強(qiáng),魏菊霞
(廣東東軟學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,廣東 佛山 528200)
在游戲開發(fā)實(shí)踐中培養(yǎng)程序設(shè)計(jì)能力
徐婉珍,李 強(qiáng),魏菊霞
(廣東東軟學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,廣東 佛山 528200)
程序設(shè)計(jì)能力是軟件工程專業(yè)學(xué)生最基本的專業(yè)能力,如何有效地提高學(xué)生分析和解決問(wèn)題的能力,是實(shí)踐訓(xùn)練中亟須解決的問(wèn)題。文章通過(guò)在實(shí)踐學(xué)期對(duì)軟件工程專業(yè)移動(dòng)方向?qū)W生進(jìn)行開發(fā)實(shí)踐,探討基于Android的小型游戲開發(fā)對(duì)學(xué)生程序設(shè)計(jì)能力的培養(yǎng)和提高所起的作用,并提出今后可能的改進(jìn)方向。
程序設(shè)計(jì)能力;游戲開發(fā);教學(xué)改革;面向?qū)ο?/p>
隨著移動(dòng)互聯(lián)網(wǎng)和通信技術(shù)的飛速發(fā)展,智能手機(jī)、平板電腦等移動(dòng)終端得到了極大的普及,基于各種平臺(tái)的移動(dòng)App也如雨后春筍般出現(xiàn),各大高校軟件工程專業(yè)也出現(xiàn)了面向移動(dòng)開發(fā)的一系列課程。對(duì)計(jì)算機(jī)軟件工程專業(yè)學(xué)生而言,程序設(shè)計(jì)能力是其畢業(yè)后能順利就業(yè)于行業(yè)崗位的立足根本[1],移動(dòng)方向?qū)W生也不例外。由于移動(dòng)App與生活密切相關(guān),不少學(xué)生在入學(xué)時(shí)有著濃厚的學(xué)習(xí)興趣,但現(xiàn)實(shí)與理想之間往往存在差距。一年級(jí)的學(xué)生學(xué)習(xí)了Java程序設(shè)計(jì)和Android程序設(shè)計(jì)兩門與程序設(shè)計(jì)相關(guān)的課程,但大部分學(xué)生的現(xiàn)狀不盡如人意。
(1)只掌握了語(yǔ)言中基本的語(yǔ)法格式,未真正理解各種語(yǔ)句的作用,無(wú)法靈活運(yùn)用;
(2)沒有透徹理解面向?qū)ο蟮母拍罴八枷?,無(wú)法在實(shí)際問(wèn)題中運(yùn)用面向?qū)ο笏枷搿?/p>
(3)當(dāng)遇到實(shí)際問(wèn)題時(shí),只能跟隨教師的思路走,但自身不具備分析問(wèn)題的能力。
這些問(wèn)題不僅會(huì)對(duì)其后續(xù)專業(yè)課程的學(xué)習(xí)造成負(fù)面影響,而且極大地影響了學(xué)生的學(xué)習(xí)信心,使其對(duì)自己的專業(yè)學(xué)習(xí)能力產(chǎn)生懷疑。如何在短時(shí)間內(nèi)提升學(xué)生分析問(wèn)題的能力、增強(qiáng)其程序設(shè)計(jì)的能力,成為教學(xué)工作中亟須解決的問(wèn)題,也是實(shí)踐教學(xué)改革的重點(diǎn)所在。
為加強(qiáng)學(xué)生的綜合實(shí)踐能力,學(xué)院把一個(gè)學(xué)年分成3個(gè)學(xué)期,在秋、春兩個(gè)傳統(tǒng)的教學(xué)學(xué)期結(jié)束后專門安排了1個(gè)小學(xué)期用于實(shí)踐教學(xué)。對(duì)軟件工程移動(dòng)方向低年級(jí)學(xué)生來(lái)說(shuō),充分利用實(shí)踐學(xué)期,引導(dǎo)和培養(yǎng)分析問(wèn)題能力,鞏固和加強(qiáng)程序設(shè)計(jì)能力,增強(qiáng)對(duì)專業(yè)學(xué)習(xí)的信心,是該實(shí)踐學(xué)期的教學(xué)目標(biāo)。軟件工程專業(yè)正在進(jìn)行一系列教學(xué)改革,并確立了低年級(jí)以基本程序設(shè)計(jì)能力為重點(diǎn)培養(yǎng)目標(biāo)的原則。吳文虎教授曾說(shuō):“教學(xué)設(shè)計(jì)中切入點(diǎn)很重要[2]。”那么對(duì)實(shí)踐訓(xùn)練而言,選擇什么項(xiàng)目進(jìn)行訓(xùn)練,就如同一堂課的切入點(diǎn)一樣重要。經(jīng)過(guò)綜合考慮,課程組在實(shí)踐學(xué)期為移動(dòng)方向?qū)W生選擇了基于Java語(yǔ)言的Android游戲開發(fā)作為實(shí)踐訓(xùn)練項(xiàng)目。
2.1 選題理由
隨著智能手機(jī)的普及,手機(jī)游戲成為人們喜愛的休閑娛樂活動(dòng)之一。選取Android手機(jī)游戲的開發(fā)項(xiàng)目作為實(shí)踐學(xué)期的實(shí)踐項(xiàng)目,主要基于以下幾方面因素:
(1)手機(jī)游戲與學(xué)生的課余生活聯(lián)系比較密切,容易激發(fā)學(xué)生的學(xué)習(xí)興趣;
(2)基于Java的手機(jī)游戲開發(fā),將充分體現(xiàn)Java面向?qū)ο蟮奶攸c(diǎn),通過(guò)開發(fā)實(shí)踐,可對(duì)面向?qū)ο蟮姆治龊驮O(shè)計(jì)有更為感性的認(rèn)識(shí);
(3)選擇合適的小游戲,開發(fā)中涉及的技術(shù)難度基本符合學(xué)生目前所學(xué)的知識(shí),但又能學(xué)習(xí)到一些新的知識(shí)點(diǎn),使學(xué)生既有鞏固亦有提高;
(4)通過(guò)對(duì)問(wèn)題的引導(dǎo)分析,可逐步提高學(xué)生分析問(wèn)題的能力;
(5)后繼課程中有基于游戲引擎的開發(fā)課程,游戲開發(fā)的實(shí)踐可增強(qiáng)學(xué)生對(duì)后續(xù)課程的學(xué)習(xí)動(dòng)力。
2.2 培養(yǎng)目標(biāo)
開發(fā)小型游戲可以使學(xué)生在知識(shí)與能力兩方面都得到提高。
1)應(yīng)熟練掌握的知識(shí)點(diǎn)。
(1)程序設(shè)計(jì)語(yǔ)言基礎(chǔ);
(2)Android圖形開發(fā)基礎(chǔ);
(3)多線程的概念與運(yùn)用。
2)重點(diǎn)培養(yǎng)的專業(yè)能力。
(1)邏輯思維能力;
(2)理解面向?qū)ο蟮乃枷爰霸O(shè)計(jì)方法,采用OO思想進(jìn)行分析與設(shè)計(jì)的能力;
(3)自主分析與解決問(wèn)題的能力。
2.3 實(shí)施方案
經(jīng)過(guò)對(duì)開發(fā)量、復(fù)雜性、技術(shù)點(diǎn)、學(xué)生現(xiàn)狀等方面的綜合考慮,最后確定了以推箱子、飛機(jī)大戰(zhàn)、貪吃蛇等經(jīng)典小游戲作為訓(xùn)練項(xiàng)目供學(xué)生選取。
2.3.1前期技術(shù)培訓(xùn)
在項(xiàng)目展開前期,首先對(duì)學(xué)生進(jìn)行相關(guān)技術(shù)要點(diǎn)的培訓(xùn),包括Android圖形開發(fā)基礎(chǔ)(包含使用Canvas、Paint類繪制圖形、圖像、文字等)、自定義的View組件、碰撞檢測(cè)方法、多線程的概念及使用等。
2.3.2分階段引導(dǎo)學(xué)生進(jìn)行問(wèn)題分析
當(dāng)學(xué)生熟練掌握相關(guān)技術(shù)點(diǎn)后,首先要求學(xué)生熟悉自己要開發(fā)的游戲,通過(guò)多次試玩游戲,在玩的過(guò)程中體會(huì)和思考設(shè)計(jì)思路。
當(dāng)學(xué)生充分了解了游戲的規(guī)則、內(nèi)容后,針對(duì)不同游戲,提出不同問(wèn)題,引導(dǎo)學(xué)生分析所選游戲的實(shí)現(xiàn)要點(diǎn)。
例如,對(duì)于推箱子游戲,可采用什么形式存儲(chǔ)某一關(guān)的地圖?如何繪制與地圖對(duì)應(yīng)的圖形界面?如何判斷一個(gè)箱子是否能推動(dòng)?如何判斷已經(jīng)通關(guān)?
對(duì)于貪吃蛇游戲,如何記錄蛇頭和蛇身的位置?當(dāng)改變方向時(shí),蛇頭與蛇身應(yīng)作何變化?當(dāng)吃到食物后,如何將蛇身加長(zhǎng)?提示學(xué)生可使用鏈表實(shí)現(xiàn)。
在3個(gè)游戲中,飛機(jī)大戰(zhàn)游戲最能體現(xiàn)面向?qū)ο蟮某绦蛟O(shè)計(jì)思想。要求學(xué)生思考的問(wèn)題有:該游戲中能看到哪些物體?應(yīng)設(shè)計(jì)哪些類?如何實(shí)現(xiàn)界面上多架敵機(jī)、多顆子彈的繪制?
2.3.3版本升級(jí)式實(shí)現(xiàn)目標(biāo)
為了使不同層次的學(xué)生都有較容易實(shí)現(xiàn)的目標(biāo),課程組對(duì)不同的游戲項(xiàng)目設(shè)計(jì)出實(shí)現(xiàn)程度不同的版本,要求學(xué)生至少實(shí)現(xiàn)包含基本功能的最低版本,但可根據(jù)自己的能力繼續(xù)實(shí)現(xiàn)下一版本的要求。
以飛機(jī)大戰(zhàn)游戲?yàn)槔?,各版本的功能要求如下?/p>
1)版本1.0。
要求實(shí)現(xiàn)一架敵機(jī)隨著時(shí)間的推移自動(dòng)向下移動(dòng),并每隔一定的時(shí)間發(fā)射一顆子彈,玩家飛機(jī)能隨觸屏手勢(shì)移動(dòng)并發(fā)射子彈,可判斷玩家子彈是否擊中敵機(jī),可判斷敵機(jī)子彈是否擊中玩家,當(dāng)玩家被擊中一定次數(shù)后,游戲結(jié)束。
2)版本2.0。
除具備1.0的功能外,可在隨機(jī)位置上產(chǎn)生多架敵機(jī),玩家有得分統(tǒng)計(jì)及當(dāng)前生命值統(tǒng)計(jì),并將數(shù)據(jù)顯示在界面上。
3)版本3.0。
為游戲增加得分排行榜功能,有能力的學(xué)生還可添加音效等其他功能。
2.3.4過(guò)程考核管理
考核方式的改革也是教學(xué)改革的重要方面。作為一門實(shí)踐課程,應(yīng)更加重視過(guò)程的管理。在實(shí)踐的過(guò)程中,要求學(xué)生小組內(nèi)部互檢,以學(xué)習(xí)小組的形式匯報(bào)組員每周的進(jìn)度,而指導(dǎo)教師進(jìn)行一定比例的抽查,以點(diǎn)面結(jié)合的形式全程掌握學(xué)生的開發(fā)進(jìn)度,形成每一階段的過(guò)程數(shù)據(jù)。
考慮到實(shí)踐的重點(diǎn)是培養(yǎng)學(xué)生分析問(wèn)題的能力和程序設(shè)計(jì)的能力,為避免使學(xué)生提交的文檔流于形式,我們采取了“重代碼輕文檔”的原則,并未要求學(xué)生按周提交報(bào)告,僅要求在實(shí)踐結(jié)束時(shí)提交一份項(xiàng)目實(shí)踐報(bào)告,但該報(bào)告應(yīng)真實(shí)地體現(xiàn)從總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、關(guān)鍵算法分析到實(shí)現(xiàn)、測(cè)試的全過(guò)程。
學(xué)期末每個(gè)學(xué)生將介紹和演示其作品,并表彰其中的優(yōu)秀作品。
實(shí)施方案是后期實(shí)踐工作的指導(dǎo)綱要,在項(xiàng)目實(shí)施過(guò)程中,仍應(yīng)將具體的技能點(diǎn)進(jìn)一步細(xì)化,并結(jié)合學(xué)生的實(shí)際問(wèn)題給予引導(dǎo)、講解。
以飛機(jī)大戰(zhàn)游戲的開發(fā)為例,除前期提供必要的技術(shù)培訓(xùn)外,重點(diǎn)是分析該游戲的實(shí)現(xiàn)思路。
首先請(qǐng)學(xué)生熟悉要開發(fā)的游戲,并搜集與之相關(guān)的素材。
其次,在技術(shù)培訓(xùn)階段,采取知識(shí)講解與問(wèn)題分析相結(jié)合的形式,按以下步驟實(shí)施。
(1)Android中的圖形繪制,演示如何通過(guò)Canvas類、Paint類、自定義的View組件實(shí)現(xiàn)圖形的繪制,并要求學(xué)生在界面上繪制背景和一架敵機(jī)。
(2)了解多線程的概念和線程的定義與使用,演示如何使敵機(jī)隨時(shí)間的推移向下移動(dòng),并要求學(xué)生自行實(shí)現(xiàn)。同時(shí),請(qǐng)學(xué)生考慮如何通過(guò)線程使敵機(jī)每隔1秒產(chǎn)生一顆子彈且逐步下移。
(3)要求學(xué)生繪制出玩家飛機(jī),然后講解如何響應(yīng)觸屏事件(onTouchEvent),演示玩家飛機(jī)隨著手勢(shì)滑動(dòng)的方向移動(dòng),并要求學(xué)生體驗(yàn)?zāi)M機(jī)和真機(jī)的區(qū)別,討論細(xì)節(jié)的處理。
(4)講解碰撞檢測(cè)的基本原理,要求學(xué)生思考并實(shí)現(xiàn)敵機(jī)和玩家飛機(jī)的碰撞檢測(cè)。
經(jīng)過(guò)以上培訓(xùn),學(xué)生已經(jīng)掌握了完成基本功能所需的技術(shù)點(diǎn),此時(shí)可以要求學(xué)生分析應(yīng)設(shè)計(jì)哪些類,并完成版本1.0。
在開發(fā)1.0版本時(shí),引導(dǎo)學(xué)生思考下面的問(wèn)題:界面上有敵機(jī)、玩家飛機(jī)、敵機(jī)子彈或玩家子彈等物體,應(yīng)設(shè)計(jì)哪些類?這些類有哪些相同的屬性和需要實(shí)現(xiàn)的功能(即方法)?例如是否都需要有平面坐標(biāo)、對(duì)應(yīng)的圖像等屬性,且都應(yīng)具有繪制自身、判斷是否超界等功能,那么是否可以設(shè)計(jì)一個(gè)父類實(shí)現(xiàn)這些共性?
在開發(fā)2.0版本時(shí),引導(dǎo)學(xué)生思考:如何在界面上顯示多架敵機(jī)?提示學(xué)生可使用動(dòng)態(tài)數(shù)組類Vector,請(qǐng)學(xué)生自行復(fù)習(xí)該類的常用方法add、remove等,并將其運(yùn)用在程序開發(fā)中。
在開發(fā)3.0版本時(shí),提醒學(xué)生復(fù)習(xí)Android開發(fā)中存儲(chǔ)數(shù)據(jù)的幾種方式,并選取合適的方式存儲(chǔ)玩家成績(jī)。
在實(shí)踐學(xué)期選用游戲開發(fā)作為實(shí)踐項(xiàng)目后,取得了一定的成效,主要表現(xiàn)為:
(1)由于選用的游戲流行度高且難度適中,學(xué)生開發(fā)的積極性比做其他項(xiàng)目更高。
(2)學(xué)生普遍反映對(duì)面向?qū)ο蟮姆庋b、繼承等概念有了更感性的認(rèn)識(shí)和理解。
(3)較完整地了解了項(xiàng)目的整體開發(fā)過(guò)程。
(4)提高了自行解決問(wèn)題的能力, 不少學(xué)生都能主動(dòng)利用互聯(lián)網(wǎng)進(jìn)行自主學(xué)習(xí)。
(5)更熟練地使用開發(fā)工具。
當(dāng)然,通過(guò)項(xiàng)目的實(shí)施,我們發(fā)現(xiàn)仍存在一些問(wèn)題。
(1)部分學(xué)生邏輯思維能力較差,即使教師引導(dǎo),也無(wú)法理清實(shí)現(xiàn)的思路。針對(duì)這部分學(xué)生,可考慮進(jìn)行更為細(xì)致的任務(wù)分解,更深入地引導(dǎo)學(xué)生進(jìn)行任務(wù)的分析。
(2)過(guò)程考核管理需要對(duì)每名學(xué)生每一階段的情況有具體的了解,但因?yàn)槿藬?shù)較多,全面的了解存在一定的困難,因此對(duì)學(xué)生個(gè)體情況的考評(píng)仍不夠細(xì)致。
通過(guò)在實(shí)踐學(xué)期進(jìn)行的教學(xué)改革,以小型手機(jī)游戲的開發(fā)作為低年級(jí)軟件工程專業(yè)移動(dòng)方向?qū)W生的綜合實(shí)踐項(xiàng)目,學(xué)生能更形象地理解面向?qū)ο蟮某绦蛟O(shè)計(jì)思想,更好地激發(fā)學(xué)生的學(xué)習(xí)興趣,更全面地鞏固與提高學(xué)生的程序設(shè)計(jì)能力,是一種行之有效的實(shí)踐訓(xùn)練方式,在今后的工作中可進(jìn)一步深化和推廣。
[1] 何昭青, 彭立, 傅紅普. 基于程序設(shè)計(jì)能力培養(yǎng)的計(jì)算機(jī)專業(yè)實(shí)踐教學(xué)體系的思考[J]. 湖南第一師范學(xué)院學(xué)報(bào), 2012(2): 62-64.
[2] 吳文虎. 教學(xué)設(shè)計(jì)中切入點(diǎn)很重要[J]. 計(jì)算機(jī)教育, 2005(2): 12-14.
(編輯:孫怡銘)
1672-5913(2017)02-0104-03
G642
軟件工程(移動(dòng)應(yīng)用方向)戰(zhàn)略性新興產(chǎn)業(yè)特色專業(yè)項(xiàng)目(粵財(cái)教[2014]130 號(hào))。
徐婉珍,女,計(jì)算機(jī)應(yīng)用工程師,講師,研究方向?yàn)檐浖夹g(shù)與計(jì)算機(jī)教育,xuwz@neusoft.com。