VB弹力球源程序

下载地址: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

 

posted @ 2020-06-18 19:03  daveylin  阅读(610)  评论(0编辑  收藏  举报