下载地址:https://files.cnblogs.com/files/daveylin/VB%E5%BC%B9%E5%8A%9B%E7%90%83lw.zip
《VB弹力球》项目设计文档
一、界面设计
控件 |
对象名 |
属性名 |
属性值 |
含义 |
Form |
frmMain |
Caption |
弹力球 |
|
StartUpPosition |
2 '屏幕中心 |
屏幕居中 |
||
ScaleHeight |
5400 |
|
||
ScaleWidth |
7755 |
|
||
PictureBox |
Picture1 |
Height |
5000 |
|
Width |
6000 |
|
||
Left |
100 |
|
||
Top |
100 |
|
||
Shape |
Shape1 |
Shape |
3 'Circle |
球形 |
BorderColor |
&H00000000& |
填充颜色 |
||
FillStyle |
0 'Solid |
填充方式 |
||
Height |
300 |
球形大小 |
||
Width |
300 |
|||
Line |
Line1 |
BorderColor |
&H00FF0000& |
|
BorderWidth |
2 |
|
||
X1 |
2500 |
|
||
X2 |
3500 |
|
||
Y1 |
4600 |
|
||
Y2 |
4600 |
|
||
CommandButton |
cmdStart |
Caption |
开始 |
|
CommandButton |
cmdExit |
Caption |
退出 |
|
Timer |
Timer1 |
Interval |
150 |
单位:毫秒 |
Label |
Label1 |
Caption |
得分 |
|
Label2 |
Caption |
0 |
|
|
Label3 |
Caption |
最高分 |
|
|
Label4 |
Caption |
0 |
|
二、VB控件
2.1 控件的通用特性
1) 名称(name)属性
每个控件都有名称属性,用于程序中对控件的辨别和操作。
2) 焦点
在窗体上,任何时候用户都只能操作其中的一个控件对象,这个被操作的对象称它获得焦点。
下列方法可以将焦点赋予对象:
- 运行时用鼠标选择对象
- 运行时用快捷键选择对象
- 运行时按Tab键将焦点移到对象上
- 在程序代码中用SetFocus方法
说明:
- 框架、标签、菜单、直线、形状、图像框和时钟控件都不能接受焦点。
- 程序运行时,按Tab键将使焦点按照控件TabIndex属性的顺序在控件间移动。
3) 容器
窗体、框架和图片框等都可以作为其他控件的容器。移动容器,容器中的控件也随之移动。容器中控件的Left和Top属性值是指其在容器里的位置。
2.2 图形控件
VB包含四个图形控件:PictureBox控件、Image控件、Shape控件和Line控件。
PictureBox控件称为图片框,Image控件称为图像框。图片框和图像框可以显示的图像文件格式有位图文件(.bmp)、图标文件(.ico)、图元文件(.wmf)、JPEG格式文件(.jpg)和GIF格式文件(.gif)。
1) 图片框PictureBox控件
图片框(PictureBox)是用来在窗体上显示图像,或作为容器放置其它控件的控件。
2) 形状Shape控件
Shape属性取值及功能说明
属性名 |
数值 |
常量 |
功能说明 |
Shape |
0 |
VbShapeRectangle |
显示矩形 |
1 |
VbShapeSquare |
显示正方形 |
|
2 |
VbShapeOval |
显示椭圆 |
|
3 |
VbShapeCircle |
显示圆 |
|
4 |
VbShapeToundedRectangle |
显示圆角矩形 |
|
5 |
VbShapeRoundedSquare |
显示圆角正方形 |
|
Height |
数值 |
|
形状的高度 刻度单位是对象所在容器坐标系中的刻度单位 |
Width |
数值 |
|
形状的宽度 刻度单位是对象所在容器坐标系中的刻度单位 |
Top |
数值 |
|
形状的上边到容器上边的距离 |
Left |
数值 |
|
形状的左边到容器左边的距离 |
3) 直线Line控件
(x1,y1)和(x2,y2)两点确定一条直线,坐标(x,y)是相对于容器的坐标。
属性名 |
属性值 |
说明 |
X1 |
数值 |
直线一端点的X1坐标 |
X2 |
数值 |
直线另一端点的X2坐标 |
Y1 |
数值 |
直线一端点的Y1坐标 |
Y2 |
数值 |
直线另一端点的Y2坐标 |
2.3 时钟控件
时钟控件以Interval为时间间隔产生Timer事件。
Timer控件的重要属性
属性名 |
属性值 |
说明 |
Interval |
数值 |
设置时钟控件的计时事件的时间间隔数。单位为ms(0.001s), 取值范围(0~64767),即最大时间间隔不超过65秒。 |
如:间隔时间为0.5秒是则Interval=500。 间隔时间为1秒则Interval=1000。 |
||
Interval=0时,时钟控件失效。 |
||
Enabled |
逻辑值 |
True:有效计时 |
False:停止时钟工作 |
2.4 坐标刻度
坐标系的刻度取决于ScaleMode属性。
常数 |
设置值 |
描述 |
VbUser |
0 |
指出ScaleHeight、ScaleWidth、ScaleLeft和ScaleTop属性中的一个或多个被设置为自定义的值 |
VbTwips |
1 |
(缺省值)缇(每逻辑英寸为1440缇; 每逻辑厘米为567个缇) |
VbPoints |
2 |
磅(每逻辑英寸为72个磅) |
VbPixels |
3 |
像素(监视器或打印机分辨率的最小单位) |
VbCharacters |
4 |
字符(水平每个单位=120缇;垂直每个单位=240缇) |
VbInches |
5 |
英寸 |
VbMillimeters |
6 |
毫米 |
VbCentimeters |
7 |
厘米 |
VbHimetric |
8 |
HiMetric |
VbContainerPosition |
9 |
控件容器使用的单位,决定控件位置 |
VbContainerSize |
10 |
控件容器使用的单位,决定控件的大小 |
参考资料
http://www10.zzu.edu.cn/ie_wangjunfeng/daquan/property/content/ScaleMode.htm
缇:一个与屏幕无关的单位,用来保证屏幕应用程序对屏幕元素的定位和比例在所有的显示系统上的一致性。一缇等价于1/20个打印机的磅。一逻辑英寸大约有1440缇,一逻辑厘米约567缇(打印时的一英寸或一厘米所对应的屏幕上的长度)。
磅:在印刷术语中,一磅是1/72英寸。字体大小通常用磅来表达。
像素:即“图片元素”的简称,它是代表屏幕上的最小图形度量单位的点。像素是依赖于屏幕的,即屏幕元素的维数因显示系统和分辨率而异。
逻辑英寸问题 (The Logical Inch Problem )
http://chaoqunz.blog.163.com/blog/static/615487772008113094924627/
三、小球运动轨迹设计
3.1 小球直线运动
Height和Width决定了小球大小的属性,Top和Left决定了小球相对于容器的位置。显然,要让小球运动起来,就改变它的Top和Left属性。
先介绍容器的坐标
小球在容器的相对位置关系
想要改变小球的位置,只要改变小球的Top和Left属性。
假设小球运动轨迹符合f(x)=kx,设小球的坐位(T1,L1),经过0.1s后,向后下方运动50刻度单位到(T2,L2),显然存在等式:T1+50=T2,L1+50=L2。
3.2 小球碰到墙壁
If Shape1.Top < 0 Then Shape1.Top = 0 y_step = -y_step End If If Shape1.Left < 0 Then Shape1.Left = 0 x_step = -x_step End If If Shape1.Left > Picture1.Width - Shape1.Width Then Shape1.Left = Picture1.Width - Shape1.Width x_step = -x_step End If
四、挡板运动轨迹设计
4.1 挡板键盘控制
Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer) '触发Picture1对象的键盘按下事件,返回键盘的扫描码 'keycode 37 = Left 'KeyCode 38 = Up 'KeyCode 39 = Right 'KeyCode 40 = Down If KeyCode = 37 Then If Line1.X1 < 0 Then Line1.X1 = 0 Line1.X2 = 1000 Else Line1.X1 = Line1.X1 - degree Line1.X2 = Line1.X2 - degree End If End If If KeyCode = 39 Then If Line1.X2 > Picture1.Width Then Line1.X1 = 5000 Line1.X2 = 6000 Else Line1.X1 = Line1.X1 + degree Line1.X2 = Line1.X2 + degree End If End If End Sub
4.2 挡板碰到墙壁
If Line1.X1 < 0 Then Line1.X1 = 0 Line1.X2 = 1000
If Line1.X2 > Picture1.Width Then Line1.X1 = 5000 Line1.X2 = 6000
五、挡板接住小球
5.1 判断挡板接住小球
'接住小球,小球反弹 '判断接住小球的情况 '小球反弹的运动轨迹 If Shape1.Left + 150 >= Line1.X1 And Shape1.Left + 150 <= Line1.X2 And Shape1.Top >= Line1.Y1 - Shape1.Height Then Shape1.Top = Line1.Y1 - Shape1.Height y_step = -y_step * 1.01 x_step = x_step * 1.01 Label2.Caption = Str(Val(Label2.Caption) + 1) If zgf < Val(Label2.Caption) Then zgf = Val(Label2.Caption) End If End If