李慎东
游戏程序加工,对学生来说是一个非常新鲜、感兴趣的课题。它不仅可以锻炼学生的逻辑思维能力,还能充分发挥学生的创造力。设计“游戏程序加工”教学内容,主要是为了开启游戏程序设计之门,使每个学生都能领会信息的编程加工的原理和方法。因此我基于VB程序设计平台以“雷电”程序的加工为例,对教学进行了精心的设计与程序实现的策划,通过学生体验游戏程序的加工以充分达到教学目标。
根据教材(《信息技术基础》,上海教育科学出版社出版)课标要求,这节内容主要讲述在VB编程环境下让学生体验信息的编程加工的过程。因此在本课中我借助Moodle教学平台,以“游戏程序的简单加工”为主线,从学生通过VB源程序体验游戏并发现游戏存在的问题着手,引导学生学会查看对象、修改对象属性和变量值,以小组合作形式让学生尝试解决游戏存在的问题,试图阅读程序代码和代码添加,使学生明白通过编写程序代码就可以完善程序的功能。在教学过程中通过学生体验游戏程序加工过程再到知识归纳,充分体现隐性知识到显性知识的转化。下面我就结合教学实际,谈一谈“雷电”游戏程序加工在教学中的实现过程。
一、“雷电”游戏的设计思想
完成此游戏程序设计涉及以下几个方面的内容:①敌方飞机:移动(为简化程序,将敌机置为不动)、生命值(当被我方子弹击中后,生命值就减1,生命值为0时则我方赢,游戏结束)、子弹数(永远够用)、子弹射击的路径(设置为无规则的曲线路径射击)。②我方飞机:移动(按“a、d、s、w”键时飞机“左、右、上、下”移动,飞机移动时,子弹跟着飞机一起移动)、子弹射击(点击鼠标左键或按“,”键时发射子弹,每按一次子弹数减1,子弹数为0时则我方输了,游戏结束)、子弹射击路径(垂直发射)、生命值(被敌方击中1次则生命值减1,生命值为0时则我方输,游戏结束)。③控制键的检测:通过文本框的SetFocus功能获取光标焦点,检测按键执行相应功能。④敌方与我方子弹射击速度各由一个计时器控制。
二、简单的对象属性、变量值的修改
课程中设计从学生体验并发现“雷电游戏”存在的问题切入,学生在体验中发现我方飞机只能左移且移动速度慢、控制鼠标左键发射子弹、子弹数太少、生命值不够、敌方飞机不能动、敌机子弹无规则地曲线发射。
针对学生发现的问题,经过反复的思考与设计,我巧妙地将问题串起来,同时也呈现了程序设计的基本过程。通过讲解先让学生了解程序的编写环境、界面的对象及基本属性、查看与理解基本程序代码,以便各组学生能顺利地完成如下列表中的任务。
各组任务及指引表
各组任务既有梯度又有相似性,梯度表现在:从程序界面对象属性的修改到变量值、代码参数的修改,遵循了程序设计的思想;相似性表现在各组修改的都是数值,简单易懂。
三、如何实现多功能的代码添加
教师提供给学生的雷电源程序,功能少漏洞多,希望同学们通过加工雷电程序,能够使得程序功能更加完善。上述活动是教学目标达成的一个重要过程,要圆满完成本节教学任务,需要更深层次地拓展教学内容。由于学生对程序代码的陌生,教学设计中只能采取以诱善引的策略,逐步使学生了解程序代码的编写过程,使学生既不产生对程序代码的恐惧感,又能成功地添加代码完善游戏功能,成就感会使学生保持良好的学习兴趣。所以在源程序中只编写了简化后飞机左移的代码。学生主动查找飞机左移的代码在哪里,并试图理解飞机左移代码:
If KeyAscii = Asc("a") Then '如果按的是a键,就执行下面语句
myplayer.Left = myplayer.Left – 30'我方飞机向左移动30个缇(单位)
End If'结束判断
在教师的提示下学生很快便能掌握“if”和“end if”是成对出现的条件语句,可以用来判断按键情况,以执行相应语句。(语句中的KeyAscii和Asc(“a”)不再过多解释,学生可课后查阅相关知识。)接下来学生便可参照飞机“左移代码”,两个学生为一组探讨添加“右移代码”就简单多了。大部分学生通过复制“左移代码”到“右移代码”提示处,再将“a”改成“d”。把“myplayer.left”改成“myplayer.right”,按照正常理解思路是对的,可是我们回过头来查看一下“myplayer”的对象属性,在位置属性里只有“left”和“top”,没有“right”的属性,因此需要理解的是“改变(减少或增加)对象与窗体左边之间的距离就能实现飞机的左右移动”,即执行右移的语句为:
myplayer.Left = myplayer.Left + 100
游戏程序加工,除了要求每个学生都能完成上述基本的活动任务外,更要强调学生创造力的发挥,要求学生课后有选择地、有创造性地去修改游戏程序,比一比谁加工的游戏程序功能更多、更合理,并要求学生一周后提交作品,教师对学生的优秀作品进行点评。
四、程序代码(仅提供关键部分程序代码)
Dim enemylife As Integer'敌方生命值
Dim mylife As Integer'你的生命值
Dim fs As Boolean'判断子弹发射
Dim bullet As Integer'子弹数目
Private Sub Form_Load() '程序开始运行时初始化数据
enemylife = 10
fs = True
bullet = 10
La1.Caption = enemylife
mylife = 3
Label3.Caption = mylife
Label5.Caption = bullet
End Sub
Private Sub Form_Click()'点击鼠标时子弹发射
If bullet <> 0 And enemylife <> 0 And mylife <> 0
Then
mybullet.Visible = True: Timer1.Enabled = True
bullet = bullet - 1 '子弹数减1
Label5.Caption = bullet
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
Text1.Text = ""
Text1.SetFocus
If fs = True Then
mybullet.Left = myplayer.Left + myplayer.Width / 2
'子弹未发射,我方飞机左移时,子弹跟着左移.
End If
If KeyAscii = Asc("a") Then
myplayer.Left = myplayer.Left - 30
End If
'此处可添加按键控制的代码,如右移等
End Sub
'计时器1控制我方子弹移动速度程序段
'计时器2控制敌方子弹移动速度程序段
'游戏结束程序段
'游戏开始程序段
(作者单位:广东广州市第五中学)