《VB课程设计报告.doc》由会员分享,可在线阅读,更多相关《VB课程设计报告.doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 VB课程设计报告 课程题目: 动物管理员游戏 难度:4星姓名:束方婷 学号:2 一 题目分析 “动物管理员”是一款非常有趣的游戏,有很多的变种。本题目要求编制一个玩法相对简单,但是编程却不简单的版本。如图,程序的界面分为三部分,左边部分是一个由8行8列动物图标组成的游戏区,使用者通过鼠标单击两个相邻的图标使之交换位置,如果交换位置之后某类动物图标在同一行或同一列上出现三个或三个以上相邻的情况,表示这些相邻的动物被“捕获”。最右边是成绩显示区,显示出当前共捕获了每种动物个多少只以及总的数量。游戏区和成绩显示区的交接处是时间显示区,在游戏过程中剩余时间越来越少,深色部分越来越短,直到游戏结束。游
2、戏结束时,捕获的动物越多则水平越高。二 具体功能(1) 程序启动时,游戏区随机分布各类动物的图标。图标共有7种,如图 依次是长颈鹿,猩猩,大熊猫,河马,鳄鱼和大象。每种动物有两种表情,上面一行是未捕获时的表情,下面一行是被捕获时的表情。 程序启动时,有可能出现同一行或同一列上有三个以上同种动物相邻,这种情况也算成绩。 (2)用户使用鼠标单击图标时,被单击的图标变红,交换位置之后,图标的颜色变为正常。 (3)如果用户单击了不相邻的图标,程序发出“错误音”且不变换位置。如果单击的是相邻图标但交换位置之后并不能使三个以上同种图标相邻,则会交换回原来的位置同时发出“错误音”。 如果交换位置后出现相邻图
3、标,所有满足相邻关系的图标以被捕获的表情闪烁(动物张嘴)后消失,形成的空位由上方的图标下落后填补,最上面形成的空位由随机生成的图标填补。消失的图标个数会作为成绩加到右边的成绩显示区,同时播放悦耳的“成功声”。 (4)很多情况下,往往会有多个相邻关系同时形成。交叉或在不同位置同时形成多个相邻关系。所以,程序即时判断游戏区形成的所有相邻关系,并进行处理和加分。 有时,“消掉”相邻图标,上方的图标下落后,使得原来不相邻的图标成了相邻关系,这时应判断和处理整个游戏区的图标相邻关系,直到所有的图标都不构成三三相邻的关系。 (5)程序游戏时间共2分钟,游戏过程中每秒钟发出一声时钟的滴答声,并且时间显示区的
4、蓝条越来越短。游戏时间到时,发出闹钟的“闹铃声”,游戏区所有图标的背景变为红色,并显示出“Game over”字样。这时游戏结束,鼠标不能再单击图标。如图(6)为了清楚的表达图标的变换,图标的消去和下落等动作,程序使用了延时。例如,单击两个相邻图标后,隔200ms才交换它们的位置,判断相邻后,隔200ms才消去,再隔200ms才将上面的图标下移在延时过程中,用户的鼠标单击是无效的,这时鼠标指针变为;当允许单击时,鼠标指针变为。(7)对于本游戏,要取得高分,除了应具有敏锐的洞察力和快速的反应力,还要有好运气。因为,有时一次变换位置后会引起“连锁反应”得很多分,而有时无论怎样交换位置都不能形成三三
5、相邻关系三 设计实现(1)为了方便数据的管理和编程,定义三个全局数组Option Base 0Public Grid(7, 7) As Integer 游戏区的动物图标分布Public Meet(7, 7) As Boolean 保存形成相邻关系的位置Public Score(7) As Integer 已捕获的每种动物的数量(2) 实现动物图标的产生功能 Private Sub Form_Load() Dim i As Integer, j As Integer Randomize 初始化随机数 For i = 0 To 7 For j = 0 To 7 Grid(i, j) = Int(R
6、nd * 7) 随机生产动物图标 Next Next For i = 0 To 7 For j = 0 To 7 画图标 picGrid.PaintPicture PC1.GraphicCell(Grid(i, j), i * 34, j * 34 Next Next For i = 0 To 6 picScore.PaintPicture PC3.GraphicCell(i), 0, i * 34 显示成绩区的图标NextCall ShowScoreProgressBar1.Value = 120Mode = 3End SubPrivate Sub ShowScore() 显示总成绩 Dim
7、 i As Integer For i = 0 To 7 ShowNum 34, i * 34 + 5, Format(Score(i), 000) NextEnd SubPrivate Sub ShowNum(x As Integer, y As Integer, s As String) Dim i As Integer For i = 1 To Len(s) picScore.PaintPicture PC4.GraphicCell(CInt(Mid(s, i, 1), x + 18 * (i - 1), y NextEnd Sub(3)实现已完成动物图标搜索Private Sub Ex
8、change(x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer) Dim e As Integer e = Grid(x1, y1) Grid(x1, y1) = Grid(x2, y2) Grid(x2, y2) = e Call ReDraw(x1, y1) Call ReDraw(x2, y2)End SubPrivate Function Compare() As Integer Dim k As Integer, n As Integer Dim kind As Integer, num As Integer Dim
9、 i As Integer, j As Integer Erase Meet 横向搜索 For i = 0 To 7 num = 1 kind = Grid(i, 0) For j = 1 To 7 If Grid(i, j) = kind Then num = num + 1 Else If num = 3 Then For k = j - 1 To j - num Step -1 Meet(i, k) = True Next End If kind = Grid(i, j) num = 1 End If Next If num = 3 Then For k = j - 1 To j - n
10、um Step -1 Meet(i, k) = True Next End If Next(4)记录成绩num = 0 For i = 0 To 7 For j = 0 To 7 If Meet(i, j) Then num = num + 1 Score(Grid(i, j) = Score(Grid(i, j) + 1 End If Next Next Score(7) = Score(7) + num 总成绩(5)附加模块Option ExplicitOption Base 0Public Grid(7, 7) As Integer 每格的动物Public Meet(7, 7) As B
11、oolean 判断组成Public Score(7) As Integer 每种动物的数量Public SelX1 As Integer 被点击的两个位置Public SelY1 As IntegerPublic SelX2 As IntegerPublic SelY2 As IntegerPublic Mode As Integer-1,禁止状态0,正常状态,1:被选一个,2:被选两个,互换位置前,3:互换位置后,以一种颜色显示成组4:以第二种颜色显示成组的图标.5:使用白色绘制,显示空缺6:消去成组,填补空白.Public Declare Function sndPlaySound Lib
12、 winmm.dll Alias sndPlaySoundA (ByVal lpszSoundName As String, ByVal uFlags As Long) As LongPublic Const SND_ASYNC = &H1 play asynchronouslyPublic Const SND_LOOP = &H8 loop the sound until next sndPlaySoundPublic Const SND_MEMORY = &H4 lpszSoundName points to a memory filePublic Const SND_NODEFAULT
13、= &H2 silence not default, if sound not foundPublic Const SND_NOSTOP = &H10 dont stop any currently playing soundPublic Const SND_NOWAIT = &H2000 dont wait if the driver is busy四 总结(1)首先,这个程序的主代码不完全是我自己编的,很多很大的内容都是参考的学长的,同时也参考书上给的提示,包括了picture clip控件,progress bar控件以及MM control多媒体控件。研习程序的过程中,我碰到了很多困难,即使参照着已有的程序,但是程序过于复杂,知识掌握的不够透彻,我又通过对书本的进一步学习与研究,终于对这个程序有了足够的认识。使一些困难得到了解决。 (2)程序每次加载都会出错,虽然能够运行,但总是找不到问题出在哪儿,这是这个程序最致命的缺点。 (3)本程序使用了时间控制且只能是2min,很不灵活。可使游戏时间可调,如总成绩达到某个数值或所有动物个数都超过某个数目时增加时间。 (4)可增加用户登录、成绩记录、查询和排行榜等功能。