VB小游戏实验报告.docx

上传人:b****6 文档编号:10193651 上传时间:2023-02-09 格式:DOCX 页数:10 大小:128.64KB
下载 相关 举报
VB小游戏实验报告.docx_第1页
第1页 / 共10页
VB小游戏实验报告.docx_第2页
第2页 / 共10页
VB小游戏实验报告.docx_第3页
第3页 / 共10页
VB小游戏实验报告.docx_第4页
第4页 / 共10页
VB小游戏实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

VB小游戏实验报告.docx

《VB小游戏实验报告.docx》由会员分享,可在线阅读,更多相关《VB小游戏实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

VB小游戏实验报告.docx

VB小游戏实验报告

VB

姓名:

张晓红

学号:

41041X14

 

游戏题目:

弹球游戏

1.设计思想:

设计一个弹球游戏,使其在向上或左右方向碰壁反弹,下部有一可左右水平移动的挡板,当小球接触挡板时,小球反弹,否则小球出界,即游戏失败,小球每接触次挡板,加十分,当得分是20的倍数时,挡板缩短,小球移动加快,致使难度增加。

2.窗体设计的属性

名称是窗体的标识名,代码中称它为Name值为:

Form1

  BackColor:

pink。

  BorderStyle:

Button  

  Caption:

弹球游戏。

  ControlBox:

设置窗体标题栏上是否具有控制菜单栏及按钮。

  Enabled:

true  

Height:

200

  Width:

150  

  Visible:

True。

  WindowsState:

原形。

  Icon:

设置窗体标题栏上的图标。

  Picture:

给窗体配上漂亮的位图。

 特别要注意的是:

窗体的Name和Caption属性,虽然缺省值相同,都是Form1,但实际意义却不一样。

Caption指的窗体标题栏上的文字,Name指这个窗体的对象名,千万不能混淆。

3.动画的代码

Dimtime%,key%,score%,a#,y#

PrivateSubCommand2_Click()

Line1.X1=1320

Line1.X2=3000

Timer1.Interval=100

Label1.Caption=0

Timer2.Enabled=False

Timer1.Enabled=False

Label4.Caption=""

score=-10

time=0

Shape1.Left=(Line1.X1+Line1.X2)/2'球位置初始化

Shape1.Top=Line1.Y1-Shape1.Height

EndSub

PrivateSubForm_Load()

Line1.X1=1320

Line1.X2=3000

Timer1.Interval=100

Label1.Caption=""

Timer2.Enabled=False

Label4.Caption=""

score=-10

time=0

Shape1.Left=(Line1.X1+Line1.X2)/2

Shape1.Top=Line1.Y1-Shape1.Height'游戏初始化

EndSub

PrivateSubPicture1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)

key=KeyCode

SelectCaseKeyCode

Case37'如果按下左箭头,使板子向左移动

IfLine1.X1<=0Then

Line1.X1=0

Else

Line1.X1=Line1.X1-90

Line1.X2=Line1.X2-90

EndIf

Case39'如果按下右箭头,使板子向右移动

IfLine1.X2>=4575Then

Line1.X2=4575

Else

Line1.X1=Line1.X1+90

Line1.X2=Line1.X2+90

EndIf

EndSelect

EndSub

PrivateSubCommand1_Click()

Dimm%,n%

Picture1.SetFocus

Timer1.Enabled=True

Timer2.Enabled=True

Randomize

m=Int(Rnd*1)+0

Ifm=0Then

Randomize

a=Int(Rnd*(46*3.1416/180))+30*3.1416/180

y=100*Abs(Tan(a))

Else:

Randomize

a=Int(Rnd*(46*3.1416/180))+105*3.1416/180'平移移动动量和我竖直移动的夹角

y=100*Abs(Tan(a))‘确定单位时间内水平移动量,求出竖直移动量

EndIf

EndSub

PrivateSubCommand3_Click()

IfCommand3.Caption="暂停"Then

Timer1.Enabled=False

Timer2.Enabled=False

Label5.Visible=True

Command1.Enabled=False

Command2.Enabled=False

Command3.Caption="继续"

Else

Picture1.SetFocus

 

Timer1.Enabled=True

Timer2.Enabled=True

Label5.Visible=False

Command1.Enabled=True

Command2.Enabled=True

Command3.Caption="暂停"

EndIf

EndSub

PrivateSubPicture1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)

key=KeyAscii

EndSub

PrivateStaticSubTimer1_Timer()

Dimn%,m%,i%

IfShape1.Left<0Then

n=0

EndIf

IfShape1.Left>4200Then'使球碰壁反弹的条件

n=1

EndIf

SelectCase(n)

Case0

Shape1.Left=Shape1.Left+100

Case1

Shape1.Left=Shape1.Left-100

EndSelect

IfShape1.Top+Shape1.Height>=Line1.Y1AndShape1.Left<=(Line1.X2-175)AndShape1.Left>=(Line1.X1-200)Then

m=0'球遇到挡板反弹的条件

score=score+10

Label1.Caption=Str(score)+"分"

IfscoreMod20=0AndTimer1.Interval>=10Then'当得分是20的倍数时,挡板的长度减少

Line1.X1=Line1.X1+20

Line1.X2=Line1.X2-20

Timer1.Interval=Timer1.Interval–3'当得分是20的倍数时,间隔时间减少

EndIf

EndIf

IfShape1.Top<0Then

m=1

EndIf

SelectCase(m)

Case0

Shape1.Top=Shape1.Top-y

Case1

Shape1.Top=Shape1.Top+y

EndSelect

IfShape1.Top>Line1.Y1Then

Timer1.Enabled=False

i=MsgBox("你输了!

",vbInformation,"结果")

Ifi=1Then

Line1.X1=1320

Line1.X2=3000

Timer1.Interval=100

Label1.Caption=0

Timer2.Enabled=False

Label4.Caption=""

score=-10

time=0

Shape1.Left=(Line1.X2+Line1.X1)/2

Shape1.Top=Line1.Y1-Shape1.Height'游戏失败后重新初始化

EndIf

EndIf

IfTimer1.Interval<=10Then'游戏完成的条件

Shape1.Left=(Line1.X1+Line1.X2)/2

Label1.Caption="0"

Label4.Caption=""

MsgBox"祝贺你,游戏完成!

"

Timer1.Enabled=False

Timer2.Enabled=False

Timer1.Enabled=flase

Timer1.Interval=100

score=-10

time=0

Shape1.Left=(Line1.X1+Line1.X2)/2

Shape1.Top=Line1.Y1-Shape1.Height'游戏通过后重新初始化

EndIf

EndSub

PrivateSubTimer2_Timer()

time=time+1

Label4.Caption=Str(time)+"秒"

EndSub

4.动画的效果

(游戏运行初始化)

(游戏运行)

 

(游戏暂停)

(游戏失败)

5.动画的说明:

⑴每次开始游戏时,小球发射角度随机(使小球每次向不同方向发射);

所以定义一个角度变量a和高度变量y,每次运行时随机出一个范围在[30°,75°]或[105°,150°]的角a,确定小球相对于“容器”(left属性),利用三角函数(y=tan(a)*shape1.left),计算出y值。

由此随机出每次运行时小球的发射角度。

⑵小球接触挡板致使加分的条件;

小球相对于“容器”高度位置(shape1.top)加上小球直径(shape1.height)>=挡板的位置(line1.Y1),小球相对于“容器”左右位置(shape1.left)<=挡板右端点的位置(line1.X2)且>=挡板左端点的位置(line1.X1),满足以上条件,判定小球接触挡板被反弹。

⑶游戏运行时小球和挡板的初始化;

当游戏结束,失败,通过后,重新设置挡板左端点和右端点位置(line1.X1和line1.X2),小球位置重设为Shape1.Left=(Line1.X1+Line1.X2)/2;Shape1.Top=Line1.Y1-Shape1.Height。

Time1的时间间隔设为100,得分和时间(score;time)返回初值。

⑷如何使挡板进行左右移动。

采用keydown事件,进行选择判断,向左(右)移动时,板左右端点同时减去(加上)90进行移动,从而实现板的左右移动。

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1