易码技术论坛

 找回密码
 加入易码
搜索
查看: 320576|回复: 8

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

[复制链接]
发表于 2006-12-31 20:49:22 | 显示全部楼层
比如:检测a,b同时按下
if (CheckKey('A') && CheckKey('B'))
 楼主| 发表于 2006-12-31 20:52:09 | 显示全部楼层
哎呀!我怎么把这个函数给忘了?!看来对LAVA还是不够熟悉,我还以为自己进步得很快呢.

Thx,Lee真是一语惊醒梦中人啊.
发表于 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[21][13];
这样你有park[0][0]~park[20][12]共21*13个数组可用!
 楼主| 发表于 2007-1-1 19:06:25 | 显示全部楼层
......
是我表达不清楚吗?

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

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

感觉好象被人看作超级菜鸟了,郁闷啊~~
发表于 2007-1-1 19:11:04 | 显示全部楼层
POP?POP不是弹栈吗?POP后就不用return了……
PS:LS元旦还上网啊?
 楼主| 发表于 2007-1-1 19:29:29 | 显示全部楼层
请问POP怎么用呢,能不能给个实例?
GVBASIC的求助里说得好抽象
发表于 2007-1-2 13:08:07 | 显示全部楼层
10 gosub 30
20 end
30 pop
40 goto 20

结束子程序,但是不返回调用点(和return的区别).
 楼主| 发表于 2007-1-6 21:46:22 | 显示全部楼层
了解了,thx
 楼主| 发表于 2006-12-31 20:17:57 | 显示全部楼层 |阅读模式
  这是在学习立天最近写的bas版 文件列表 时遇到的问题:
  GVBASIC中的 POP、POS 语句是用来干什么的,怎么用?

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

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

扫雷原代码如下:
  1. 0 :
  2. 10 CLEAR : GRAPH : DIM M(22,14),X(273),Y(273):A =8
  3. //说明一下,M(22,14)是雷区数组,我把雷区最外围标记了一下,来终止探测,所以是23x15,实际看到的是21x13.
  4. 11 LOCATE 2,7: PRINT "级别:";A -2;" ":MAX =A *10 -20: BOX 43,35,107,45
  5. 12 B =7: GOSUB 65: GOSUB 66: GOSUB 65: IF K =22  THEN A =A +1: IF A >12  THEN A =12
  6. 13 IF K =23  THEN A =A -1: IF A <3  THEN A =3
  7. 14 IF K =27  THEN TEXT : PRINT "END PROGRAMMA.": END
  8. 15 IF K <>13  THEN 11  ELSE CLS
  9. 20 LOCATE 2,7: PRINT "挖 地 雷": LOCATE 3,7: PRINT "载入中.."
  10. 21 BOX 40,14,120,50: BOX 38,12,122,52
  11. 22 FOR I =1  TO MAX
  12. 23 A =INT( RND(1) *21) +1:B =INT( RND(1) *13) +1: IF M(A,B) THEN 23  ELSE M(A,B) =1
  13. 24 NEXT : FOR A =0  TO 22:M(A,0) =5:M(A,14) =5: NEXT
  14. 25 FOR B =1  TO 13:M(0,B) =5:M(22,B) =5: NEXT
  15. 26 :
  16. 27 :
  17. 28 :
  18. 29 GRAPH : PRINT "思考",MAX /10;"级",MAX,"请看","求助";: LINE 32,1,32,79
  19. 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
  20. 40 GOTO 100
  21. //这是画图形的子程序
  22. 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
  23. 51 BOX M,N,M +4,N +4,1: RETURN
  24. 52 BOX M,N,M +4,N +4,1,0: RETURN
  25. 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
  26. 54 LINE M +2,N,M +2,N +4: RETURN
  27. 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
  28. 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
  29. 57 BOX M +3,N,M +3,N +4: BOX M +1,N,M +1,N +2: DRAW M +2,N +2: RETURN
  30. 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
  31. 59 BOX M +1,N,M +3,N +4: DRAW M +3,N +1,0: DRAW M +2,N +2: RETURN
  32. 60 BOX M +3,N,M +3,N +4: BOX M +1,N,M +2,N: RETURN
  33. 61 BOX M +1,N,M +3,N +4: DRAW M +2,N +2: RETURN
  34. 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
  35. 63 LINE M,N,M +4,N +4: LINE M,N +4,M +4,N: RETURN
  36. 64 LINE M +1,N +4,M +4,N +1: DRAW M,N +3: RETURN
  37. 65 M =A *6 +27:N =B *6 -5: BOX M,N,M +6,N +6,1,2: RETURN
  38. 66 K$ =INKEY$:K =ASC(K$): RETURN
  39. 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
  40. 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
  41. 69 RETURN
  42. -----------回溯部分------------
  43. 70 LOCATE 1,1: PRINT "清理":L =1:X(L) =A:Y(L) =B: GOSUB 67: IF M(A,B) >10  THEN 90
  44. 71 X(L) =A:Y(L) =B:M(A,B) =19: IF L =0  THEN 90
  45. 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)
  46. 73 X2 =M(A -1,B): IF X2 =0  THEN A =A -1: GOSUB 67:A =C:B =D:X2 =M(A -1,B)
  47. 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)
  48. 75 X4 =M(A,B +1): IF X4 =0  THEN B =B +1: GOSUB 67:A =C:B =D:X4 =M(A,B +1)
  49. 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)
  50. 77 X6 =M(A +1,B): IF X6 =0  THEN A =A +1: GOSUB 67:A =C:B =D:X6 =M(A +1,B)
  51. 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)
  52. 79 X8 =M(A,B -1): IF X8 =0  THEN B =B -1: GOSUB 67:A =C:B =D:X8 =M(A,B -1)
  53. 80 IF X1 =10  THEN A =A -1:B =B -1:L =L +1: GOTO 71
  54. 81 IF X2 =10  THEN A =A -1:L =L +1: GOTO 71
  55. 82 IF X3 =10  THEN A =A -1:B =B +1:L =L +1: GOTO 71
  56. 83 IF X4 =10  THEN B =B +1:L =L +1: GOTO 71
  57. 84 IF X5 =10  THEN A =A +1:B =B +1:L =L +1: GOTO 71
  58. 85 IF X6 =10  THEN A =A +1:L =L +1: GOTO 71
  59. 86 IF X7 =10  THEN A =A +1:B =B -1:L =L +1: GOTO 71
  60. 87 IF X8 =10  THEN B =B -1:L =L +1: GOTO 71
  61. 88 L =L -1:A =X(L):B =Y(L)
  62. 89 IF L >1  THEN 72
  63. 90 IF XUM +MAX =273  THEN 92
  64. 91 LOCATE 1,1: PRINT "思考": RETURN
  65. ------------------------------
  66. 92 FOR A =1  TO 21: FOR B =1  TO 13
  67. 93 IF M(A,B) =1  THEN I =2: GOSUB 50:I =14: GOSUB 50
  68. 94 NEXT : NEXT
  69. 95 :
  70. 96 LOCATE 1,1: PRINT "完成": GOSUB 66: GOTO 10
  71. 97 :
  72. 98 :
  73. 99 GOTO 110
  74. 100 X =1:Y =1
  75. 110 A =X:B =Y: GOSUB 65: GOSUB 66: GOSUB 65
  76. 120 IF K =22  THEN X =X +1: IF X >21  THEN X =1
  77. 130 IF K =23  THEN X =X -1: IF X <1  THEN X =21
  78. 140 IF K =20  THEN Y =Y -1: IF Y <1  THEN Y =13
  79. 150 IF K =21  THEN Y =Y +1: IF Y >13  THEN Y =1
  80. 160 IF K =13  THEN IF M(X,Y) =0  THEN GOSUB 70  ELSE IF M(X,Y) =1  THEN 1000
  81. 170 IF K =32  THEN 2000
  82. 180 IF K =19  AND M(A,B) >10  THEN 2060
  83. 190 IF K =28  THEN 10
  84. 200 IF K =27  THEN TEXT : PRINT "END PROGRAMMA.": END
  85. 210 IF K <>25  THEN 110
  86. 220 CLS : PRINT "<方向键> 移动光标","<输入> 挖开地面","<空格> 标记"
  87. 230 PRINT "<"; CHR$(28);"税> 连续挖开","<F1> 重新开局";: GOSUB 66: IF K =27  THEN 300
  88. 240 CLS : LOCATE 2,4: PRINT "挖地雷@2006/9/1": LOCATE 3,5: PRINT "By Windy.Bell"
  89. 250 LOCATE 4,4: PRINT "All rights left"
  90. 260 BOX 18,10,150,66: BOX 19,67,151,68: BOX 151,11,152,68
  91. 270 GOSUB 66: IF K =20  THEN 220
  92. 280 :
  93. 290 :
  94. 300 CLS : PRINT "思考",MAX /10;"级",MAX -SUM,"请看","求助";: LINE 32,1,32,79
  95. 310 FOR B =1  TO 13: FOR A =1  TO 21
  96. 320 K =M(A,B): IF K <2  THEN I =1
  97. 330 IF K =2  OR K =3  THEN I =14
  98. 340 IF K >9  THEN I =K -7: IF I >11  THEN I =3
  99. 350 GOSUB 50: NEXT : NEXT
  100. 360 :
  101. 370 :
  102. 380 :
  103. 390 :
  104. 400 :
  105. 500 GOTO 110
  106. 1000 I =2: GOSUB 50:I =12: GOSUB 50
  107. 1010 LOCATE 1,1: FOR A =1  TO 21: FOR B =1  TO 13:I =2
  108. 1020 IF M(A,B) =1  THEN GOSUB 50:I =12: GOSUB 50:ER =ER +1
  109. 1030 IF M(A,B) =2  THEN GOSUB 50:I =13: GOSUB 50:ER =ER +1
  110. 1040 NEXT : NEXT : IF ER =0  THEN PRINT "完成" ELSE PRINT "失败"
  111. 1050 GOSUB 66: GOTO 10
  112. 2000 IF M(A,B) >4  THEN 110
  113. 2010 I =2: GOSUB 50: IF M(A,B) >1  THEN M(A,B) =M(A,B) -2:I =1: GOTO 2020
  114. 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
  115. 2020 GOSUB 50: IF I =1  THEN SUM =SUM -1  ELSE SUM =SUM +1
  116. 2030 LOCATE 3,1: PRINT MAX -SUM;" ";
  117. 2040 GOTO 110
  118. 2050 GOTO 1010
  119. 2060 O =0:K =0: FOR AA =-1  TO 1: FOR BB =-1  TO 1
  120. 2070 IF M(A +AA,B +BB) =3  OR M(A +AA,B +BB) =2  THEN O =O +1
  121. 2080 IF M(A +AA,B +BB) =1  THEN K =K +1
  122. 2090 NEXT : NEXT : IF O <M(A,B) -10  THEN 110
  123. 2100 FOR AA =-1  TO 1: FOR BB =-1  TO 1
  124. 2110 CC =A:DD =B:A =A +AA:B =B +BB
  125. 2120 IF M(A,B) >4  THEN 2150
  126. 2130 IF M(A,B) =0  THEN GOSUB 70
  127. 2140 IF M(A,B) =1  THEN I =2: GOSUB 50:I =12: GOSUB 50
  128. 2150 A =CC:B =DD: NEXT : NEXT
  129. 2160 IF K  THEN 1010  ELSE 110
复制代码

扫雷.rar

5 KB, 下载次数: 115

BAS版扫雷及原代码

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-19 17:19 , Processed in 0.016602 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表