乐于分享
好东西不私藏

旧法新探:用VB制作竞赛试题展示系统的三个关键问题

旧法新探:用VB制作竞赛试题展示系统的三个关键问题

目前,利用AI进行辅助教学已经成为学校教育发展的必然趋势,校外教育也不例外。与学校教育相比,校外教育更注重于学生的活动。

校外活动中心开展的各类大型活动中,演讲、辩论和抢答这些知识性竞赛活动占有相当大的比例。开展这些活动,一个界面友好、功能完善的多媒体试题展示系统,往往能起到画龙点睛的作用。与传统的试题展示方法和手段相比,多媒体试题展示系统的优点不言而喻,但采用何种工具语言来制作,却是一个艰难的选择。

相比AI而言,PowerPoint是一款被广泛采用的、非常优秀、非常友好的演示文稿制作软件,但其形式单一,用它制作一些交互性较强的演示文稿,往往难以达到预期的效果。因此,很多人在使用PowerPoint时采用了VBA编程,也就是用“宏”定义来实现那些交互性功能。这样加大了开发难度,也造成了定义困难、移植困难和使用不方便。

因此,既然可用VBA来实现这些复杂的功能,何不直接用VB来完成所有的这些工作?

事实上,用VB编程确实能够完成演示文稿的这些功能。用它制作的可执行文件,不但能播放音频、影视和动画文件,实现倒计时这样复杂的功能,而且还可以插入各种形式的文档和调用PowerPoint文件及其他文件。

由于用VB可以综合处理多种媒体信息,如文本、图形、图像、音频和视频等,使多种信息建立逻辑连接关系,集成为一个系统并具有人机交互性,再加上VB的可视性强、简单易用,所以采用VB制作多媒体竞赛试题展示系统是个不错的选择。

但是,用VB制作竞赛答题系统三个关键问题需要解决,即倒计时系统、加载背景音乐和使用Shockwave Flash控件播放动画。下面就这三个关键问题进行说明。 

一、倒计时器的制作

演讲、辩论和抢答竞赛都是有时间限制的,通常采用人工计时方式。人工计时缺乏直观且容易出错,因此,在展示的竞赛试题上设置一个倒计时器显得尤为重要。这样既可提醒参赛选手,又可限制时间,而且非常直观。

VB中,这一功能可通过文本框来实现。

图一

如图一所示,新建一表单Form1,在其中添加一个text控件,命名为text1,其text值为“00:00,修改其字体型号、大小和颜色,使其与页面匹配。再添加五个命令按钮,分别为“开始(停止)”、“退出”、“返回”、“正确”和“错误”。

设计要求:试题打开后,主持人发“开始”命令并按“开始”按钮,计时器开始倒计时。如果在规定的时间内参赛选手未能答题,答题自动终止,系统自动显示答案。如果参赛选手对题目有疑问,可暂停提问,暂停期间计时器不走。如果参赛选手在规定的时间内答题并确认不用修改,由裁判判定正误。若正确,按“正确”按钮后显示“正确”提示和正确答案,并播放欢快的曲子;若错误,按“错误”按钮后显示“错误”提示和正确答案,并播放遗憾的曲子。只要裁判按动“开始”外的任意按钮,计时都应终止,程序转向执行相应任务。

源程序代码:

Private Sub Command1_Click()

……

Dim preTime, curTime, myTime, jsTime As Long

If State Then myStop = True: Exit Sub

……

State = True

preTime = GetTickCount

myTime = temp + 1

jsTime = temp

Do

curTime = GetTickCount

If curTime - preTime >= InterVal * (jsTime - myTime) Then

myTime = myTime - 1

temp = myTime

以下程序段是将秒化为分

If (myTime Mod 60) >= 9 Then

Text1.Text = CStr("0" & Int(myTime / 60) & ":" & (myTime Mod 60))

End If

If (myTime Mod 60) <= 9 Then

Text1.Text = CStr("0" & Int(myTime / 60) & ":0" & (myTime Mod 60))

End If

DoEvents

……

If myTime = 0 Then

State = False

myStop = False

……

Exit Do

End If

End If

Sleep (20)

DoEvents

If myStop Then

State = False

myStop = False

……

Exit Do

End If

Loop

End Sub

执行以上程序,需调用Windows API库函数kernel32.dll,并且还应自定义时间间隔并设定相关变量。因此,应申明以下内容:

Private Declare Function GetTickCount Lib "kernel32.dll" () As Long

Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Const InterVal = 1000 '自定义的时间间隔

PrivateState, myStop As Boolean

Private temp As Long

在表单载入时,需要设定倒计时的起点,若答题时间只有15秒钟,应在Form_Load事件中添加如下源代码:

Private Sub Form_Load()

temp = 15

……

End Sub

至此,倒计时器基本制成。

二、音频文件的调用

一个好的竞赛试题展示系统不能没有音乐,好的背景音乐不仅可以烘托竞赛气氛、激发斗志,还能给人爽心悦目的感觉。

严格说,调用音频文件和加载播放器播放音乐是有区别的,但都得调用Windows操作系统的相关功能,只不过有的需要调用winmm.dll文件,有的需要添加MMControl控件。

这里以前面提到的倒计时器为例,说明如何调用音频文件。

要求:主持人宣布开始并按“开始”按钮,系统响开始音乐;宣布暂停并按“暂停”按钮,系统响暂停音乐;系统计时进入最后5秒钟,倒计时读数开始;倒计时结束,系统响“结束”音乐;裁判宣布答案正确响胜利的号角;裁判宣布答案错误响遗憾的声音。

要实现这些功能,必须调用Windows操作系统的winmm.dll文件。因此,应申明以下内容:

Private Declare Function PlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszName As String, ByVal uFlags As Long) As Long

然后使用CALL命令调用音频文件,设音频文件放在主程序文件夹中的Audio文件夹中,“开始”的音频文件名为start.wav,数字“5”的音频文件为5.wav,源代码如下:

Call PlaySound(App.Path & "\Audio\start.wav", 0&)

倒计时读数的源代码:

If myTime = 5 Then

Call PlaySound(App.Path & "\Audio\5.wav", 0&)

End If

其中“App.Path”为主程序文件所在的路径。其它声音的操作类似,使用本法可实现背景音乐的调用,并且不需控件操作。

三、使用Shockwave Flash控件播放动画

动画是多媒体课件制作的核心内容之一。由于它演示直观、情节逼真,展示竞赛试题时也经常用。目前,动画文件存储格式较多,如GIF格式、FLI/FLC格式、SWF格式及AVI格式等。相对而言,SWF格式的文件具有画质流畅、占用资源少和播放操作简单的优点,因而应用较广。

下面我们以图一为例,选用较为常见的swf格式文件进行说明,操作过程如下。

设动画文件放在主程序所在文件夹中的Video文件夹中,文件名为turnleft.wsf,要求打开这道试题时,动画自动重复播放。

Shockwave Flash控件是由Flash开发商提供的一个ActiveX控件,通常在安装Windows操作系统时会安装Flash播放程序,产生一个flash.ocx控件文件,这就是Shockwave Flash控件,用户可以将它添加到VB的工具箱中。添加方法为:工程部件在弹出的对话框中选择控件选项卡选中Shockwave Flash选项。然后将Shockwave Flash控件拖放到VB窗体中。

设置控件属性,将Shockwave Flash控件命名为ShockwaveFlash1,编写触发事件源程序代码。根据要求,在打开试题时就开始播放动画,因此必须在前面的Form_Load事件中添加以下代码:

ShockwaveFlash1.Movie = App.Path & "\Video\turnleft.swf"

并且,Form_Load事件必须放在所有事件的最前面,以上代码也必须放在本事件代码的最前面,否则系统有可能无法载入SWF文件。

需要说明的是,如果采用VB6.0编程,即使安装了sp6补丁,用户仍无法保存含有Shockwave Flash控件的界面。原因在于VB6.0版本太低,无法识别最新版本的Shockwave Flash控件。解决方法:保存前降低flash.ocx版本。

本文阐述内容仅为使用VB制作多媒体竞赛试题展示系统的一些关键操作,而VB真正的强大功能远不止这些。笔者希能借此抛砖引玉,望在广大爱好者的共同努力下,VB能在多媒体竞赛课件制作方面发挥出更大作用。当然,这些只是旧法新探,如果直接能用AI来完成这些功能,那就更完美。