怎样用vb制作1个关于人身安全的vb小游戏制作

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
编程高手之路--vb入门和游戏编写--趣味撞球小游戏的编写
下载积分:100
内容提示:编程高手之路--vb入门和游戏编写--趣味撞球小游戏的编写
文档格式:DOC|
浏览次数:52|
上传日期: 09:11:08|
文档星级:
全文阅读已结束,如果下载本文需要使用
 100 积分
下载此文档
该用户还上传了这些文档
编程高手之路--vb入门和游戏编写--趣味撞球小游戏的编
官方公共微信用VB编写一个汉诺塔小游戏
&&汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智游戏。上帝创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定:在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘,最后把这些圆盘放在第三根柱子上,并且从下往上是圆盘大小依次减小的。当所有的圆盘都从第一根柱子移到第三根柱子上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
&不管这个传说的可信度有多大,如果考虑一下把64个圆盘,由一根柱子上移到另一根柱子上,并且始终保持上小下大的顺序。这需要多少次移动呢?这里就需要用到递归的方法。假设有n个圆盘,移动次数是f(n).显然f(1)=1,f(2)=3,f(3)=7,且f(n+1)=2*f(n)+1。化解得f(n)=2n-1。鉴于264-1这个数字太大,本次就只用5个圆盘,这样既让人一目了然,而且也起到益脑的作用。
二、简要分析
汉诺塔游戏的主要目的是借助B柱子,将A柱子的五个盘子转移到C柱子上,要求每次移动必须从最上层盘子开始,而且必须始终保证小号盘子在大号盘子的上方。
程序的主要技术点,除了对上述要求的实现外,还要考虑到鼠标拖放盘子以及盘子的定位、排序等内容。在设计初期,我首先考虑的是采用单击选定,再次单击定位的方式来移动盘子,但这样做必须要让程序记住谁是活动盘子,而且操作的直观性较差。所以,最后我选择了利用鼠标事件来模拟拖动盘子的动作。
而对于盘子移动后的定位问题,如果单纯靠坐标计算来显示,工作量是非常大的。所以,我在本例中应用了“一个萝卜一个坑”的简单原理,将目标位置提前放置好Image控件,这样一来,盘子的移动和定位操作都成了对目标控件属性的控制,利用在适当的区域有效,这样不会因为位置的不精确而带来操作不方便,这样就让这个小游戏处理起来变得十分方便。
三、功能描述
本程序实现了利用一个中间帮助柱子B,将A柱子上的五个盘按照游戏规则移动到C柱子上。其中利用了函数的递归调用,图片的移动事件,鼠标事件,以及图片的载入、控件数组等相关知识。
(1)用户可以随时点击“重新开始”按钮重新开始这个游戏;
(2)用户可以随时点击“退出”按钮退出这个游戏。
Private Sub Command1_Click()
&& Label4.Caption
= 0 '移动步骤清零
&& For i = 0 To
Image1(i).Picture = LoadPicture(App.Path & "\p"
& i & ".jpg") '在当前目录下载入图片
Image2(i).Picture = LoadPicture("") '没有图片载入
Image3(i).Picture = LoadPicture("") '没有图片载入
SortImg(Image1, 1080) '将在A线上的盘子对齐
Private Sub Command2_Click()
Private Sub Form_Load()
WindowsMediaPlayer1.URL = (App.Path
& "\月光奏鸣曲.MP3")
& Call Command1_Click
Private Sub Image1_MouseUp(Index As Integer, Button
As Integer, Shift As Integer, X As Single, Y As Single)
& If Index & 4 Then
If Image1(Index + 1).Picture && 0
Then Exit Sub '移动操作不合法
& If X &= 2000 And
X &= 3200 Then
MoveImg(Image1, Image2, Index)&&
'从A向B转移
SortImg(Image2, 3420)&
'将在B线上的盘子以3420为区域中心线X值对齐
& If X &= 4300 And
X &= 5700 Then
MoveImg(Image1, Image3, Index) '从A向C转移
SortImg(Image3, 5760)
Private Sub Image2_MouseUp(Index As Integer, Button
As Integer, Shift As Integer, X As Single, Y As Single)
& If Index & 4 Then
If Image2(Index + 1).Picture && 0
Then Exit Sub '移动操作不合法
& If X &= 2100 And
X &= 3400 Then
Call MoveImg(Image2, Image3,
Index)&& '从B向C转移
Call SortImg(Image3, 5760)&
'将在C线上的盘子以5760为区域中心线X值对齐
& If X &= -2700 And
X &= -1200 Then
Call MoveImg(Image2, Image1,
Index)&& '从B向A转移
Call SortImg(Image1, 1080)
Private Sub Image3_MouseUp(Index As Integer, Button
As Integer, Shift As Integer, X As Single, Y As Single)
&&If Index
& 4 Then If Image3(Index + 1).Picture
&& 0 Then Exit Sub '移动操作不合法
& If X &= -2700 And
X &= -1200 Then
Call MoveImg(Image3, Image2,
Index)&& '从C向B转移
Call SortImg(Image2, 3420)&
'将在B线上的盘子以3420为区域中心线X值对齐
& If X &= -5000 And
X &= -3400 Then
Call MoveImg(Image3, Image1,
Index)&& '从C向A转移
Call SortImg(Image1, 1080)
Private Sub SortImg(Img As Object, IntCenter As
& For i = 0 To 4
&&& Img(i).Left
= IntCenter - Img(i).Width / 2
& For i = 0 To 4
If Image1(i).Picture && 0 Then Exit
If Image2(i).Picture && 0 Then Exit
WindowsMediaPlayer1.Controls.pause
& If i & 4 Then
MsgBox "恭喜:你成功了!", vbOKOnly + vbInformation, "胜利"
Private Sub MoveImg(SImg As Object, DImg As Object,
Idx As Integer)
& For i = 0 To 4
DImg(i).Picture = 0 Then '当前区域有位置
If i & 0 Then
If SImg(Idx).Width & DImg(i - 1).Width Then
'符合游戏条件(上小下大)
&&&&&&&&&&
DImg(i).Picture = SImg(Idx).Picture '移动盘子
&&&&&&&&&&
&&&&&&&&&&
Exit Sub '移动操作不合法
DImg(i).Picture = SImg(Idx).Picture '向区域最下方移动盘子
SImg(Idx).Picture = LoadPicture("")
Label4.Caption = Label4.Caption + 1 '统计操作步数
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

参考资料

 

随机推荐