回 帖 发 新 帖 刷新版面

主题:问个用Qbasic编游戏的问题?

请问用什么方法才能用键盘控制一个东西移动呢?
就像按右键时小人往右跑之类的……
高手们卜另赐教!!

回复列表 (共34个回复)

11 楼

好长...我晕了

12 楼

好东西,

13 楼

Do
Con$=Inkey$
select case right$(Con$,1)
  case "H" '上
    ...
  case "P" '下
    ...
  case "K" '左
    ...
  case "K" '右
    ...
end select
Loop until inkey$<>""

14 楼

我把和键盘相关的另一个帖子内容摘过来方便大家 :

如何判断使用键盘的人是否在按着某一个键?
即所谓的按键反应
例如 我一直按着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 楼


[em9][em9][em9][em9]

16 楼

TO 8楼UNTIL,为什么你的编号里有好多我用起来不行?比如我用
case chr$(0)+chr$(28) : print "enter"
是没反应的,而有的键是可以的,比如F10,F11等.
TO 7楼QB45,
为什么ESC键不用加CHR$(0),能不能也用chr$(0)+...的形式.
或者其它左右上下键能否直接用CHR$(具体一个数)来表示
期待回答.!!!!

17 楼

请帮忙!

18 楼

公孙成 你到汇编语言里找找键盘编码的原理看看

19 楼

能不能对INKEY$作个详细介绍,我觉得在编写键盘控制语句的时候就是这句不好掌握。

20 楼

用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)

我来回复

您尚未登录,请登录后再回复。点此登录或注册