回 帖 发 新 帖 刷新版面

主题:帮忙看看代码

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个回复)

沙发

DIM box%(128, 96)
数组上限越界
改成:
dim box%(1 to 128 , 1 to 96)

板凳

越界????

1.  Randomize后面没带参数,应该是-32766到32767之间的一个整形.
2.  屏幕默认为0方式,文本方式下怎么能画线呢?

3 楼

1.  Randomize后面没带参数,应该是-32766到32767之间的一个整形.
2.  屏幕默认为0方式,文本方式下怎么能画线呢?
2楼的,1,randomize我不带参数是为了让用户自行输入
2,没写screen是我粘贴的错误

4 楼

那么,
       还有什么错的?

5 楼

你运行一下就知道哪里错了
可我不知道怎么改

6 楼

我可以很生气,很负责任,很蛮不讲理,很霸道,毫不给情面的告诉你:理论上我认为它没有错.

我在CLS前面加了一句SCREEN 12
运行正常没出错,至于什么是你想要的结果,我搞不清楚,
我缺少图形操作的那条筋.

7 楼

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 楼

这是智能的生成迷宫地图的程序

9 楼

智能??????
迷宫??????


算是抄袭剽窃你的作品,有时间你自己看看:

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 楼

只能说你没有认真看我的程序,领会我的意思,我出的那些方块是保证迷宫至少有一条路的,其他的根本没生成
  另外我又没说这个程序是我先做出来的,我只是一个菜鸟,刚学qb5天,用的是清华出版社的2级教程,因为以前有过文曲星编程基础,所以自己做了个迷宫来检验一下自己的qb语句运用,仅此而已

我来回复

您尚未登录,请登录后再回复。点此登录或注册