小时候经典游戏用VB编的编写实例教程大全全.docx
- 文档编号:6565453
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:41
- 大小:51.85KB
小时候经典游戏用VB编的编写实例教程大全全.docx
《小时候经典游戏用VB编的编写实例教程大全全.docx》由会员分享,可在线阅读,更多相关《小时候经典游戏用VB编的编写实例教程大全全.docx(41页珍藏版)》请在冰点文库上搜索。
小时候经典游戏用VB编的编写实例教程大全全
这些游戏以前玩过吧,快下载看它们是怎么编写的!
目录:
·编写趣味撞球小游戏
·用VB6.0设计简易赛车游戏
·VisualBasic小游戏:
猜英雄
·VB游戏写作技巧
(1)秀图篇
·VB游戏写作技巧
(2)网络篇
·VB贪吃蛇单人版游戏
(一)
·VB贪吃蛇单人版游戏
(二)
·VB贪吃蛇单人版游戏(三)
·VB贪吃蛇单人版游戏(四)
·用VB开发即时战略游戏
正文:
编写趣味撞球小游戏
文章来源:
沐风经典文章作者:
佚名
VisualBasic是一个功能强大的工具,它有一大特点就是易学易用,下面我们就通过写一个“趣味撞球”的程序来初步体会一下。
首先启动VB5,新建一个标准的EXE工程。
此时可以看到,工程包括一个Form1框体。
在Form1边框的右下角按住鼠标左键不放,拖动鼠标把Form1的面积改为适当大小,比如6930×4320。
再在属性框中把Form1的ScaleMode属性改为3-Pixel,表明我们将以像素为我们的坐标计算单位,把Form1的StartUpPosition属性设为2-CenterScreen,使运行时窗体出现在屏幕正中。
现在,在控件面板上选取CommandButton(命令按钮)控件,为Form1添加Command1和Command2两个按钮控件,把它们的大小设为121×25,再在属性框中把Command1的Caption填为“&GO”,把Command2的Caption填为“&QUIT”,并把Command1放到框体的右上角,把Command2放到框体的右下角。
然后,在控件面板上选取Timer(时钟)控件,为Form1添加一个Timer1时钟控件。
再在属性框中把它的Enabled属性改为False,Interval属性改为50,前一个值表示该时钟控件是否激活,后一个值决定该时钟控件产生Timer事件的间隔时间,我们将用它来控制小球的移动频率。
到此为止,我们已经完成了全部的界面设计工作。
接下来要做的全部工作就是填入程序代码了。
DimBallXAsInteger
DimBallYAsInteger
DimAddXAsInteger
DimAddYAsInteger
DimHitXAsInteger
DimWAsInteger
DimHAsInteger
PrivateSubCommand1_Click()
BallX=Int(Rnd
(1)*Form1.ScaleWidth/10)*5+25
BallY=Int((Form1.ScaleHeight)/10)*5
AddX=-5
AddY=-5
Form_Paint
Timer1.Enabled=True
EndSub
PrivateSubCommand2_Click()
End
EndSub
PrivateSubForm_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
X=X-50
IfX<15ThenX=15
IfX>W-105ThenX=W-105
HitX=X
IfTimer1.Enabled=TrueThen
Line(16,H-5)-(W-6,H),&HC0C0C0,BF
Line(HitX,H)-(HitX+100,H-5),0,BF
EndIf
EndSub
PrivateSubForm_Paint()
Cls
W=Int((ScaleWidth-140)/5)*5
H=Int((ScaleHeight-10)/5)*5
BackColor=&HC0C0C0
Line(10,10)-(15,H),0,BF
Line(W-5,10)-(W,H),0,BF
Line(10,10)-(W,15),0,BF
EndSub
PrivateSubTimer1_Timer()
Form1.Circle(BallX,BallY),4,&HC0C0C0
BallX=BallX+AddX
BallY=BallY+AddY
Form1.Circle(BallX,BallY),4,0
IfBallX<=20ThenAddX=-AddX
IfBallY<=20ThenAddY=-AddY
IfBallX>=W-10ThenAddX=-AddX
IfBallY>=H-10Then
IfBallXHitX+100Then
Timer1.Enabled=False
Form_Paint
EndIf
AddY=-AddY
EndIf
EndSub
一旦程序代码输入完毕,你就可以按F5开始执行它,或是在File菜单里选取Make来生成EXE执行文件了,瞧,小球已经在你的屏幕上蹦来蹦去了。
本文来自编程入门网():
用VB6.0设计简易赛车游戏
文章来源:
programfan文章作者:
yaozheng
简单的游戏往往更耐玩,就比如伴我度过高考的赛车游戏:
一切都是方块,所谓的赛车也只是四个方块。
第一步,绘制对象:
用函数drawcar()画赛车,drawway(n)画跑道的第n层。
第二步,接受控制:
Form的KeyPreview属性要设为true,在Form_KeyPress函数中通过改变全局变量cx来控制赛车的位置。
第三步,游戏循环:
作为即时游戏,必须要有一个Timer,并在其事件Timer1_Timer()中绘制所有对象和进行碰撞检测。
本例中,绘图部分写在了Timer1_Timer()中,碰撞测试放在了test()中。
……这也是所有即时游戏所共通的框架。
当然,我们往往还是根据具体的设计作一些变通,发挥一些技巧……比如这里设计的跑道是随机产生的的,这就要通过一点技巧以便既让玩家感到挑战,又不至于出现不可逾越的难关……
下面是全部源代码,窗体上只需放个按钮Command1就行了!
ConstD=100'方格的宽度
ConstBT=3000'跑道底部的y坐标
Diml1(22)AsInteger'每层跑道左边有几个方块
Diml2(22)AsInteger'每层跑道右边有几个方块
DimcxAsSingle'赛车的在x轴的位置
PrivateSubCommand1_Click()
cx=Width/2-3*D/2
cy=Height-D
drawcar
Fori=1To20
l1(i)=0
l2(i)=0
drawway(i)
Nexti
Timer1.Enabled=True
EndSub
PrivateSubdrawcar()
Line(cx,BT-100)-Step(3*D,D),BackColor,BF
Line(cx+D,BT-200)-Step(D,D),BackColor,BF'先擦
Line(cx,BT-100)-Step(3*D,D),RGB(225,0,0),BF
Line(cx+D,BT-200)-Step(D,D),RGB(225,0,0),BF
EndSub
PrivateSubdrawway(n)
Line(Width/2-3*D/2-2*D,BT-n*D)-Step(7*D,D),BackColor,BF
'先擦后画
Line(Width/2-3*D/2-2*D,BT-n*D)-Step(l1(n)*D,D),,BF
Line(Width/2-3*D/2+5*D,BT-n*D)-Step(-l2(n)*D,D),,BF
EndSub
PrivateSubForm_KeyPress(KeyAsciiAsInteger)
SelectCaseKeyAscii
CaseAsc("a"),Asc("A")
cx=cx-D
CaseAsc("s"),Asc("S")
cx=cx+D
EndSelect
EndSub
PrivateSubTimer1_Timer()
Randomize
Fori=1To19
l1(i)=l1(i+1)
l2(i)=l2(i+1)
drawway(i)
Nexti
Do
l1(20)=Int(Rnd*5)
l2(20)=Int(Rnd*5)
LoopUntil((l1(20)+l2(20)<=4)And(l1(20)-l1(19)<=1)And_
(l2(20)-l2(19)<=1)And(l1(19)+l2(20)<=4)And_
(l1(20)+l2(19)<=4))'这里生成新一层跑道,
'注意要筛去玩家不可能通过的情况!
drawway(20)
'以上画出跑道
drawcar
test
EndSub
PrivateSubtest()
If3.5*D-Width/2+cx (1)*DThenTimer1.Enabled=False If3.5*D-Width/2+cx+D (2)*DThenTimer1.Enabled=False If3.5*D-(cx+3*D-Width/2) (1)*DThenTimer1.Enabled=False If3.5*D-(cx+2*D-Width/2) (2)*DThenTimer1.Enabled=False EndSub 本文来自编程入门网(): 相信不少读者都看过央视的《水浒》吧,林冲、武松、李逵等英雄好汉的音容笑貌仿佛还浮现在我的眼前,那么108将中你最喜欢谁呢? 我做了一个小程序来让电脑猜测你的心思,程序界面如图所示。 为了简化问题,我选择了其中的27将,将他们分成3组,每组9人。 如果你最喜欢其中的一个(比如史进),他在第一组出现了,那么就按下按钮“第一组”。 然后这27将会重新排列顺序,你再找史进在哪一组,比如发现他在第二组,就按下按钮“第二组”,画面中的人物次序会再次打乱,再找史进所在组别……最多3次,电脑将会猜出你心中的英雄! 知道了玩法,下面我将介绍程序是如何实现的: 一、猜测的奥妙——推算原理 猜测的原理其实也不复杂,我们来模拟一下猜测的过程大家就清楚了。 程序初始化时是把1~27将随机打乱分别放入PageControl控件的三个选项卡中,每个选项卡放9张图片。 点击一次按钮后其实不是盲目地将顺序打乱,而是进行了筛选,把有用的图片(就是点选的那组的9张图片)筛选出来平均分配到PageControl控件的三个选项卡中,再把不需要的图片集中起来平均分配到PageControl控件的三个选项卡中,最后在各个选项卡中把有用的、无用的图片随机打乱再次重新排列显示出来,从而完成猜测。 用表1来说明: 点击按钮的次数选项卡1选项卡2选项卡3 1333 2111 3000 具体讲,当第一次按下按钮时,表示你相中的图片在其中一个选项卡的9张图片内。 于是把这9张图片均分成3份,每份3张,分别送入3个选项卡,其余的图片就不做考虑了。 当第二次按下按钮时,表示你相中的图片在其中一个选项卡的3张图片内,于是把这3张图片均分成3份,每份1张,分别送入3个选项卡,当第三次按下按钮时,表示你相中的图片在其中一个选项卡的1张图片内,毫无疑问,这张图片就是你相中的图片,于是程序把这张图片显示出来。 打乱重排的算法 在程序中的很多地方要涉及打乱顺序重排的问题,下面我们就来先简单介绍一下打乱是如何实现的。 这里要实现的方法是比较简单的,也就是多次把数组的不同位置的值互换,就像读小学时老师让两个同学互换位置一样,老师不断随机抽两个同学互换位置,最后同学们的座位就都重新排了一遍。 举个例子: intI,temp1,temp2,a[2],b[27] for(i=1;i<=27;i++)//先对数组赋初值 b[i]=I; randomize(); for(i=1;i<=500;i++)//i的大小决定打乱的程度,循环次数越多,打乱程度越高 { temp1=random(27)+1; temp2=random(27)+1; a[1]=b[temp1]; b[temp1]=b[temp[2]; b[temp2]=a[1]; } //输出 ListBox1->Clear(); for(i=1;i<=27;i++) ListBox1->Items->Add(IntToStr(b[i])); 如上例所示,经过打乱,b[27]数组将不再是旧时容颜。 二、实现的关键——筛选算法的介绍 在整个实现的过程中,如何在每一次打乱后对人物进行筛选是程序的关键所在,处理不好,程序就不会有结果。 而且筛选很容易把你搅得头晕脑胀,所以涉及的各个数组之间的关系一定要先理顺,先用一个例子来解释如何进行筛选。 以点击按钮的次数是第一次并且点击的按钮是Button1为例加以介绍,其思路如下: 初始: 第一次执行按钮事件并且按下的是Button1时(表a的数组就是关键数组): 把表a打乱后平均拆分为3组分别送入内存缓冲区 把表b和表c打乱后也平均拆分为3组分别送入内存缓冲区(非重要的数组),然后将它们进行组合,分别把有用的和无用的搭配重新组合为三张表并显示出来: 把全部的筛选过程表述出来: 1.初始化: 把a[1-27]打乱并将 a[1-9]赋给first[1-9] a[10-18]赋给second[1-9] a[19-27]赋给third[1-9] 2.第一次按钮事件(假设选中的是第二个选项卡) second[1-9]打乱后赋给temp1[1-3]、temp2[1-3]、temp3[1-3] a[1-9]+a[19-27]赋给temp4[1-18]并打乱 temp1[1-3]+temp4[1-6]赋给first[1-9]并打乱 temp2[1-3]+temp4[7-12]赋给second[1-9]并打乱 temp3[1-3]+temp4[13-18]赋给third[1-9]并打乱 3.第二次按钮事件(假设选中的是第二个选项卡) temp2[1-3]打乱后赋给temp5[1]、temp6[1]、temp7[1] temp1[1-3]+temp3[1-3]+temp4[1-18]赋给temp8[1-24]并打乱 temp5[1]+temp8[1-8]赋给first[1-9]并打乱 temp5[2]+temp8[9-16]赋给second[1-9]并打乱 temp5[3]+temp8[17-24]赋给third[1-9]并打乱 4.第三次按钮事件(如果选中的是第二个选项卡) 把temp5[2]所对应的图片显示出来即可。 最后分别把表a—表c打乱后显示出来即可。 进行二次、多次筛选的方法都一样,只是要注意相中的好汉在哪个数组里面,千万别搞错就行了。 三、小结 最后的工作就比较简单了。 可以设计一个友好的界面,然后在程序启动的时候对数组赋初值,并显示出来;对每个按钮分别先进行次数判断,然后进行前面讲述的处理,不断筛选直到剩下惟一的好汉后就可以显示在界面的正下方了。 本文来自编程入门网(): VB游戏写作技巧 (1)秀图篇 文章来源: 互联网文章作者: 未知 一开始,我想先从游戏的图形先讲起好了,毕竟游戏最重要的就是画面,一个没有漂亮图形的游戏,我连碰都不想去碰。 那该怎么处理游戏的图形呢? VB提供了一个非常好用的控制项--PictureBox,有了这个控制项我们才能轻松的在程式中秀出图形,现在就来看看PictureBox有那些特性可以让我们在游戏中使用。 Picture属性: 只要将这个属性填入正常的图形档名,VB就会自动帮我们载入图形档。 Visible属性: 这个属性可以让图形消失或让图形出现在画面上。 用法: Form1.Picture1.Visible=False'消失 Form1.Picture1.Visible=True'出现 Left属性: 表示图形的位置的X座标。 Top属性: 表示图形的位置的Y座标。 用法: 改变这两个属性就可以改变图形的位置。 ScaleMode属性: 设定PictureBox所使用的座标单位,一般都设为"3-像素" 知道了PictureBox的特性後,要怎么样把它应用到游戏中呢? 举个例子好了,我现在要做一个打砖块的游戏,需要用到那些图片呢? 砖块、球、击球的板子,一共有三张图,所以我们就使用三个PictureBox,将图片载入到PictureBox里面,如下面所示: Picture1砖块的图片 Picture2球的图片 Picture3板子的图片 接著我就可以写,当我按下方向键的右键时,Picture3的left属性+1,按下左键则-1,这样一来不就可以控制板子的左右移动了吗? 球也是一样,只要每隔一段时间更改一次Picture2的left和top属性,就可以做出球移动的效果了。 或许有人会觉得奇怪,一张图就要用到一个PictureBox,小游戏的图不多还没关系,如果是RPG的话不就要动用到几千个甚至几万个PictureBox? 岂不是麻烦死了? 所以如果图片很多的时候,我通常都是把图全部都放在同一个图形档里面,这样就只要用到一个PictureBox了,要用图片时从里面把它抓出来就好了,不过要怎么抓呢? 我建议使用函数BitBlt()来做图形的搬移。 使用BitBlt函数前要先宣告: DeclareSubBitBltLib"gdi32"(ByValhDestDCAsLong,ByValXAsLong,ByValYAsLong,ByValnWidthAsLong,ByValnHeightAsLong,ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValdwRopAsLong) hDestDC目的地的DC x目的地的座标x y目的地的座标y nWidth来源图片的宽度 nHight来源图片的高度 hSrcDC来源图片的DC xsrc来源图片的座标x ysrc来源图片的座标y dwrop运算方法: &HCC0020PUT &H8800C6AND &HEE0086OR &H660046XOR 现在有两个PictureBox Picture1AutoRedRaw属性设为Ture ScaleMode属性设为"3-像素" Picture2AutoRedRaw属性设为Ture ScaleMode属性设为"3-像素" 若想将Picture2里(10,10)-(100,100)区域内的图形拷贝到Picture1的(0,0) 可以这样写: BitBltPicture1.hdc,0,0,90,90,Picture2.hdc,10,10,&HCC0020 这样子平常写游戏时就只要设两个PictureBox,一个专门用来显示,另一个则用来放图形资料,需要时再用BitBlt函数覆制过去就好了,不是很方便吗? 本文来自编程入门网(): VB游戏写作技巧 (2)网络篇 文章来源: 互联网文章作者: 未知 这一次写的是如何用VB来写网路程式的方法,你可不要以为这是什么深奥的程式,其实只要一个Winsock控制项就可以了,现在就来介绍一下Winsock的用法: 步骤一: 首先要先把控制项给叫出来,你只要按下Ctrl+T後选取WinsockControl5.0若是用VB6的就选WinsockControl6.0,这样就可以使用Winsock元件。 步骤二: 再来我们必须先确定程式是作Server端还是Client端的,要先设定一些属性: Server写法: winsock1.localPort=5400(数字可以随便设) winsock1.Listen(等待连线) Client写法: winsock1.RemoteHost="对方IP" winsock1.RemoteProt=5400(必须要和Server端相同) winsock1.LocalProt=0 winsock1.Connect(连线) 连线之前Client端要先知道Server端的IP,接著等到Server端等待连线时,Client端就可以呼叫Connect方法,双方连线成功後就可以传输资料。 步骤三: 当Client连线的时候Server端会引发ConnectionRequest事件,Server的程式要这样子写: PrivateSubWinsock1_ConnectionRequest(ByValrequestIDAslong) winsock1.Close winsock1.AcceptrequestID EndSub 步骤四: 这样一来就可以传送资料了,传送和接受资料的方法如下: 传送资料: mydata="你好吗? " winsock1.sendDatamydata 这样就会把mydata给传到对方那里。 接受资料: 当有资料送到的时候会引发DataArrival事件。 PrivataSubWinsock1_DtatArrival(ByValbytesTotalAslong) DimmydataAsString winsock1.GetDatamydata 会把送到的资料给mydata EndSub Winsock控制项就那么简单,只要会这些就可以写网路游戏了,相关的程式你可以参考网路五子棋(54K) 本文来自编程入门网(): 本文介绍编制贪吃蛇游戏的一般方法,其中不含什么高深的算法,只使用了初级的VB编程方法,通俗易懂。 各位如有任何见解,请不吝赐教。 本人QQ: 190317890(请在身份验证里面写上“CSDN”) 邮箱**************** 需
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小时候 经典 游戏 VB 编写 实例教程 大全