leesoft 发表于 2006-12-31 20:49:22

比如:检测a,b同时按下
if (CheckKey('A') && CheckKey('B'))

windybell 发表于 2006-12-31 20:52:09

哎呀!我怎么把这个函数给忘了?!看来对LAVA还是不够熟悉,我还以为自己进步得很快呢.

Thx,Lee真是一语惊醒梦中人啊.

wqstar028 发表于 2007-1-1 18:23:58

这是在学习立天最近写的bas版 文件列表 时遇到的问题:
  GVBASIC中的 POP、POS 语句是用来干什么的,怎么用?

答:取光标位置的吧!很久没用BAS了,有点生了!呵呵~

这是在想把bas版的 格斗 移植到LAVA时遇到的问题:
  GVBASIC中可以用PEEK()来检查同时按键的情况,LAVA中如何实现同时检测两个按键?
  我当然可以用 q=*addr; 这种语句来实现PEEK()的功能,但可移植性就很成问题了。

答:LEE已经答了,我就不罗嗦了!


这是以前在写bas版扫雷是遇到的问题:
  我定义了一个数组来记录已经探测过的位置,已实现回溯法.在一个21x13的区域里,需要把数组下标定义到最小为多少时才恰好够用?
  这纯是个数学问题,我直接定义为274了.

答:这个建议你定义一个二维数组,方便一些,如:
char park;
这样你有park~park共21*13个数组可用!

windybell 发表于 2007-1-1 19:06:25

......
是我表达不清楚吗?

第三个问题不是雷区数组定义为多少的问题,是用回溯法时暂存扫描坐标的数组最小可以设为多大.

我最近用LAVA写的扫雷定义的雷区数组就为21x13

感觉好象被人看作超级菜鸟了,郁闷啊~~

starwing 发表于 2007-1-1 19:11:04

POP?POP不是弹栈吗?POP后就不用return了……
PS:LS元旦还上网啊?

windybell 发表于 2007-1-1 19:29:29

请问POP怎么用呢,能不能给个实例?
GVBASIC的求助里说得好抽象

gameghost 发表于 2007-1-2 13:08:07

10 gosub 30
20 end
30 pop
40 goto 20

结束子程序,但是不返回调用点(和return的区别).

windybell 发表于 2007-1-6 21:46:22

了解了,thx

windybell 发表于 2006-12-31 20:17:57

好几个问题,BASIC、LAVA...

这是在学习立天最近写的bas版 文件列表 时遇到的问题:
  GVBASIC中的 POP、POS 语句是用来干什么的,怎么用?

这是在想把bas版的 格斗 移植到LAVA时遇到的问题:
  GVBASIC中可以用PEEK()来检查同时按键的情况,LAVA中如何实现同时检测两个按键?
  我当然可以用 q=*addr; 这种语句来实现PEEK()的功能,但可移植性就很成问题了。

这是以前在写bas版扫雷是遇到的问题:
  我定义了一个数组来记录已经探测过的位置,已实现回溯法.在一个21x13的区域里,需要把数组下标定义到最小为多少时才恰好够用?
  这纯是个数学问题,我直接定义为274了.

扫雷原代码如下:

0 :
10 CLEAR : GRAPH : DIM M(22,14),X(273),Y(273):A =8

//说明一下,M(22,14)是雷区数组,我把雷区最外围标记了一下,来终止探测,所以是23x15,实际看到的是21x13.

11 LOCATE 2,7: PRINT "级别:";A -2;" ":MAX =A *10 -20: BOX 43,35,107,45
12 B =7: GOSUB 65: GOSUB 66: GOSUB 65: IF K =22THEN A =A +1: IF A >12THEN A =12
13 IF K =23THEN A =A -1: IF A <3THEN A =3
14 IF K =27THEN TEXT : PRINT "END PROGRAMMA.": END
15 IF K <>13THEN 11ELSE CLS
20 LOCATE 2,7: PRINT "挖 地 雷": LOCATE 3,7: PRINT "载入中.."
21 BOX 40,14,120,50: BOX 38,12,122,52
22 FOR I =1TO MAX
23 A =INT( RND(1) *21) +1:B =INT( RND(1) *13) +1: IF M(A,B) THEN 23ELSE M(A,B) =1
24 NEXT : FOR A =0TO 22:M(A,0) =5:M(A,14) =5: NEXT
25 FOR B =1TO 13:M(0,B) =5:M(22,B) =5: NEXT
26 :
27 :
28 :
29 GRAPH : PRINT "思考",MAX /10;"级",MAX,"请看","求助";: LINE 32,1,32,79
30 FOR B =1TO 13: FOR A =0TO 20: BOX A *6 +34,B *6 -4,A *6 +38,B *6,1: NEXT : NEXT
40 GOTO 100

//这是画图形的子程序

50 M =A *6 +28:N =B *6 -4: ON IGOSUB 51,52,53,54,55,56,57,58,59,60,61,62,63,64: RETURN
51 BOX M,N,M +4,N +4,1: RETURN
52 BOX M,N,M +4,N +4,1,0: RETURN
53 LINE M,N,M +4,N +4: LINE M,N +4,M +4,N: LINE M +2,N,M +4,N +2: LINE M,N +2,M +2,N +4: RETURN
54 LINE M +2,N,M +2,N +4: RETURN
55 BOX M +1,N,M +3,N +4: DRAW M +1,N +1,0: DRAW M +2,N +2: DRAW M +3,N +3,0: RETURN
56 BOX M +1,N,M +3,N +4: DRAW M +1,N +1,0: DRAW M +2,N +2: DRAW M +1,N +3,0: RETURN
57 BOX M +3,N,M +3,N +4: BOX M +1,N,M +1,N +2: DRAW M +2,N +2: RETURN
58 BOX M +1,N,M +3,N +4: DRAW M +3,N +1,0: DRAW M +2,N +2: DRAW M +1,N +3,0: RETURN
59 BOX M +1,N,M +3,N +4: DRAW M +3,N +1,0: DRAW M +2,N +2: RETURN
60 BOX M +3,N,M +3,N +4: BOX M +1,N,M +2,N: RETURN
61 BOX M +1,N,M +3,N +4: DRAW M +2,N +2: RETURN
62 LINE M,N,M +4,N +4: LINE M,N +4,M +4,N: LINE M,N +2,M +4,N +2: LINE M +2,N,M +2,N +4: RETURN
63 LINE M,N,M +4,N +4: LINE M,N +4,M +4,N: RETURN
64 LINE M +1,N +4,M +4,N +1: DRAW M,N +3: RETURN
65 M =A *6 +27:N =B *6 -5: BOX M,N,M +6,N +6,1,2: RETURN
66 K$ =INKEY$:K =ASC(K$): RETURN
67 J =0: FOR PP =-1TO 1: FOR QQ =-1TO 1: IF M(A +PP,B +QQ) =1OR M(A +PP,B +QQ) =3THEN J =J +1
68 NEXT : NEXT :M(A,B) =J +10:I =2: GOSUB 50:I =J +3: GOSUB 50:XUM =XUM +1: IF XUM =273 -MAXTHEN 92
69 RETURN

-----------回溯部分------------

70 LOCATE 1,1: PRINT "清理":L =1:X(L) =A:Y(L) =B: GOSUB 67: IF M(A,B) >10THEN 90
71 X(L) =A:Y(L) =B:M(A,B) =19: IF L =0THEN 90
72 C =A:D =B:X1 =M(A -1,B -1): IF X1 =0THEN A =A -1:B =B -1: GOSUB 67:A =C:B =D:X1 =M(A -1,B -1)
73 X2 =M(A -1,B): IF X2 =0THEN A =A -1: GOSUB 67:A =C:B =D:X2 =M(A -1,B)
74 X3 =M(A -1,B +1): IF X3 =0THEN A =A -1:B =B +1: GOSUB 67:A =C:B =D:X3 =M(A -1,B +1)
75 X4 =M(A,B +1): IF X4 =0THEN B =B +1: GOSUB 67:A =C:B =D:X4 =M(A,B +1)
76 X5 =M(A +1,B +1): IF X5 =0THEN A =A +1:B =B +1: GOSUB 67:A =C:B =D:X5 =M(A +1,B +1)
77 X6 =M(A +1,B): IF X6 =0THEN A =A +1: GOSUB 67:A =C:B =D:X6 =M(A +1,B)
78 X7 =M(A +1,B -1): IF X7 =0THEN A =A +1:B =B -1: GOSUB 67:A =C:B =D:X7 =M(A +1,B -1)
79 X8 =M(A,B -1): IF X8 =0THEN B =B -1: GOSUB 67:A =C:B =D:X8 =M(A,B -1)
80 IF X1 =10THEN A =A -1:B =B -1:L =L +1: GOTO 71
81 IF X2 =10THEN A =A -1:L =L +1: GOTO 71
82 IF X3 =10THEN A =A -1:B =B +1:L =L +1: GOTO 71
83 IF X4 =10THEN B =B +1:L =L +1: GOTO 71
84 IF X5 =10THEN A =A +1:B =B +1:L =L +1: GOTO 71
85 IF X6 =10THEN A =A +1:L =L +1: GOTO 71
86 IF X7 =10THEN A =A +1:B =B -1:L =L +1: GOTO 71
87 IF X8 =10THEN B =B -1:L =L +1: GOTO 71
88 L =L -1:A =X(L):B =Y(L)
89 IF L >1THEN 72
90 IF XUM +MAX =273THEN 92
91 LOCATE 1,1: PRINT "思考": RETURN

------------------------------

92 FOR A =1TO 21: FOR B =1TO 13
93 IF M(A,B) =1THEN I =2: GOSUB 50:I =14: GOSUB 50
94 NEXT : NEXT
95 :
96 LOCATE 1,1: PRINT "完成": GOSUB 66: GOTO 10
97 :
98 :
99 GOTO 110
100 X =1:Y =1
110 A =X:B =Y: GOSUB 65: GOSUB 66: GOSUB 65
120 IF K =22THEN X =X +1: IF X >21THEN X =1
130 IF K =23THEN X =X -1: IF X <1THEN X =21
140 IF K =20THEN Y =Y -1: IF Y <1THEN Y =13
150 IF K =21THEN Y =Y +1: IF Y >13THEN Y =1
160 IF K =13THEN IF M(X,Y) =0THEN GOSUB 70ELSE IF M(X,Y) =1THEN 1000
170 IF K =32THEN 2000
180 IF K =19AND M(A,B) >10THEN 2060
190 IF K =28THEN 10
200 IF K =27THEN TEXT : PRINT "END PROGRAMMA.": END
210 IF K <>25THEN 110
220 CLS : PRINT "<方向键> 移动光标","<输入> 挖开地面","<空格> 标记"
230 PRINT "<"; CHR$(28);"税> 连续挖开","<F1> 重新开局";: GOSUB 66: IF K =27THEN 300
240 CLS : LOCATE 2,4: PRINT "挖地雷@2006/9/1": LOCATE 3,5: PRINT "By Windy.Bell"
250 LOCATE 4,4: PRINT "All rights left"
260 BOX 18,10,150,66: BOX 19,67,151,68: BOX 151,11,152,68
270 GOSUB 66: IF K =20THEN 220
280 :
290 :
300 CLS : PRINT "思考",MAX /10;"级",MAX -SUM,"请看","求助";: LINE 32,1,32,79
310 FOR B =1TO 13: FOR A =1TO 21
320 K =M(A,B): IF K <2THEN I =1
330 IF K =2OR K =3THEN I =14
340 IF K >9THEN I =K -7: IF I >11THEN I =3
350 GOSUB 50: NEXT : NEXT
360 :
370 :
380 :
390 :
400 :
500 GOTO 110
1000 I =2: GOSUB 50:I =12: GOSUB 50
1010 LOCATE 1,1: FOR A =1TO 21: FOR B =1TO 13:I =2
1020 IF M(A,B) =1THEN GOSUB 50:I =12: GOSUB 50:ER =ER +1
1030 IF M(A,B) =2THEN GOSUB 50:I =13: GOSUB 50:ER =ER +1
1040 NEXT : NEXT : IF ER =0THEN PRINT "完成" ELSE PRINT "失败"
1050 GOSUB 66: GOTO 10
2000 IF M(A,B) >4THEN 110
2010 I =2: GOSUB 50: IF M(A,B) >1THEN M(A,B) =M(A,B) -2:I =1: GOTO 2020
2015 IF SUM <MAXAND M(A,B) <2THEN M(A,B) =M(A,B) +2:I =14ELSE I =1: GOSUB 50: GOTO 110
2020 GOSUB 50: IF I =1THEN SUM =SUM -1ELSE SUM =SUM +1
2030 LOCATE 3,1: PRINT MAX -SUM;" ";
2040 GOTO 110
2050 GOTO 1010
2060 O =0:K =0: FOR AA =-1TO 1: FOR BB =-1TO 1
2070 IF M(A +AA,B +BB) =3OR M(A +AA,B +BB) =2THEN O =O +1
2080 IF M(A +AA,B +BB) =1THEN K =K +1
2090 NEXT : NEXT : IF O <M(A,B) -10THEN 110
2100 FOR AA =-1TO 1: FOR BB =-1TO 1
2110 CC =A:DD =B:A =A +AA:B =B +BB
2120 IF M(A,B) >4THEN 2150
2130 IF M(A,B) =0THEN GOSUB 70
2140 IF M(A,B) =1THEN I =2: GOSUB 50:I =12: GOSUB 50
2150 A =CC:B =DD: NEXT : NEXT
2160 IF KTHEN 1010ELSE 110
页: [1]
查看完整版本: 好几个问题,BASIC、LAVA...