VB课程设计拼图游戏

上传人:鲁** 文档编号:498531493 上传时间:2023-11-05 格式:DOC 页数:11 大小:56KB
返回 下载 相关 举报
VB课程设计拼图游戏_第1页
第1页 / 共11页
VB课程设计拼图游戏_第2页
第2页 / 共11页
VB课程设计拼图游戏_第3页
第3页 / 共11页
VB课程设计拼图游戏_第4页
第4页 / 共11页
VB课程设计拼图游戏_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《VB课程设计拼图游戏》由会员分享,可在线阅读,更多相关《VB课程设计拼图游戏(11页珍藏版)》请在金锄头文库上搜索。

1、-Visual Basic课程设计报告题目1:拼图游戏 难度: *指导教师:*:*:专业:班级:学院:日期:. z.-1 题目简介1此题目要求设计一个拼图游戏程序,要求如下: 指定一幅完整的图片,将其分割成m*n个小图块,打乱后重新排列,其中有一个没有图片的“空当 如图2使用鼠标单击与空当相邻的图块可以与其互换位置。3利用空当位置使原图恢复原来的顺序,并记下玩家的移动步数,游戏过程中可以查看参考图以方便顺利通过游戏。2、设计思路与总体方案本程序包含五个窗体模块,其中以窗体frmMain的作用最为主要,该模块负责加载选定的图片并按所选的行列数分割,进展随机排列并加载空当,实现鼠标点击时其中的图块

2、时与相邻的空当进展替换,实现拼图完成这个完毕动作。该模块中主要的变量有Rows , Cols ,Arrange() ,space,started,steps showrefFunction isOK()其中,Rows , Cols ,showref这三个为全局变量,分别表示行数 ,列数,以及是否显示参考图因此showref为逻辑型变量其余变量为模块级变量,started也为逻辑变量,负责显示游戏是否已开场,Arrange()数组表示联系图像控件与数组的关系,space显示空当的位置,steps来记录玩家所走的步数,Function isOK()用来检验拼图是否已经完成的函数,为逻辑性变量。除外

3、,过程变量tt0 to2, b0 to 2,s , r , c用来写入或读取排行榜中的记录。其中,还设有菜单栏,通过monDialog控件负责实现“翻开图片与“配置颜色对话框,并同时还拥有翻开frmRecod排行榜窗体模块的工能。主要代码游戏初始时加载图片:Dim i As IntegerDim n As IntegerCD.Filter = 图片文件(*.JPG,*.BMP)|*.jpg;*.bmpCD.DialogTitle = 翻开图片CD.InitDir = App.Path & picsCD.ShowOpen 显示指定图片对话框If CD.FileName = Then E*it S

4、ubIf started ThenFor i = 1 To Rows * Cols - 1 去除已有的控件数组元素Unload imgPT(i)Ne*timgPT(0).Picture = LoadPicture()If showref Then frmRef.Image1.Picture = LoadPicture()ElseMe.Picture = LoadPicture()End IffrmDivide.Show 1, Me 显示指定行列对话框PC.Picture = LoadPicture(CD.FileName)PC.Rows = RowsPC.Cols = Colsn = Rows

5、 * ColsimgPT(0).Width = 320 / Cols 窗体以像素为单位imgPT(0).Height = 240 / Rows窗体frmDivide载入图片后弹出此窗口,负责提示玩家进展图片行列数的选择,用以调节游戏等级,可分为3*3,3*4, 4*3 ,4*4 这四种模式。玩家通过两个VScroll控件调节Te*tBo*中的行列数,通过Te*t1.Te*t = VScroll1.ValueTe*t2.Te*t = VScroll2.ValuefrmMain.Rows = Te*t1.Te*t,frmMain.Cols = Te*t2.Te*t赋值语句来与frmMain模块进展

6、数值传递。窗体frmRef通过窗体frmMain中的“显示参考图按钮来显示玩家游戏时的所需的参考图,frmMain通过 showref = Not showref If showref Then Load frmRef frmRef.Image1.Picture = PC.Picture frmRef.Top = Me.Top frmRef.Left = Me.Left + Me.Width frmRef.Show cmdShowRef.Caption = 关闭参考图 Else Unload frmRef cmdShowRef.Caption = 显示参考图来翻开这个模块以显示参考图,通过对逻

7、辑变量showref的非运算加载该模块,设置高度与宽度。窗体 frmRecord 用来显示玩家通过游戏后所处的名次,移动步数,难度行数*列数,并且只有名次在大于系统默认前三名的状况下才能被录入排行榜,否则会弹出“完成,你未进入前三名!的提醒框。代码如下:Open App.Path & Record.t*t For Input As *1 For l = 0 To 2Input *1, tt(l), b(l), r(l), c(l) 依次读入步数,行数,列数Ne*tClose *1If s = tt(1) Then tt(2) = s: b(2) = InputBo*(请输入:, 输入框, 无名

8、侠): r(2) = Rows: c(2) = Cols: MsgBo* 完成,恭喜 & b(2) & 你成为第三名!, vbInformationIf s = tt(0) Then tt(2) = tt(1): tt(1) = s: b(2) = b(1): b(1) = InputBo*(请输入:, 输入框, 无名侠): r(2) = r(1): r(1) = Rows: c(2) = c(1): c(1) = Cols: MsgBo* 完成,恭喜 & b(1) & 你成为第二名!, vbInformationIf s tt(0) Then tt(2) = tt(1): tt(1) = t

9、t(0): tt(0) = s: b(2) = b(1): b(1) = b(0): b(0) = InputBo*(请输入:, 输入框, 无名侠): r(2) = r(1): r(1) = r(0): r(0) = Rows: c(2) = c(1):c(1)=c(0):c(0)=Cols: MsgBo* 完成,恭喜 & b(0) & 你成为第一名!, vbInformation通过以上的IF语句先比拟出步数在系统默认下的的名次,再通过赋值语句进展排名,同时将,行数,列数也进展赋值处理同步于步数的名次变化,优点是不需建立多维数组进展储存Open App.Path & Record.t*t F

10、or Output As *1For l = 0 To 2Write *1, tt(l), b(l), r(l), c(l)Ne*tClose *1ElseMsgBo* 完成,你未进入前三名!, vbInformationEnd If窗体 frmHelp用以显示对本游戏的提示,用以解释游戏无法顺利进展的原因,详情请见4、设计存的缺乏分析。主要代码:Image2(0).Picture = LoadPicture(App.Path & Resourceab.jpg)加载图片3、对重点难点问题的解决窗体模块frmMain为主要载体,也是该程序的难点所在,其中的PictureClip控件在我看来是最主

11、要的,他负责管理翻开的图片并将其分割为指定行列的小图块。monDialog控件负责实现“翻开图片与“配置颜色对话框。Image控件数组用于显示图片,其中他的Stretch属性设计为True,可以使图片自动放大或缩小,方便玩家自由选择图片进展游戏。主窗体重点难点1随机排列图片解决方案:利用j = Int(Rnd * n)产生的随机数0n-1同时通过Arrange赋值给PC.GraphicCell,来传递给imgPT进展图片的随机分布。例如:Arrange3=9imgPT(i).Picture = PC.GraphicCell(Arrange(3)因此,该随机排列图片过程的代码如下:Private

12、 Sub Rnd_Arrange() Dim i As Integer, j As IntegerDim n As Integern = Rows * ColsReDim Arrange(0 To n - 1)For i = 0 To n - 1Arrange(i) = -1 用-1标记未赋值的元素Ne*ti = 0Doj = Int(Rnd * n) 产生0n-1的随机数,并用Arrange赋值If Arrange(j) = -1 ThenArrange(j) = ii = i + 1If i = n Then E*it DoEnd IfLoopFor i = 1 To n - 1Load

13、imgPT(i)Ne*tFor i = 0 To n - 1If Arrange(i) n - 1 Then将图块赋给控件数组元素imgPT(i).Picture = PC.GraphicCell(Arrange(i)ElseimgPT(i).Picture = LoadPicture()space = I 将“打乱前图片右下角的图块设为空End IfNe*tEnd Sub难点2当你单击图片时判断是否与空当相邻并进展移动。解决方法:计算这两者分别所处的行列,利用IF语句进展判断,通过改变Image的Inde*值来改变所显示的图片,而非移动这个控件。该过程代码如下:c1 = space Mod Cols 计算空档的行列 r1 = space Cols c2 = Inde* Mod Cols 计算点击的行列 r2 = Inde* ColsIf Abs(c1 - c2) = 1 And Abs(r1 - r2) = 0 Or Abs(c1 - c2) = 0 And Abs(r1 - r2) = 1 Then 判断是否相邻 n = Arrange(Inde*) Arrange(Inde*) = Arrange(space) Arrange(space) = n imgPT(space) = PC.GraphicCell(Arrange(spa

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号