- 注册时间
- 2006-7-15
- 最后登录
- 1970-1-1
|
这是在学习立天最近写的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 =22 THEN A =A +1: IF A >12 THEN A =12
- 13 IF K =23 THEN A =A -1: IF A <3 THEN A =3
- 14 IF K =27 THEN TEXT : PRINT "END PROGRAMMA.": END
- 15 IF K <>13 THEN 11 ELSE CLS
- 20 LOCATE 2,7: PRINT "挖 地 雷": LOCATE 3,7: PRINT "载入中.."
- 21 BOX 40,14,120,50: BOX 38,12,122,52
- 22 FOR I =1 TO MAX
- 23 A =INT( RND(1) *21) +1:B =INT( RND(1) *13) +1: IF M(A,B) THEN 23 ELSE M(A,B) =1
- 24 NEXT : FOR A =0 TO 22:M(A,0) =5:M(A,14) =5: NEXT
- 25 FOR B =1 TO 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 =1 TO 13: FOR A =0 TO 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 I GOSUB 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 =-1 TO 1: FOR QQ =-1 TO 1: IF M(A +PP,B +QQ) =1 OR M(A +PP,B +QQ) =3 THEN 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 -MAX THEN 92
- 69 RETURN
- -----------回溯部分------------
- 70 LOCATE 1,1: PRINT "清理":L =1:X(L) =A:Y(L) =B: GOSUB 67: IF M(A,B) >10 THEN 90
- 71 X(L) =A:Y(L) =B:M(A,B) =19: IF L =0 THEN 90
- 72 C =A:D =B:X1 =M(A -1,B -1): IF X1 =0 THEN 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 =0 THEN A =A -1: GOSUB 67:A =C:B =D:X2 =M(A -1,B)
- 74 X3 =M(A -1,B +1): IF X3 =0 THEN 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 =0 THEN B =B +1: GOSUB 67:A =C:B =D:X4 =M(A,B +1)
- 76 X5 =M(A +1,B +1): IF X5 =0 THEN 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 =0 THEN A =A +1: GOSUB 67:A =C:B =D:X6 =M(A +1,B)
- 78 X7 =M(A +1,B -1): IF X7 =0 THEN 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 =0 THEN B =B -1: GOSUB 67:A =C:B =D:X8 =M(A,B -1)
- 80 IF X1 =10 THEN A =A -1:B =B -1:L =L +1: GOTO 71
- 81 IF X2 =10 THEN A =A -1:L =L +1: GOTO 71
- 82 IF X3 =10 THEN A =A -1:B =B +1:L =L +1: GOTO 71
- 83 IF X4 =10 THEN B =B +1:L =L +1: GOTO 71
- 84 IF X5 =10 THEN A =A +1:B =B +1:L =L +1: GOTO 71
- 85 IF X6 =10 THEN A =A +1:L =L +1: GOTO 71
- 86 IF X7 =10 THEN A =A +1:B =B -1:L =L +1: GOTO 71
- 87 IF X8 =10 THEN B =B -1:L =L +1: GOTO 71
- 88 L =L -1:A =X(L):B =Y(L)
- 89 IF L >1 THEN 72
- 90 IF XUM +MAX =273 THEN 92
- 91 LOCATE 1,1: PRINT "思考": RETURN
- ------------------------------
- 92 FOR A =1 TO 21: FOR B =1 TO 13
- 93 IF M(A,B) =1 THEN 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 =22 THEN X =X +1: IF X >21 THEN X =1
- 130 IF K =23 THEN X =X -1: IF X <1 THEN X =21
- 140 IF K =20 THEN Y =Y -1: IF Y <1 THEN Y =13
- 150 IF K =21 THEN Y =Y +1: IF Y >13 THEN Y =1
- 160 IF K =13 THEN IF M(X,Y) =0 THEN GOSUB 70 ELSE IF M(X,Y) =1 THEN 1000
- 170 IF K =32 THEN 2000
- 180 IF K =19 AND M(A,B) >10 THEN 2060
- 190 IF K =28 THEN 10
- 200 IF K =27 THEN TEXT : PRINT "END PROGRAMMA.": END
- 210 IF K <>25 THEN 110
- 220 CLS : PRINT "<方向键> 移动光标","<输入> 挖开地面","<空格> 标记"
- 230 PRINT "<"; CHR$(28);"税> 连续挖开","<F1> 重新开局";: GOSUB 66: IF K =27 THEN 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 =20 THEN 220
- 280 :
- 290 :
- 300 CLS : PRINT "思考",MAX /10;"级",MAX -SUM,"请看","求助";: LINE 32,1,32,79
- 310 FOR B =1 TO 13: FOR A =1 TO 21
- 320 K =M(A,B): IF K <2 THEN I =1
- 330 IF K =2 OR K =3 THEN I =14
- 340 IF K >9 THEN I =K -7: IF I >11 THEN 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 =1 TO 21: FOR B =1 TO 13:I =2
- 1020 IF M(A,B) =1 THEN GOSUB 50:I =12: GOSUB 50:ER =ER +1
- 1030 IF M(A,B) =2 THEN GOSUB 50:I =13: GOSUB 50:ER =ER +1
- 1040 NEXT : NEXT : IF ER =0 THEN PRINT "完成" ELSE PRINT "失败"
- 1050 GOSUB 66: GOTO 10
- 2000 IF M(A,B) >4 THEN 110
- 2010 I =2: GOSUB 50: IF M(A,B) >1 THEN M(A,B) =M(A,B) -2:I =1: GOTO 2020
- 2015 IF SUM <MAX AND M(A,B) <2 THEN M(A,B) =M(A,B) +2:I =14 ELSE I =1: GOSUB 50: GOTO 110
- 2020 GOSUB 50: IF I =1 THEN SUM =SUM -1 ELSE SUM =SUM +1
- 2030 LOCATE 3,1: PRINT MAX -SUM;" ";
- 2040 GOTO 110
- 2050 GOTO 1010
- 2060 O =0:K =0: FOR AA =-1 TO 1: FOR BB =-1 TO 1
- 2070 IF M(A +AA,B +BB) =3 OR M(A +AA,B +BB) =2 THEN O =O +1
- 2080 IF M(A +AA,B +BB) =1 THEN K =K +1
- 2090 NEXT : NEXT : IF O <M(A,B) -10 THEN 110
- 2100 FOR AA =-1 TO 1: FOR BB =-1 TO 1
- 2110 CC =A:DD =B:A =A +AA:B =B +BB
- 2120 IF M(A,B) >4 THEN 2150
- 2130 IF M(A,B) =0 THEN GOSUB 70
- 2140 IF M(A,B) =1 THEN I =2: GOSUB 50:I =12: GOSUB 50
- 2150 A =CC:B =DD: NEXT : NEXT
- 2160 IF K THEN 1010 ELSE 110
复制代码 |
-
-
扫雷.rar
5 KB, 下载次数: 115
BAS版扫雷及原代码
|