主题:是高手的进!!!
火拳艾斯
[专家分:0] 发布于 2011-07-13 18:34:00
怎么用上下左右键控制一个小人(就是ascii码(2))在二维数组中走!!急求啊!!!
回复列表 (共3个回复)
沙发
火拳艾斯 [专家分:0] 发布于 2011-07-13 19:03:00
没人吗????
幽灵密码!!!!!
板凳
moz [专家分:37620] 发布于 2011-07-15 19:53:00
急到什么程度了?
书本上应该都有讲怎样捕捉按键的吧?
如果是在QB里写,一般捕捉方向键都会用inkey$()函数
再加一个循环,不断的去检测是否有按键点击,
如果没有按键,则继续空循环,
如果有按键,到底是哪个按键,然后该做什么事情?
说的在二维数组中移动,这听的不太明白,
应该是在屏幕中按座标移动吧?
一是要在新位置上显示目标,
二是要在旧位置消除原显示.
一般容错度较高的,都是先消除,再显示.
这样可以保证显示正常,
否则如果新旧位置重复的时候,消除动作会导致目标失踪.
以下是我模拟文本输入框做的一个函数,自己看看.
有不明白的可以问,
但,我不会帮你写.
因为我不是高手.
DEFINT A-Z
FUNCTION Inputs$ (Ou$, k$, x, y, l, pv, ft)
STATIC Ins, c$
DIM a AS STRING * 81
a = Ou$
IF pv < 1 THEN pv = 1
IF pv > l THEN pv = l
LOCATE x, y, 0
PRINT LEFT$(a, l);
GOSUB Inputs200
DO
DO WHILE (k$ = "" AND ft < 1): k$ = INKEY$: LOOP
SELECT CASE k$
CASE "": EXIT DO
CASE CHR$(13), CHR$(10), CHR$(13) + CHR$(10): EXIT DO '回车
CASE CHR$(0) + CHR$(71): pv = 1 'HOME
CASE CHR$(0) + CHR$(75): pv = pv - 1 '左
CASE CHR$(0) + CHR$(77): pv = pv + 1 '右
CASE CHR$(0) + CHR$(79): pv = LEN(RTRIM$(a)) + 1 'END
CASE CHR$(0) + CHR$(82): Ins = NOT Ins 'INSERT
CASE CHR$(0) + CHR$(83): MID$(a, pv) = MID$(a, pv + 1) 'DEL
CASE CHR$(25), CHR$(127): GOSUB Inputs300 'Ctrl+Y
CASE CHR$(27): IF LTRIM$(a) <> "" OR pv <> 1 THEN GOSUB Inputs300 ELSE EXIT DO
CASE IS > CHR$(31): GOSUB input400
CASE CHR$(20) 'Ctrl+U
c$ = RTRIM$(LTRIM$(MID$(a, pv)))
MID$(a, pv) = SPACE$(l)
CASE CHR$(8) 'bs
IF pv > 1 THEN
MID$(a, pv - 1) = MID$(a, pv)
pv = pv - 1
END IF
CASE CHR$(22) 'Ctrl+V
k$ = c$
GOSUB input400
CASE ELSE
IF ft > 0 THEN EXIT DO
END SELECT
IF pv < 1 THEN pv = 1
IF pv > l THEN pv = l
a = LEFT$(a, l)
LOCATE x, y, 0: PRINT LEFT$(a, l);
GOSUB Inputs200
k$ = ""
LOOP UNTIL ft > 0
Inputs$ = LEFT$(a, l)
GOSUB Inputs200
IF ft < 1 THEN LOCATE , , 0 ELSE LOCATE , , 1
IF pv = l AND MID$(a, l, 1) <> " " THEN k$ = CHR$(0) + CHR$(77) ELSE k$ = ""
EXIT FUNCTION
3 楼
幽灵密码 [专家分:3510] 发布于 2011-07-16 16:14:00
前两天不在
Moz说的专业
我来回复