永发信息网

如何用vb写赛车游戏

答案:2  悬赏:80  手机版
解决时间 2021-02-01 01:22
如何用vb写赛车游戏
最佳答案
下面是全部源代码,窗体上只需放个按钮Command1就行了! Const D = 100 方格的宽度 Const BT = 3000 跑道底部的y坐标 Dim l1(22) As Integer 每层跑道左边有几个方块 Dim l2(22) As Integer 每层跑道右边有几个方块 Dim cx As Single 赛车的在x轴的位置 Private Sub Command1_Click() cx = Width / 2 - 3 * D / 2 cy = Height - D drawcar For i = 1 To 20 l1(i) = 0 l2(i) = 0 drawway (i) Next i Timer1.Enabled = True End Sub Private Sub drawcar() 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 End Sub Private Sub drawway(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 End Sub Private Sub Form_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case Asc("a"), Asc("A") cx = cx - D Case Asc("s"), Asc("S") cx = cx + D End Select End Sub Private Sub Timer1_Timer() Randomize For i = 1 To 19 l1(i) = l1(i + 1) l2(i) = l2(i + 1) drawway (i) Next i Do l1(20) = Int(Rnd * 5) l2(20) = Int(Rnd * 5) Loop Until ((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 End Sub Private Sub test() If 3.5*D-Width/2+cx<l1(1)*D Then Timer1.Enabled=False If 3.5*D-Width/2+cx+D<l1(2)*D Then Timer1.Enabled=False If 3.5*D-(cx+3*D-Width/2)<l2(1)*D Then Timer1.Enabled=False If 3.5*D-(cx+2*D-Width/2)<l2(2)*D Then Timer1.Enabled=False End Sub
全部回答
在vb中,有多种方法可以实现键盘模拟,我们就介绍几种比较典型的。 1.局部级模拟 从上面的流程可以看出,键盘事件是最终被送到活动窗口,然后才引起目标程序响应的。那么最直接的模拟方法就是:直接伪造一个键盘消息发给目标程序。哈哈, 这实在是很简单,windows提供了几个这样的api函数可以实现直接向目标程序发送消息的功能,常用的有sendmessage和 postmessage,它们的区别是postmessage函数直接把消息仍给目标程序就不管了,而sendmessage把消息发出去后,还要等待目 标程序返回些什么东西才好。这里要注意的是,模拟键盘消息一定要用postmessage函数才好,用sendmessage是不正确的(因为模拟键盘消 息是不需要返回值的,不然目标程序会没反应),切记切记!postmessage函数的vb声明如下:declare function postmessage lib "user32" alias "postmessagea" (byval hwnd as long, byval wmsg as long, byval wparam as long, lparam as any) as long参数hwnd 是你要发送消息的目标程序上某个控件的句柄,参数wmsg 是消息的类型,表示你要发送什么样的消息,最后wparam 和lparam 这两个参数是随消息附加的数据,具体内容要由消息决定。再来看看wmsg 这个参数,要模拟按键就靠这个了。键盘消息常用的有如下几个:wm_keydown 表示一个普通键被按下wm_keyup 表示一个普通键被释放wm_syskeydown 表示一个系统键被按下,比如alt键wm_syskeyup 表示一个系统键被释放,比如alt键如 果你确定要发送以上几个键盘消息,那么再来看看如何确定键盘消息中的wparam 和lparam 这两个参数。在一个键盘消息中,wparam 参数的 含义较简单,它表示你要发送的键盘事件的按键虚拟码,比如你要对目标程序模拟按下a键,那么wparam 参数的值就设为vk_a ,至于lparam 这个参数就比较复杂了,因为它包含了多个信息,一般可以把它设为0,但是如果你想要你的模拟更真实一些,那么建议你还是设置一下这个参数。那么我们就详细 了解一下lparam 吧。lparam 是一个long类型的参数,它在内存中占4个字节,写成二进制就是 00000000 00000000 00000000 00000000 一共是32位,我们从右向左数,假设最右边那位为第0位(注意是从0而不是 从1开始计数),最左边的就是第31位,那么该参数的的0-15位表示键的发送次数等扩展信息,16-23位为按键的扫描码,24-31位表示是按下键还 是释放键。大家一般习惯写成16进制的,那么就应该是&h00 00 00 00 ,第0-15位一般为&h0001,如果是按下键,那 么24-31位为&h00,释放键则为&hc0,那么16-23位的扫描码怎么会得呢?这需要用到一个api函数 mapvirtualkey,这个函数可以将虚拟码转换为扫描码,或将扫描码转换为虚拟码,还可以把虚拟码转换为对应字符的ascii码。它的vb声明如 下:declare function mapvirtualkey lib "user32" alias "mapvirtualkeya" (byval wcode as long, byval wmaptype as long) as long参 数wcode 表示待转换的码,参数wmaptype 表示从什么转换为什么,如果是虚拟码转扫描码,则wmaptype 设置为0,如果是虚拟扫描码转 虚拟码,则wmaptype 设置为1,如果是虚拟码转ascii码,则wmaptype 设置为2.相信有了这些,我们就可以构造键盘事件的 lparam参数了。下面给出一个构造lparam参数的函数:declare function mapvirtualkey lib "user32" ali
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
宝沃4s中心地址在哪,我要去那里办事
如图8-8所示某一压弯柱柱段,其承受的轴压力N
药王爷的酒壶什么样
朋达汽车有限公司怎么去啊,我要去那办事
If you rearrange the letters in INBOG,you
如何修改网易交易宝开户人姓名
传闻中的七公主停七生孩子的片段是哪集
大展(众泰4s店)怎么去啊,我要去那办事
足球中踩单车的方法,老是被断?还有拉球时重
我想唐,给儿子取名,中间带庆字,但取名叫唐
B超检查出肝硬化,CT检查出是正常的,请问那
中行临时额度没到期还可以在提吗
佛珠什么材质最好
上海交大医学院临床医学本博连读
北方人吃面和南方人吃面有什么不同
推荐资讯
蝶恋花摄影地址在什么地方,想过去办事
缺乏耐心和恒心怎么解决?
天水到沙湖多少公里
在深圳的底薪2500包吃住还行吗?
求达人帮忙翻译成文言文:翻译内容如下: 真相
Tst活酵母的功效如何?
创艺婚纱摄影(万寿街与文中街交叉口东北50米
问:小黑熊要爬到距地面8米高的树顶,它每次
实习期的驾驶证出现重大事故是不是要掉销
衣贝洁干洗屋怎么去啊,我要去那办事
孙某将自有住房无偿赠与非法定继承人王某,已
柠檬被称为什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?