简介:适合不知如何写盘子等于方面的相关专业大学硕士和本科毕业论文以及关于盘子等于论文开题报告范文和相关职称论文写作参考文献资料下载。
刘晓章
(南京高等职业技术学校 江苏南京 210019)
摘 要:本设计是利用VB中的数组方法,来设计出一个汉诺塔的交互式游戏程序,该程序能让用户选择想移动的圆盘数量,自动生成不同大小和颜色的圆盘,用户可以用鼠标进行游戏操作,当操作错误或者犯规时有相应的提示.
关键词:数组 汉诺塔 移动 圆盘
中图分类号:TP311.11 文献标识码:A 文章编号:1674-098X(2011)10(c)-0012-02
1. 引言
在很多关于程序设计的书*绍到递归的章节时都要讲到“汉诺塔”的例子,大意是在一块板上有三根针第一根针上从小到大套有64个圆盘,每次只能移动一个圆盘,而且只能将小的盘片放在大的盘片之上,通过第二根针过渡,将所有圆盘移至第三根针即为成功.在各书中是用递归的算法来解决“汉诺塔”的实现步骤的.如何利用Visual Basic来设计可供学生进行真正操作、玩的游戏呢?我通过探索和设计,用数组的方法实现了互动汉诺塔游戏的制作.
2.具体的设计思路
因为盘片的数量增加会导致玩成功的时间急剧增加,按照全部步骤正确,以每秒移动一个盘片计算,要玩完64个盘片至少要264-1次,合5849亿年之久.所以,要首先让用户选择要玩的圆盘总数n,根据n,设计出一个二维数组a(3,n),第一维为针(柱子)数,第二维为盘数.数组元素的值为布尔型,且对应于盘的位置.如a(2,5)为true则表示在第二个针上,第5个盘在其上存在.如a(3,1)为false则表示在第三个针上,第1个盘子不存在.
程序开始时,根据用户输入的准备移动的圆盘总数n,用控件数组自动生成n个圆盘,并且随机产生其颜色.开始后画在第一个柱子上.
子程序d_Click(Index As Integer),是准备拿取圆盘,判断如果该针上有圆盘,就进行移盘操作.
子程序L_MouseMove(Index As Integer,Button As Integer,Shift As Integer,X As Single,Y As Single)则是当选好盘子后,到放置盘片的过程中,让盘子跟随鼠标光标一起移动.
子程序xz(index),判断是选取(拿)圆盘,还是进行放置圆盘的工作,取盘子时该针上有没有盘子,放盘子时要放的盘子是否是该针上最小的盘片等.并进行相应的参数设置.
子程序md(Index),是进行移动圆盘的操作,当在某针上可以放置所移来的圆盘时,则进行该程序,并将数组的相关数组元素的值进行修改,其后将该盘画在此针上.
子程序downd(j),是进行放盘子的操作,主要是判断现在该针上共有几个圆盘,并将现在移动过来的盘子放在最上面,并画出.
其它还设计了一些关于游戏成功、帮助、显示帮助、游戏复位等的子程序.
3. 主要事件过程代码
Dim n As Integer&,acute,n为要移动的盘子总数
Dim a() As Boolean&,acute,两维数组,第一维针号,第二维盘号,T为盘在针上,F为盘不在针上.
Dim S As Boolean&,acute,s为判断是取盘子还是放盘子
Dim di As Integer&,acute,di为全局记忆现在操作的是第几个盘子
Dim pi As Integer &,acute,pi为全局记忆刚才操作的是第几个柱子
Private Sub Cmdbegin_Click()
n等于InputBox("请输入你想要移动的盘子总数,"&,vbCrLf&,"最好在2个到8个之间.","汉诺塔游戏开始",4)
ReDim a(3,n)
Fori等于 1 Ton&,acute,初始四盘在1针上
a(1,i)等于True
Next i
S等于True&,acute,s为T时准备选取盘子
Randomize
For i等于1 Ton&,acute,在第一个针上画出n个盘子
Load d(i)
d(i).Height等于240
d(i).Width等于(i+2)*240
d(i).FillColor等于RGB(Rnd*255,Rnd *255,Rnd*255)
d(i).Top等于(28-(n-i+1)*2)*120
d(i).Left等于13.5*120-d(i).Width/2
d(i).ZOrder 0
d(i).Visible等于True
Next i
End Sub
Private Sub L_Click(Index As Integer) &,acute,L(i)为3个柱子的鼠标点选区,只能选取最上的一个盘
xz(Index)&,acute,调用选择子程序
End Sub
Private Sub d_Click(Index As Integer) &,acute,d(i)为n个盘子的控件数组
For i等于1 To 3
If a(i, Index) Then xz (i): Exit Sub
Next i
End Sub
Private Sub md(Index)&,acute,移盘子程序
a(Index,di)等于True&,acute,数组中新位置置盘
a(pi,di)等于False&,acute,数组中老位置去盘
downd Index
S等于Not S&,acute,移盘过程结束,s置为T,准备下次的选盘
End Sub
Private Sub xz(Index)&,acute,选择子程序,Index为选的第几个柱子
If S Then&,acute,s为T,则进行选取盘子的过程
flag等于True&,acute,flag为该柱子上是否有盘子,T为没有盘子,F为有盘子
For i等于1 To n
If a(Index,i) Then flag等于False
Next i
If flag Then MsgBox"请选有盘子的柱子!":Exit Sub
S等于Not S&,acute,选取成功,准备进行放盘子的操作
For i等于1 To n&,acute,只能取该柱子上最上面的一个盘子,判断之
If a(Index,i) Then
pi等于Index&,acute,记住选择的柱子号
di等于i&,acute,记住选择的盘子号
Exit For
End If
Next i
Else&,acute,s为F,则进行放盘子的操作
For i 等于1 To n&,acute,i是从上往下看,现准备放盘的柱子上有几号盘子
If a(Index,i)Then&,acute,找到了从上往下的第一个盘子
If i>,di Then&,acute,最上的盘子比要移的盘子大,则移盘可以进行
md(Index)
cg
Else
MsgBox"只能小盘放在大盘上!"
downd pi&,acute,将盘子放回原来的针上
S等于True&,acute,重新进行选盘的过程
End If
Exit Sub
End If
Next i
md (Index)
cg
End If
End Sub
Private Sub L_MouseMove(Index As Integer,Button As Integer, Shift As Integer,X As Single,Y As Single)
If Not S Then d(di).Move L(Index).Left + X - d(di).Widt/2,L(Index).Top +Y+10&,acute,盘子跟着鼠标走
End Sub
Private Sub downd(j)&,acute,j为放盘的针号
d(di).Move(13.5+(j-1)*21)*120 - d(di).Width/2,28*120-240&,acute,在新柱子上将盘子下沉至底
For i 等于di+1 To n&,acute,判断新位置上已有盘子数,再将盘子上移到位
If a(j,i)Then d(di).Move d(di).Left, d(di).Top-240
Next i
End Sub
Private Sub cg()&,acute,判断是否最终成功子程序
For i等于1 To n
flag等于True
盘子女人坊:网曝中国游客在泰国餐厅疯抢大虾 盘子当铲子用 160319 通天下
If Not a(3,i) Then flag 等于 False:Exit For
Next i
If flag Then
Beep
MsgBox"你成功了!"
End If
End Sub
4. 游戏操作截图(图1)
总结:此文是一篇盘子等于论文范文,为你的毕业论文写作提供有价值的参考。
盘子女人坊引用文献:
[1] 女人论文范文 女人相关论文范文文献2万字
[2] 京城百工坊举办论文范文 京城百工坊举办类毕业论文的格式范文2万字
[3] 女人论文范文 女人方面硕士论文开题报告范文2万字