实现基本要求代码: 100行 主要涉及: 基本控件及算法
基本要求
要求使用面向对象和结构化程序设计的编程思路
能通过键盘W(上)、S(下)、A(左)、D(右)移动坦克。
可以通过上述按键随时改变坦克的方向。
炮身和炮筒分别为标签控件
当坦克移动到窗体边框时停止前进,但能改变方向。
按键J时可以按炮筒方向发射炮d(炮d为标签控件)。
增加不固定障碍物。
可发射连续炮d。
用户可自行设置按键。
增加坦克移动速度等级。
坦克使用其他控件
其它创新(有一定难度,实现代码在30行以上)
设计方法和基本原理
1.问题描述
坦克由两个控件构成label1作为坦克的主体部分,label2作为炮管。在一个矩形区域内可以通过键盘控制坦克向上下左右移动,当移动到边界后就不再移动但可以变换方向继续移动。通过键盘控制可发炮。
2.问题的解决方案
①设计程序界面
因为用的全是基本控件,界面设计没有什么难度,照样子拼就可以了。
②编写代码
代码包括事件处理过程和功能函数,还有必要的声明。变量声明部分声明本程序所需要的变量和数组。
事件处理包括下面的主要事件:
Form_Load()
作一些初始化的工作。
Sub Form_KeyPress(KeyAscii As Integer)
坦克的移动通过窗体的keypress事件接受键盘按键,w键控制坦克向上,s键控制坦克向下,a键控制坦克向左,d键控制坦克向右。
炮d的发射由键盘事件控制,单击j键发射炮d。利用timer控件控制炮d延直线移动(改变炮d的top和left属性),当炮d击中边缘后消失。
Sub Timer1_Timer()
炮d的运动是由timer控件控制,发炮时启动timer事件。
四、主要技术问题的描述
本题中的难点并不在于界面设计,只需要放几个标签和一个时钟控件就可以了。
1. 坦克的移动
每当触发keypress事件后改变坦克的组成部分label1和label2的top和left属性,注意当坦克改变方向时,label1控件和label2控件的相对位置会改变。
2.炮d的移动
每当利用keypress事件触发坦克的发炮,首先判断是否炮d在运行当中,如果运行当中则不进行响应。炮d的运动是由timer控件控制,发炮时启动timer事件。
问题补充:如果有发我邮箱里,告诉我你的ID,给你分。
给链结的一律无效。
利用vb控件做个坦克大战类的游戏即可,炮d和坦克都用控件实现就行。唯一难点是控制控件移动以及炮d击中目标的碰撞检测判断。给你一个简单实现代码这是一种碰撞检测方法,下述属于简化的矩形碰撞检测,若是需要复杂碰撞可以用一个数组来记录大量需要碰撞检测的物体
image1里读入坦克的图片
image2里读入地雷的图片
然后用下面代码即可实现
Private
Sub
Form_KeyPress(KeyAscii
As
Integer)
'按键盘A和D键控制猫图片image1左右移动
If
KeyAscii
=
97
Then
Image1.Left
=
Image1.Left
-
10
If
KeyAscii
=
100
Then
Image1.Left
=
Image1.Left
+
10
'如果坦克图片与地雷图片相遇则提示碰撞到了
If
Image1.Left
+
Image1.Width
>
Image2.Left
Then
If
Image1.Left
<
Image2.Left
+
Image2.Width
Then
If
Image1.Top
+
Image1.Height
>
Image2.Top
Then
If
Image1.Top
<
Image2.Top
+
Image2.Height
Then
MsgBox
"坦克碰到地雷,已经被炸毁了"
End
If
End
If
End
If
End
If
End
Sub
用if语句来控制。如果 坦克的位置等于窗口的大小 if tanke.left=form.weigth.
那么 then
坦克停止 tankerun=false;tankerun是你自己写的一个控制坦克运动状态的函数
我建议你用timer来控制,timer=false,坦克就不跑了
d出对话框提示已到最右边。 messagebox(“坦克已到最右边”)
我是学Java的。VB的代码写不来,所以上面的代码你多包涵。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)