游戏案例在中职C#课程中的设计和开发
2017-12-27宋超徐敏��
宋超+徐敏��
摘要:本文把游戏案例引进中职C#课程的教学中,通过知识点的层层推进引导学生完成任务,游戏本身也给学生带来了愉悦和成就感,实践证明这样的做法对学生掌握计算机语言和提高学习兴趣有着积极的作用。
关键词:C#课程;中职;游戏案例
一、 引言
目前各级各类学校在计算机专业中往往都开设C#课程,但这些课程的教学过程却有着一定不足之处尤其是中职学校,游戏是学生的爱好,也是人类的天性,游戏中能让人的心理得到“补偿”从而体会到现实生活得不到的快乐,目前很多学者在进行C#课程改革时试图引入游戏内容以提高学生兴趣。本文则通过一个基于C#语言的飞机游戏案例设计让学生们逐步掌握C#的各个知识点,直观的感受到游戏带来的快乐从而更好的达到教学效果。
二、 游戏选题
众所周知游戏之所以吸引人主要是因为它的激励机制,所以在选择游戏时必须考虑到这一点,同时鉴于学生的学习能力选取如坦克大战、贪吃蛇、连连看、飞机等一些小程序作为课程的主要内容,然而正所谓“麻雀虽小五脏俱全”,它涵盖了大部分C#知识点。下面我们就以飞机游戏为例谈一下如何设计教学案例。
三、 游戏设计
针对飞机游戏笔者在vs2012中设计了gameui.cs(界面类)、background.cs(背景类)、plane.cs(飞机类)、planelifes.cs(飞机生命类),planeboom.cs(飞机爆炸类),bullet.cs(子弹类)、enemy.cs(敌人类),enemybullet.cs(敌人子弹类),boss.cs,bossbullet.cs(boss子弹类),bosslife.cs(boss生命值类)等。按照学生接受知识的前后顺序安排以下四个教学进阶:
进阶一:完成飞机背景的显示与移动
首先设计背景类background.cs,背景类包含移动、显示、播放音乐等方法。其次在界面类中添加背景对象及显示方法。值得一提的是通过查阅资料笔者在初始化游戏界面时添加一段双缓存代码:public GameUI(){SetStyle(ControlStyles.
UserPaint,true);SetStyle(ControlStyles.AllPaintingInWmPaint,true);SetStyle(ControlStyles.DoubleBuffer,true);InitializeComponent();…这样可以消除飞机游戏背景移动出现的“卡顿”现象,这个进阶中涉及到基础类的创建、类对象的实例化和调用还有双缓存消除界面卡顿等知识。
进阶二:利用键盘控制飞机的移动
首先,设计飞机类plane.cs和背景类类似需要定义位置、大小等变量、创建显示、移动等方法,这里值得强调的是飞机类在初始化时需要添加与游戏界面GameUI 的KeyDown事件的关联GameUI.gameform.KeyDown+=newSystem.Windows.Forms.KeyEventHandler(plane_move)其次设置在界面类中添加飞机对象如:public partial class GameUI:Form{public static planepl;…..public GameUI(){pl=new plane();}private void GameUI_Paint(object sender,PaintEventArgs e){pl.draw(g);}….
进阶三:完成飞机子弹对象的加载和移动
首先设计飞机子弹类bullet.cs,它的成员变量、方法和飞机类相同,只是子弹类的位置x,y变量是根据飞机的坐标确定的所以把x,y设置成公共属性如下:public class bullet{……..public int X{get {return x;}set {x=value;}}public int Y{get {return y;}set {y=value;}}而子弹移动方法为:public void bullet_move(){y=y-speed;if(y<0)GameUI.bl.Remove(this);}子弹向上飞如果越界就清除掉。其次游戏中子弹对象有很多个,需要用到泛型类的知识点如public static List
进阶四:完成飞机被击中、飞机生命值的设置
首先为飛机类添加如下代码,值得注意的是判断是否被击中在比较中心点时可根据实际图片的尺寸进行调整,在判断击中时也需使用变量记录敌机子弹的编号以免发生飞机被同一子弹(敌机)连续击中的情况。其次我们设置飞机的生命值类代码:
if(planelifenum==0)…”you loss!”…
else{planelifesimage(Image)Resource1.ResourceManager.GetObject(“plane” +planelifenum.ToString());g.DrawImage(…)
在这个进阶中判断是否击中是核心,由于文章篇幅这里略去,值得注意的是程序中添加了Resource类对象Resource1用于存放资源。
四、 学习反馈与小结
经过一个学期游戏案例的教学实践,学生对课程的掌握程度和满意度有了一定提高如下表对15、16两个年级按不同教学方式教授C#程序课学生满意度对比,学生普遍反映以游戏作为教学案例有助于他们摆脱对于传统的程序课的偏见更容易接受和消化知识,同时分进阶的方式也可使得不同的学生都能学有所得。
本校15级、16级学生学习满意度对比
参考文献:
[1]刘冉.如何提高五年制高职计算机教学水平[J].考试周刊,2013.82.
[2]布莱克曼著,郭道寰翻译.心灵面具[M].华东师范大学出版社2011
[3]蓝敏.游戏项目驱动的高职院校“C#程序设计”教学改革研究[J].高教学刊,2015年17期.