主题:问个用Qbasic编游戏的问题?
euclid
[专家分:1670] 发布于 2004-02-01 17:10:00
请问用什么方法才能用键盘控制一个东西移动呢?
就像按右键时小人往右跑之类的……
高手们卜另赐教!!
回复列表 (共34个回复)
11 楼
zssaixhx [专家分:0] 发布于 2004-02-22 22:47:00
好长...我晕了
12 楼
赌东道 [专家分:0] 发布于 2004-02-28 20:25:00
好东西,
13 楼
c0610217 [专家分:710] 发布于 2004-03-07 15:33:00
Do
Con$=Inkey$
select case right$(Con$,1)
case "H" '上
...
case "P" '下
...
case "K" '左
...
case "K" '右
...
end select
Loop until inkey$<>""
14 楼
ahei [专家分:150] 发布于 2004-05-30 23:15:00
我把和键盘相关的另一个帖子内容摘过来方便大家 :
如何判断使用键盘的人是否在按着某一个键?
即所谓的按键反应
例如 我一直按着a键 则得到的某个信息值为真,放掉后立即变为假.
注意:不是用inkey$函数(它做出来的动作并不圆滑,我想用此命令来控制物体的平滑移动)
答:当我们在键盘上"按下"或"放开"一个键时,如果键盘中断是允许的(21H端口第1位=0),就会产生一个类型9的中断,并转入到BIOS的键盘中断处理程序。该处理程序从8255可编程序外围接口芯片的输入端口60H读取一个字节,这个字节的低7位是键的扫描码。最高位为0或为1,分别表示键是"按下"状态还是"放开"状态。按下时,取得的字节称为通码,放开时取得的字节称为断码。如按下Esc键时产生一个通码为01H(0000001B),放开Esc键时产生一个断码为81H(10000001B)。
你可以用INP语句来读取!格式 INP(地址)
具体例子:
do
do: k$ = inkey$ : loop until k$ < > ""
if k$="a" then gosub yousub '按a键转入a相应的子程序
loop
在子程序中插入:'(判断键是否按下)
do
a = inp(&H60)
a = a and 128 '最高位是128,是128表示键已放开
loop until a=128'没有键按下或键已放开 退出循环
15 楼
飞鸟12 [专家分:2830] 发布于 2004-06-24 16:51:00
[em9][em9][em9][em9]
16 楼
公孙成 [专家分:1040] 发布于 2004-06-24 23:44:00
TO 8楼UNTIL,为什么你的编号里有好多我用起来不行?比如我用
case chr$(0)+chr$(28) : print "enter"
是没反应的,而有的键是可以的,比如F10,F11等.
TO 7楼QB45,
为什么ESC键不用加CHR$(0),能不能也用chr$(0)+...的形式.
或者其它左右上下键能否直接用CHR$(具体一个数)来表示
期待回答.!!!!
17 楼
公孙成 [专家分:1040] 发布于 2004-06-25 22:58:00
请帮忙!
18 楼
ahei [专家分:150] 发布于 2004-07-28 10:54:00
公孙成 你到汇编语言里找找键盘编码的原理看看
19 楼
54BB [专家分:380] 发布于 2005-05-16 16:31:00
能不能对INKEY$作个详细介绍,我觉得在编写键盘控制语句的时候就是这句不好掌握。
20 楼
moz [专家分:37620] 发布于 2005-05-16 17:18:00
用input$(1)可以读到一个字节的按键,比如字母数字之类的
用inkey$可以检查缓冲区里的一个按键扫描码。
Shift+F1 , Contents , Keyboard Scan Codes 码表有具体的扫描码
你也可以自己编一个inkey$来检测你所需要的按键的值是多少,
这个程序好像老大发了很多次喔。
我以前也写过的。
do
k$=""
do:k$=inkey$:loop while k$=""
print "你刚才按的按键长度为";len(k$);
print "ASC码为 chr$(";asc(k$);
if len(k$)>1 then print ")+ chr$(";asc(right$(k$,1));
print ")"
loop until k$=chr$(27)
我来回复