主题:[讨论]关于游戏中的控制语句
mickeyice
[专家分:200] 发布于 2007-01-02 17:23:00
[em4]
纸牌类非即时类 回合制游戏中可以使用inkey$来读取键盘指令
即时类游戏比如坦克或者贪吃蛇可以用inkey$加写poke(peek)语句直接伪造一个键盘消息给程序也可以达到这个效果(仅在文曲星的gvbasic上应用过),在 qb 中一般使用inp
那么有没有更好的方法实现游戏的键盘操作呢?[em8][em8][em8]
另外补充一下在即时类游戏中速度控制我常用的是on timmer gosub
但是秒为单位注定不能编写快节奏的游戏,怎样才能更好的精确控制游戏的speed呢??
[em7]
最后更新于:2007-01-03 12:54:00
回复列表 (共6个回复)
沙发
雪光风剑 [专家分:27190] 发布于 2007-01-02 23:26:00
没有
qb要想在这方面实现优化需要的代价很大,不如直接换用其他语言运用流来进行指令读入
板凳
我白芦花 [专家分:190] 发布于 2007-01-03 16:36:00
22222222222222
3 楼
我白芦花 [专家分:190] 发布于 2007-01-03 16:44:00
第一个问题:可以加载一个键盘处理函数
请参考鼠标函数
第二个问题:可以加载一个自己的时钟中断
4 楼
冷石_jasv [专家分:1570] 发布于 2007-01-04 14:14:00
关于这个问题.....版主:QB45(秋水)曾经研究过:
在QBASIC中我们可以用ON TIMER(N) GOSUB ...来进行时间中断的处理,但N最小也只能1,
再不能小了,我们可以利用改变中断定时向量来改变速度,看下面的一段程序。
'下面是演示程序
SUB ChangeTimer (newcount)
OUT &H43, &H3C
OUT &H40, newcount AND &HFFFF
OUT &H40, (newcount \ 256) AND &HFFFF 'QBASIC中没有位移操作,只能用乘除来实现
END SUB
其中,newcount=1.9318MHz/期望频率
当newcount=&HFFFF时,期望频率=18.2Hz(dos默认频率,也是最低频率)
当程序运行于windows下的DOS窗口时,newcount值不要太低。
DECLARE SUB ChangeTimer (newcount%)
SCREEN 1
DEFINT A-Z
DIM X(6), Y(6)
ChangeTimer &H800
TIMER ON 'Enable timer event trapping.
ON TIMER(3) GOSUB Drawpoly 'Draw a new polygon every
'three seconds.
PRINT "Press any key to end program"
INPUT "Press <RETURN> to start", Test$
DO
LOOP WHILE INKEY$ = "" 'End program if any key pressed.
END
Drawpoly:
CLS 'Erase old polygon.
N = INT(5 * RND + 2) 'N is random number from 2 to 6.
FOR I = 0 TO N
X(I) = INT(RND * 319) 'Get coordinates of vertices of
Y(I) = INT(RND * 199) 'polygon.
NEXT
PSET (X(N), Y(N))
FOR I = 0 TO N
LINE -(X(I), Y(I)), 2 'Draw new polygon.
NEXT
RETURN
SUB ChangeTimer (newcount)
OUT &H43, &H3C
OUT &H40, newcount AND &HFF
OUT &H40, (newcount \ 256) AND &HFF
END SUB
5 楼
冷石_jasv [专家分:1570] 发布于 2007-01-04 14:17:00
如果你想用QB写点小游戏...的确代码比较长点........
还好你没想写点鼠标控制的游戏...那更要命的.......
6 楼
w1212q [专家分:660] 发布于 2007-01-20 09:59:00
Basic没用了(只是当程序员没希望)
哪个企业老板会等你慢慢的编程
学好了QB就赶快转OOP吧,也可以转超OOP概念的JAVA
企业都是用的快速开发
用QB,不但自己不爽,老板也不爽
我来回复