主题:帮忙看看代码
jyf1987
[专家分:930] 发布于 2005-06-21 17:01:00
CLEAR
DIM box%(128, 96)
RANDOMIZE
LET i = 1: j = 1
DO UNTIL i = 128
k = RND: PRINT i, j, k
IF k <= .5 AND box%(i + 1, j) = 0 THEN
LET i = i + 1: LET box%(i, j) = box%(i, j) + 1
ELSEIF k < .75 AND box%(i, j + 1) = 0 THEN
LET j = j + 1: LET box%(i, j) = box%(i, j) + 1
ELSEIF j > 1 THEN
LET j = j - 1: LET box%(i, j) = box%(i, j) + 1
END IF
LOOP
CLS
FOR t = 1 TO 128
FOR p = 1 TO 96
IF box%(t, p) = 1 THEN LINE (p * 5 - 5, t * 5 - 4)-(p * 5 - 1, t * 4 - 1), 7, BF
NEXT p
NEXT t
END
请大家看看,老是出错
回复列表 (共11个回复)
沙发
QB71 [专家分:1300] 发布于 2005-06-21 17:38:00
DIM box%(128, 96)
数组上限越界
改成:
dim box%(1 to 128 , 1 to 96)
板凳
moz [专家分:37620] 发布于 2005-06-21 18:40:00
越界????
1. Randomize后面没带参数,应该是-32766到32767之间的一个整形.
2. 屏幕默认为0方式,文本方式下怎么能画线呢?
3 楼
jyf1987 [专家分:930] 发布于 2005-06-22 08:24:00
1. Randomize后面没带参数,应该是-32766到32767之间的一个整形.
2. 屏幕默认为0方式,文本方式下怎么能画线呢?
2楼的,1,randomize我不带参数是为了让用户自行输入
2,没写screen是我粘贴的错误
4 楼
moz [专家分:37620] 发布于 2005-06-22 12:13:00
那么,
还有什么错的?
5 楼
jyf1987 [专家分:930] 发布于 2005-06-22 15:14:00
你运行一下就知道哪里错了
可我不知道怎么改
6 楼
moz [专家分:37620] 发布于 2005-06-22 16:13:00
我可以很生气,很负责任,很蛮不讲理,很霸道,毫不给情面的告诉你:理论上我认为它没有错.
我在CLS前面加了一句SCREEN 12
运行正常没出错,至于什么是你想要的结果,我搞不清楚,
我缺少图形操作的那条筋.
7 楼
飞鸟12 [专家分:2830] 发布于 2005-06-22 16:59:00
OPTION BASE 1
DIM box%(128, 96)
RANDOMIZE TIMER
i = 1: j = 1
DO UNTIL i = 128
k = RND
PRINT i, j, k
IF k <= .5 AND box%(i + 1, j) = 0 THEN
i = i + 1
box%(i, j) = box%(i, j) + 1
ELSEIF k < .75 AND box%(i, j + 1) = 0 THEN
j = j + 1
box%(i, j) = box%(i, j) + 1
ELSEIF j > 1 THEN
j = j - 1
box%(i, j) = box%(i, j) + 1
END IF
LOOP
SCREEN 12
FOR t = 1 TO 128
FOR p = 1 TO 96
IF box%(t, p) = 1 THEN
LINE (p * 5 - 5, t * 5 - 4)-(p * 5 - 1, t * 4 - 1), 7, BF
END IF
NEXT p
NEXT t
END
程序到底要干什么呢?
输出一些连续的方块?
8 楼
jyf1987 [专家分:930] 发布于 2005-06-22 21:30:00
这是智能的生成迷宫地图的程序
9 楼
moz [专家分:37620] 发布于 2005-06-24 13:20:00
智能??????
迷宫??????
算是抄袭剽窃你的作品,有时间你自己看看:
DEFINT A-Z
CLEAR
x = 128
y = 96
c = 5
DIM box%(x, y)
SCREEN 12
CLS
LINE (0, 0)-(639, 479), 7, B
FOR i = 5 TO 639 STEP 5
LINE (i, 0)-(i, 479), c
NEXT
FOR j = 5 TO 479 STEP 5
LINE (0, j)-(639, j), c
NEXT
LINE (0, 0)-(5, 5), 1, BF
LINE (635, 475)-(639, 479), 1, BF
RANDOMIZE TIMER
i = 1
j = 1
DO UNTIL i = x AND j = y
II = i
JJ = j
q = 0
DO
DO
k = RND * 3 + 1
j = JJ + (k MOD 2) * (k - 2)
i = II + (k MOD 2 - 1) * (k - 3)
LOOP WHILE i < 1 OR j < 1 OR i > x OR j > y
q = q + 1
LOOP WHILE box%(i, j) AND q < 8
LINE ((II * 5 - (k MOD 2) * 4 - (k \ 4) * 5), (JJ * 5 + (k MOD 2 - 1) * 4 + (k = 1) * 5))-((II * 5 - (k MOD 2) - (k \ 4) * 5), (JJ * 5 + (k MOD 2 - 1) + (k = 1) * 5)), 0
box%(i, j) = 1
LOOP
FOR p = 1 TO 128
FOR t = 1 TO 96
IF box%(p, t) = 0 THEN
i = p
j = t
DO
II = i
JJ = j
q = 0
DO
DO
k = RND * 3 + 1
j = JJ + (k MOD 2) * (k - 2)
i = II + (k MOD 2 - 1) * (k - 3)
LOOP WHILE i < 1 OR j < 1 OR i > x OR j > y
q = q + 1
LOOP WHILE box%(i, j) AND q < 8
LINE ((II * 5 - (k MOD 2) * 4 - (k \ 4) * 5), (JJ * 5 + (k MOD 2 - 1) * 4 + (k = 1) * 5))-((II * 5 - (k MOD 2) - (k \ 4) * 5), (JJ * 5 + (k MOD 2 - 1) + (k = 1) * 5)), 0
box%(i, j) = 2
LOOP WHILE q < 8
END IF
NEXT t, p
k$ = INPUT$(1)
SCREEN 0
还要多说几句废话,QB的随机数根本不能算是真正意义上的随机数,几乎每次运行的效果都差不多一样的,而且数字分布上也有问题的,一不小心就会走进死循环去了.如果精度要求不高的话,建议使用timer.要更随机一点的,当rnd*timer最好的了.具体怎样运用就得看你的具体要求了.
10 楼
jyf1987 [专家分:930] 发布于 2005-06-24 15:19:00
只能说你没有认真看我的程序,领会我的意思,我出的那些方块是保证迷宫至少有一条路的,其他的根本没生成
另外我又没说这个程序是我先做出来的,我只是一个菜鸟,刚学qb5天,用的是清华出版社的2级教程,因为以前有过文曲星编程基础,所以自己做了个迷宫来检验一下自己的qb语句运用,仅此而已
我来回复