宋超+徐敏??
摘要:本文把游戲案例引進(jìn)中職C#課程的教學(xué)中,通過(guò)知識(shí)點(diǎn)的層層推進(jìn)引導(dǎo)學(xué)生完成任務(wù),游戲本身也給學(xué)生帶來(lái)了愉悅和成就感,實(shí)踐證明這樣的做法對(duì)學(xué)生掌握計(jì)算機(jī)語(yǔ)言和提高學(xué)習(xí)興趣有著積極的作用。
關(guān)鍵詞:C#課程;中職;游戲案例
一、 引言
目前各級(jí)各類學(xué)校在計(jì)算機(jī)專業(yè)中往往都開(kāi)設(shè)C#課程,但這些課程的教學(xué)過(guò)程卻有著一定不足之處尤其是中職學(xué)校,游戲是學(xué)生的愛(ài)好,也是人類的天性,游戲中能讓人的心理得到“補(bǔ)償”從而體會(huì)到現(xiàn)實(shí)生活得不到的快樂(lè),目前很多學(xué)者在進(jìn)行C#課程改革時(shí)試圖引入游戲內(nèi)容以提高學(xué)生興趣。本文則通過(guò)一個(gè)基于C#語(yǔ)言的飛機(jī)游戲案例設(shè)計(jì)讓學(xué)生們逐步掌握C#的各個(gè)知識(shí)點(diǎn),直觀的感受到游戲帶來(lái)的快樂(lè)從而更好的達(dá)到教學(xué)效果。
二、 游戲選題
眾所周知游戲之所以吸引人主要是因?yàn)樗募?lì)機(jī)制,所以在選擇游戲時(shí)必須考慮到這一點(diǎn),同時(shí)鑒于學(xué)生的學(xué)習(xí)能力選取如坦克大戰(zhàn)、貪吃蛇、連連看、飛機(jī)等一些小程序作為課程的主要內(nèi)容,然而正所謂“麻雀雖小五臟俱全”,它涵蓋了大部分C#知識(shí)點(diǎn)。下面我們就以飛機(jī)游戲?yàn)槔勔幌氯绾卧O(shè)計(jì)教學(xué)案例。
三、 游戲設(shè)計(jì)
針對(duì)飛機(jī)游戲筆者在vs2012中設(shè)計(jì)了gameui.cs(界面類)、background.cs(背景類)、plane.cs(飛機(jī)類)、planelifes.cs(飛機(jī)生命類),planeboom.cs(飛機(jī)爆炸類),bullet.cs(子彈類)、enemy.cs(敵人類),enemybullet.cs(敵人子彈類),boss.cs,bossbullet.cs(boss子彈類),bosslife.cs(boss生命值類)等。按照學(xué)生接受知識(shí)的前后順序安排以下四個(gè)教學(xué)進(jìn)階:
進(jìn)階一:完成飛機(jī)背景的顯示與移動(dòng)
首先設(shè)計(jì)背景類background.cs,背景類包含移動(dòng)、顯示、播放音樂(lè)等方法。其次在界面類中添加背景對(duì)象及顯示方法。值得一提的是通過(guò)查閱資料筆者在初始化游戲界面時(shí)添加一段雙緩存代碼:public GameUI(){SetStyle(ControlStyles.
UserPaint,true);SetStyle(ControlStyles.AllPaintingInWmPaint,true);SetStyle(ControlStyles.DoubleBuffer,true);InitializeComponent();…這樣可以消除飛機(jī)游戲背景移動(dòng)出現(xiàn)的“卡頓”現(xiàn)象,這個(gè)進(jìn)階中涉及到基礎(chǔ)類的創(chuàng)建、類對(duì)象的實(shí)例化和調(diào)用還有雙緩存消除界面卡頓等知識(shí)。
進(jìn)階二:利用鍵盤控制飛機(jī)的移動(dòng)
首先,設(shè)計(jì)飛機(jī)類plane.cs和背景類類似需要定義位置、大小等變量、創(chuàng)建顯示、移動(dòng)等方法,這里值得強(qiáng)調(diào)的是飛機(jī)類在初始化時(shí)需要添加與游戲界面GameUI 的KeyDown事件的關(guān)聯(lián)GameUI.gameform.KeyDown+=newSystem.Windows.Forms.KeyEventHandler(plane_move)其次設(shè)置在界面類中添加飛機(jī)對(duì)象如:public partial class GameUI:Form{public static planepl;…..public GameUI(){pl=new plane();}private void GameUI_Paint(object sender,PaintEventArgs e){pl.draw(g);}….
進(jìn)階三:完成飛機(jī)子彈對(duì)象的加載和移動(dòng)
首先設(shè)計(jì)飛機(jī)子彈類bullet.cs,它的成員變量、方法和飛機(jī)類相同,只是子彈類的位置x,y變量是根據(jù)飛機(jī)的坐標(biāo)確定的所以把x,y設(shè)置成公共屬性如下:public class bullet{……..public int X{get {return x;}set {x=value;}}public int Y{get {return y;}set {y=value;}}而子彈移動(dòng)方法為:public void bullet_move(){y=y-speed;if(y<0)GameUI.bl.Remove(this);}子彈向上飛如果越界就清除掉。其次游戲中子彈對(duì)象有很多個(gè),需要用到泛型類的知識(shí)點(diǎn)如public static List
進(jìn)階四:完成飛機(jī)被擊中、飛機(jī)生命值的設(shè)置
首先為飛機(jī)類添加如下代碼,值得注意的是判斷是否被擊中在比較中心點(diǎn)時(shí)可根據(jù)實(shí)際圖片的尺寸進(jìn)行調(diào)整,在判斷擊中時(shí)也需使用變量記錄敵機(jī)子彈的編號(hào)以免發(fā)生飛機(jī)被同一子彈(敵機(jī))連續(xù)擊中的情況。其次我們?cè)O(shè)置飛機(jī)的生命值類代碼:
if(planelifenum==0)…”you loss!”…
else{planelifesimage(Image)Resource1.ResourceManager.GetObject(“plane” +planelifenum.ToString());g.DrawImage(…)
在這個(gè)進(jìn)階中判斷是否擊中是核心,由于文章篇幅這里略去,值得注意的是程序中添加了Resource類對(duì)象Resource1用于存放資源。
四、 學(xué)習(xí)反饋與小結(jié)
經(jīng)過(guò)一個(gè)學(xué)期游戲案例的教學(xué)實(shí)踐,學(xué)生對(duì)課程的掌握程度和滿意度有了一定提高如下表對(duì)15、16兩個(gè)年級(jí)按不同教學(xué)方式教授C#程序課學(xué)生滿意度對(duì)比,學(xué)生普遍反映以游戲作為教學(xué)案例有助于他們擺脫對(duì)于傳統(tǒng)的程序課的偏見(jiàn)更容易接受和消化知識(shí),同時(shí)分進(jìn)階的方式也可使得不同的學(xué)生都能學(xué)有所得。
本校15級(jí)、16級(jí)學(xué)生學(xué)習(xí)滿意度對(duì)比
參考文獻(xiàn):
[1]劉冉.如何提高五年制高職計(jì)算機(jī)教學(xué)水平[J].考試周刊,2013.82.
[2]布萊克曼著,郭道寰翻譯.心靈面具[M].華東師范大學(xué)出版社2011
[3]藍(lán)敏.游戲項(xiàng)目驅(qū)動(dòng)的高職院校“C#程序設(shè)計(jì)”教學(xué)改革研究[J].高教學(xué)刊,2015年17期.