VB课程设计报告Word文件下载.docx
《VB课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《VB课程设计报告Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。
二具体功能
(1)程序启动时,游戏区随机分布各类动物的图标。
图标共有7种,如图
依次是长颈鹿,猩猩,大熊猫,河马,鳄鱼和大象。
每种动物有两种表情,上面一行是未捕获时的表情,下面一行是被捕获时的表情。
程序启动时,有可能出现同一行或同一列上有三个以上同种动物相邻,这种情况也算成绩。
(2)用户使用鼠标单击图标时,被单击的图标变红,交换位置之后,图标的颜色变为正常。
(3)如果用户单击了不相邻的图标,程序发出“错误音”且不变换位置。
如果单击的是相邻图标但交换位置之后并不能使三个以上同种图标相邻,则会交换回原来的位置同时发出“错误音”。
如果交换位置后出现相邻图标,所有满足相邻关系的图标以被捕获的表情闪烁(动物张嘴)后消失,形成的空位由上方的图标下落后填补,最上面形成的空位由随机生成的图标填补。
消失的图标个数会作为成绩加到右边的成绩显示区,同时播放悦耳的“成功声”。
(4)很多情况下,往往会有多个相邻关系同时形成。
交叉或在不同位置同时形成多个相邻关系。
所以,程序即时判断游戏区形成的所有相邻关系,并进行处理和加分。
有时,“消掉”相邻图标,上方的图标下落后,使得原来不相邻的图标成了相邻关系,这时应判断和处理整个游戏区的图标相邻关系,直到所有的图标都不构成三三相邻的关系。
(5)程序游戏时间共2分钟,游戏过程中每秒钟发出一声时钟的滴答声,并且时间显示区的蓝条越来越短。
游戏时间到时,发出闹钟的“闹铃声”,游戏区所有图标的背景变为红色,并显示出“Gameover”字样。
这时游戏结束,鼠标不能再单击图标。
如图
(6)为了清楚的表达图标的变换,图标的消去和下落等动作,程序使用了延时。
例如,单击两个相邻图标后,隔200ms才交换它们的位置,判断相邻后,隔200ms才消去,再隔200ms才将上面的图标下移……在延时过程中,用户的鼠标单击是无效的,这时鼠标指针变为
;
当允许单击时,鼠标指针变为
。
(7)对于本游戏,要取得高分,除了应具有敏锐的洞察力和快速的反应力,还要有好运气。
因为,有时一次变换位置后会引起“连锁反应”得很多分,而有时无论怎样交换位置都不能形成三三相邻关系
三设计实现
(1)为了方便数据的管理和编程,定义三个全局数组
OptionBase0
PublicGrid(7,7)AsInteger'
游戏区的动物图标分布
PublicMeet(7,7)AsBoolean'
保存形成相邻关系的位置
PublicScore(7)AsInteger'
已捕获的每种动物的数量
(2)实现动物图标的产生功能
PrivateSubForm_Load()
DimiAsInteger,jAsInteger
Randomize·
’初始化随机数
Fori=0To7
Forj=0To7
Grid(i,j)=Int(Rnd*7)'
随机生产动物图标
Next
Next
Forj=0To7'
画图标
picGrid.PaintPicturePC1.GraphicCell(Grid(i,j)),i*34,j*34
Fori=0To6
picScore.PaintPicturePC3.GraphicCell(i),0,i*34
'
显示成绩区的图标
Next
CallShowScore
ProgressBar1.Value=120
Mode=3
EndSub
PrivateSubShowScore()'
显示总成绩
DimiAsInteger
ShowNum34,i*34+5,Format(Score(i),"
000"
)
PrivateSubShowNum(xAsInteger,yAsInteger,sAsString)
Fori=1ToLen(s)
picScore.PaintPicturePC4.GraphicCell(CInt(Mid(s,i,1))),x+18*(i-1),y
(3)实现已完成动物图标搜索
PrivateSubExchange(x1AsInteger,y1AsInteger,x2AsInteger,y2AsInteger)
DimeAsInteger
e=Grid(x1,y1)
Grid(x1,y1)=Grid(x2,y2)
Grid(x2,y2)=e
CallReDraw(x1,y1)
CallReDraw(x2,y2)
PrivateFunctionCompare()AsInteger
DimkAsInteger,nAsInteger
DimkindAsInteger,numAsInteger
EraseMeet
'
横向搜索
num=1
kind=Grid(i,0)
Forj=1To7
IfGrid(i,j)=kindThen
num=num+1
Else
Ifnum>
=3Then
Fork=j-1Toj-numStep-1
Meet(i,k)=True
EndIf
kind=Grid(i,j)
(4)记录成绩
num=0
Forj=0To7
IfMeet(i,j)Then
Score(Grid(i,j))=Score(Grid(i,j))+1
Score(7)=Score(7)+num'
总成绩
(5)附加模块
OptionExplicit
PublicGrid(7,7)AsInteger'
每格的动物
PublicMeet(7,7)AsBoolean'
判断组成
PublicScore(7)AsInteger'
每种动物的数量
PublicSelX1AsInteger'
被点击的两个位置
PublicSelY1AsInteger
PublicSelX2AsInteger
PublicSelY2AsInteger
PublicModeAsInteger
-1,禁止状态
0,正常状态,1:
被选一个,2:
被选两个,互换位置前,
3:
互换位置后,以一种颜色显示成组
4:
以第二种颜色显示成组的图标.
5:
使用白色绘制,显示空缺
6:
消去成组,填补空白.
PublicDeclareFunctionsndPlaySoundLib"
winmm.dll"
Alias"
sndPlaySoundA"
(ByVallpszSoundNameAsString,ByValuFlagsAsLong)AsLong
PublicConstSND_ASYNC=&
H1'
playasynchronously
PublicConstSND_LOOP=&
H8'
loopthesounduntilnextsndPlaySound
PublicConstSND_MEMORY=&
H4'
lpszSoundNamepointstoamemoryfile
PublicConstSND_NODEFAULT=&
H2'
silencenotdefault,ifsoundnotfound
PublicConstSND_NOSTOP=&
H10'
don'
tstopanycurrentlyplayingsound
PublicConstSND_NOWAIT=&
H2000’don'
twaitifthedriverisbusy
四总结
(1)首先,这个程序的主代码不完全是我自己编的,很多很大的内容都是参考的学长的,同时也参考书上给的提示,包括了pictureclip控件,progressbar控件以及MMcontrol多媒体控件。
研习程序的过程中,我碰到了很多困难,即使参照着已有的程序,但是程序过于复杂,知识掌握的不够透彻,我又通过对书本的进一步学习与研究,终于对这个程序有了足够的认识。
使一些困难得到了解决。
(2)程序每次加载都会出错,虽然能够运行,但总是找不到问题出在哪儿,这是这个程序最致命的缺点。
(3)本程序使用了时间控制且只能是2min,很不灵活。
可使游戏时间可调,如总成绩达到某个数值或所有动物个数都超过某个数目时增加时间。
(4)可增加用户登录、成绩记录、查询和排行榜等功能。