VB课程设计:拼图游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Visual Basic课程设计报告

题目1:拼图游戏难度:***

指导教师:

姓名:

学号:

专业:

班级:

学院:

日期:

1.题目简介

(1)本题目要求设计一个拼图游戏程序,要求如下:

指定一幅完整的图片,将其分割成m*n个小图块,打乱后重新排列,其中有一个没有图片的“空当”如图————

(2)使用鼠标单击与空当相邻的图块可以与其互换位置。

(3)利用空当位置使原图恢复原来的顺序,并记下玩家的移动步数,游戏过程中可以查看参考图以方便顺利通过游戏。

2、设计思路与总体方案

本程序包含五个窗体模块,其中以窗体frmMain的作用最为主要,该模块负责加载选定的图片并按所选的行列数分割,进行随机排列并加载空当,实现鼠标点击时其中的图块时与相邻的空当进行替换,实现拼图完成这个结束动作。

该模块中主要的变量有Rows ,Cols ,Arrange() ,space,started,steps showref Function isOK()

其中,Rows ,Cols ,showref这三个为全局变量,分别表示行数,列数,以及是否显示参考图(因此showref为逻辑型变量)其余变量为模块级变量,started也为逻辑变量,负责显示游戏是否已开始,Arrange()数组表示联系图像控件与数组的关系,space显示空当的位置,steps来记录玩家所走的步数,Function isOK()用来检验拼图是否已经完成的函数,为逻辑性变量。除外,过程变量tt(0 to2),b(0 to 2),s ,r ,c用来写入或读取排行榜中的记录。

其中,还设有菜单栏,通过CommonDialog控件负责实现“打开图片”与“配置颜色”对话框,并同时还拥有打开frmRecod(排行榜窗体模块)的工能。

主要代码(游戏初始时加载图片):

Dim i As Integer

Dim n As Integer

CD.Filter = "图片文件(*.JPG,*.BMP)|*.jpg;*.bmp"

CD.DialogTitle = "打开图片"

CD.InitDir = App.Path & "\pics"

CD.ShowOpen (显示指定图片对话框)If CD.FileName = "" Then Exit Sub

If started Then

For i = 1 To Rows * Cols - 1 '(清除已有的控件数组元素)

Unload imgPT(i)

Next

imgPT(0).Picture = LoadPicture()

If showref Then frmRef.Image1.Picture = LoadPicture()

Else

Me.Picture = LoadPicture()

End If

frmDivide.Show 1, Me ' (显示指定行列对话框)PC.Picture = LoadPicture(CD.FileName)

PC.Rows = Rows

PC.Cols = Cols

n = Rows * Cols

imgPT(0).Width = 320 / Cols ('窗体以像素为单位)

imgPT(0).Height = 240 / Rows

窗体frmDivide载入图片后弹出此窗口,负责提示玩家进行图片行列数的选择,用以调节游戏等级,可分为3*3,3*4,4*3 ,4*4 这四种模式。玩家通过两个VScroll控件调节TextBox中的行列数,通过

Text1.Text = VScroll1.V alue

Text2.Text = VScroll2.V alue

frmMain.Rows = Text1.Text,

frmMain.Cols = Text2.Text

赋值语句来与frmMain模块进行数值传递。

窗体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 = "显示参考图"

来打开这个模块以显示参考图,通过对逻辑变量showref的非运算加载该模块,设置高度与宽度。

窗体frmRecord用来显示玩家通过游戏后所处的名次,姓名,移动步

数,难度(行数X列数),并且只有名次在大于系统默认前三名的状况下才能被录入排行榜,否则会弹出“完成,你未进入前三名!”的提醒框。

代码如下:

Open App.Path & "\Record.txt" For Input As #1

For l = 0 To 2

Input #1, tt(l), b(l), r(l), c(l) (依次读入步数,姓名,行数,列数)

Next

Close #1

If s < tt(2) Then (只有你的成绩大于系统内第三名时IF语句才会启动,进行信息录入)

Kill App.Path & "\Record.txt"

If s >= tt(1) Then tt(2) = s: b(2) = InputBox("请输入姓名:", "输入框", "无名侠"): r(2) = Rows: c(2) = Cols: MsgBox "完成,恭喜" & b(2) & "你成为第三名!", vbInformation

If s < tt(1) And s >= tt(0) Then tt(2) = tt(1): tt(1) = s: b(2) = b(1): b(1) = InputBox("请输入姓名:", "输入框", "无名侠"): r(2) = r(1): r(1) = Rows: c(2) = c(1): c(1) = Cols: MsgBox "完成,恭喜" & b(1) & "你成为第二名!", vbInformation

If s < tt(0) Then tt(2) = tt(1): tt(1) = tt(0): tt(0) = s: b(2) = b(1): b(1) = b(0): b(0) = InputBox("请输入姓名:", "输入框", "无名侠"): r(2) = r(1): r(1) = r(0): r(0) = Rows: c(2) = c(1):c(1)=c(0):c(0)=Cols: MsgBox "完成,恭喜" & b(0) & "你成为第一名!", vbInformation

(通过以上的IF语句先比较出步数在系统默认下的的名次,再通过赋值语句进行排名,同时将姓名,行数,列数也进行赋值处理同步于步数的名次变化,优点是不需建立多维数组进行储存)

Open App.Path & "\Record.txt" For Output As #1

For l = 0 To 2

Write #1, tt(l), b(l), r(l), c(l)

Next

Close #1

Else

MsgBox "完成,你未进入前三名!", vbInformation

End If

窗体frmHelp用以显示对本游戏的提示,用以解释游戏无法顺利进行的原因,详情请见(4、设计中尚存的不足分析)。

主要代码:

Image2(0).Picture = LoadPicture(App.Path & "\Resource\ab.jpg")

(加载图片)

相关文档
最新文档