主题:[讨论]我以前写过一个俄罗斯方块的程序(有问题),有人愿意接手吗?[代码已贴]
哈哈,问题就是方块落的位置不对…………
一直找不出原因。有人愿意接手吗?
代码现在不在手里,得回家才有。[em1]
===================================================
基本没有注释,高中时候写的呢,当时没有找出问题所在。
我怀疑是对double型数值做绝对等于判断造成的,落点判断不对。
各位大哥可以看看。
===========================================================
'DEFSNG R
DECLARE SUB chuxian (r, a, b)
DECLARE SUB zdz (r, zd, n)
COMMON SHARED r, a, b, zd, n
SCREEN 12
WINDOW (-20, -40)-(640, 480)
DIM SHARED q(14, 8)
DIM SHARED X(20), ge(664)
DIM SHARED U1(344), U2(304), U3(404), U4(504), U5(524), U6(504), U7(524), U8(424), U9(504), U10(504)
DIM SHARED U11(424), U12(504), U13(424), U14(424), U15(504), U16(504), U17(424), U18(424), U19(504)
LINE (0, 80)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (0, 60)-(20, 40), 3, B
LINE (0, 20)-(20, 20), 3
GET (0, 80)-(20, 0), U1
CLS
LINE (0, 20)-(80, 0), 3, B
PAINT (20, 10), 1, 3
LINE (60, 0)-(60, 20), 3
LINE (20, 20)-(40, 0), 3, B
GET (0, 20)-(80, 0), U2
CLS
LINE (0, 40)-(40, 0), 3, B
PAINT (20, 20), 1, 3
LINE (0, 20)-(40, 20), 3
LINE (20, 0)-(20, 40), 3
GET (0, 40)-(40, 0), U3
CLS
LINE (0, 60)-(20, 20), 3, B
PAINT (10, 40), 1, 3
LINE (20, 40)-(40, 0), 3, B
PAINT (30, 20), 1, 3
LINE (0, 40)-(20, 40), 3
LINE (20, 20)-(40, 20), 3
GET (0, 60)-(40, 0), U4
CLS
LINE (0, 20)-(40, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 40)-(60, 20), 3, B
PAINT (40, 30), 1, 3
LINE (20, 0)-(20, 20), 3
LINE (40, 20)-(40, 40), 3
GET (0, 40)-(60, 0), U5
CLS
LINE (0, 40)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (20, 60)-(40, 20), 3, B
PAINT (30, 40), 1, 3
LINE (0, 20)-(20, 20), 3
LINE (20, 40)-(40, 40), 3
GET (0, 60)-(40, 0), U6
CLS
LINE (0, 40)-(40, 20), 3, B
PAINT (20, 30), 1, 3
LINE (20, 20)-(60, 0), 3, B
PAINT (40, 10), 1, 3
LINE (20, 20)-(20, 40), 3
LINE (40, 0)-(40, 20), 3
GET (0, 40)-(60, 0), U7
CLS
LINE (0, 20)-(60, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 40)-(40, 0), 3, B
PAINT (30, 30), 1, 3
GET (0, 40)-(60, 0), U8
CLS
LINE (20, 60)-(40, 0), 3, B
PAINT (30, 20), 1, 3
LINE (0, 40)-(40, 20), 3, B
PAINT (10, 30), 1, 3
GET (0, 60)-(40, 0), U9
CLS
LINE (0, 60)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (0, 40)-(40, 20), 3, B
PAINT (30, 30), 1, 3
GET (0, 60)-(40, 0), U10
CLS
LINE (0, 40)-(60, 20), 3, B
PAINT (20, 30), 1, 3
LINE (20, 40)-(40, 0), 3, B
PAINT (30, 10), 1, 3
GET (0, 40)-(60, 0), U11
CLS
LINE (0, 60)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (0, 40)-(20, 20), 3, B
LINE (20, 60)-(40, 40), 3, B
PAINT (30, 50), 1, 3
GET (0, 60)-(40, 0), U12
CLS
LINE (0, 20)-(60, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 20)-(40, 0), 3, B
LINE (0, 40)-(20, 20), 3, B
PAINT (10, 30), 1, 3
GET (0, 40)-(60, 0), U13
CLS
LINE (0, 40)-(60, 20), 3, B
PAINT (20, 30), 1, 3
LINE (20, 40)-(40, 20), 3, B
LINE (40, 20)-(60, 0), 3, B
PAINT (50, 10), 1, 3
GET (0, 40)-(60, 0), U14
CLS
LINE (20, 60)-(40, 0), 3, B
PAINT (30, 20), 1, 3
LINE (20, 40)-(40, 20), 3, B
LINE (0, 20)-(20, 0), 3, B
PAINT (10, 10), 1, 3
GET (0, 60)-(40, 0), U15
CLS
LINE (20, 60)-(40, 0), 3, B
PAINT (30, 20), 1, 3
LINE (20, 40)-(40, 20), 3, B
LINE (0, 60)-(20, 40), 3, B
PAINT (10, 50), 1, 3
GET (0, 60)-(40, 0), U16
CLS
LINE (0, 40)-(60, 20), 3, B
PAINT (20, 30), 1, 3
LINE (20, 40)-(40, 20), 3, B
LINE (0, 20)-(20, 0), 3, B
PAINT (10, 10), 1, 3
GET (0, 40)-(60, 0), U17
CLS
LINE (0, 20)-(60, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 20)-(40, 0), 3, B
LINE (40, 40)-(60, 20), 3, B
PAINT (50, 30), 1, 3
GET (0, 40)-(60, 0), U18
CLS
LINE (0, 60)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (0, 40)-(20, 20), 3, B
LINE (20, 20)-(40, 0), 3, B
PAINT (30, 10), 1, 3
GET (0, 60)-(40, 0), U19
CLS
LINE (0, 20)-(180, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 20)-(40, 0), 3, B
LINE (60, 20)-(80, 0), 3, B
LINE (100, 20)-(120, 0), 3, B
LINE (140, 20)-(160, 0), 3, B
GET (0, 20)-(180, 0), ge
CLS
LINE (0, 320)-(180, 0), 3, B
LINE (0, 20)-(180, 0), 3, B
LINE (0, 60)-(180, 40), 3, B
LINE (0, 100)-(180, 80), 3, B
LINE (0, 0)-(200, 0), 3
LINE (0, 0)-(0, 100), 3
'以上是图形的定义
'EY(12) ON: KEY(13) ON: KEY(14) ON
FOR zz = 0 TO 8
X(zz) = 0
NEXT
100 RANDOMIZE TIMER
n = 4: r! = (1 + INT(RND * 19))
' r = 2
CALL chuxian(r, a, b)
CALL zdz(r, zd, n)
FOR h = 1 TO 17
m = 80000': KEY(12) STOP: KEY(13) STOP: KEY(14) STOP
GOSUB 10000
FOR k = 0 TO m: NEXT k
GOSUB 10000': KEY(12) ON: KEY(13) ON: KEY(14) ON
b = b - 20
IF b <= zd THEN EXIT FOR
' GOSUB 32000
' IF b = zi THEN EXIT FOR
' IF zd >= 300 THEN END
ff$ = INKEY$
IF ff$ = "j" THEN GOSUB 8000
IF ff$ = "l" THEN GOSUB 9000
IF ff$ = "k" THEN GOSUB 9500
IF ff$ = "i" THEN GOSUB 30000
DEF SEG = 0: POKE 1050, PEEK(1052)
NEXT h
GOSUB 10000
GOSUB 5000
GOSUB 7000
GOTO 100
5000 IF r = 1 THEN
X(n) = b
FOR w = (b - 80) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
END IF
IF r = 2 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b: X(n + 2) = b
FOR w = n - 1 TO n + 2
q((b - 20) / 20, w) = 1
NEXT w
END IF
IF r = 3 THEN
X(n) = b: X(n + 1) = b
FOR w = (b - 40) / 20 TO (b - 20) / 20
FOR v = n TO n + 1
q(w, v) = 1
NEXT v
NEXT w
END IF
IF r = 4 THEN
X(n - 1) = b: X(n) = b - 20
q((b - 20) / 20, n - 1) = 1
q((b - 40) / 20, n - 1) = 1
q((b - 40) / 20, n) = 1
q((b - 60) / 20, n) = 1
END IF
IF r = 5 THEN
X(n - 1) = b - 20: X(n) = b: X(n + 1) = b
q((b - 40) / 20, n - 1) = 1
q((b - 40) / 20, n) = 1
q((b - 20) / 20, n) = 1
q((b - 20) / 20, n + 1) = 1
END IF
IF r = 6 THEN
X(n) = b - 20: X(n + 1) = b
q((b - 20) / 20, n + 1) = 1
q((b - 40) / 20, n) = 1
q((b - 40) / 20, n + 1) = 1
q((b - 60) / 20, n) = 1
END IF
IF r = 7 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b - 20
q((b - 20) / 20, n - 1) = 1
q((b - 20) / 20, n) = 1
q((b - 40) / 20, n) = 1
q((b - 40) / 20, n + 1) = 1
END IF
IF r = 8 THEN
X(n - 1) = b - 20: X(n) = b: X(n + 1) = b - 20
q((b - 20) / 20, n) = 1
q((b - 40) / 20, n - 1) = 1
q((b - 40) / 20, n) = 1
q((b - 40) / 20, n + 1) = 1
END IF
IF r = 9 THEN
X(n - 1) = b - 20: X(n) = b
q((b - 20) / 20, n) = 1
q((b - 40) / 20, n - 1) = 1
q((b - 40) / 20, n) = 1
q((b - 60) / 20, n) = 1
END IF
IF r = 10 THEN
X(n) = b: X(n + 1) = b - 20
q((b - 20) / 20, n) = 1
q((b - 40) / 20, n) = 1
q((b - 40) / 20, n + 1) = 1
q((b - 60) / 20, n) = 1
END IF
IF r = 11 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b
FOR w = n - 1 TO n + 1
q((b - 20) / 20, w) = 1
NEXT w
q((b - 40) / 20, n) = 1
END IF
IF r = 12 THEN
X(n) = b: X(n + 1) = b
FOR w = (b - 60) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
q((b - 20) / 20, n + 1) = 1
END IF
IF r = 13 THEN
X(n - 1) = b: X(n) = b - 20: X(n + 1) = b - 20
FOR w = n - 1 TO n + 1
q((b - 40) / 20, w) = 1
NEXT w
q((b - 20) / 20, n - 1) = 1
END IF
IF r = 14 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b
FOR w = n - 1 TO n + 1
q((b - 20) / 20, w) = 1
NEXT w
q((b - 40) / 20, n + 1) = 1
END IF
IF r = 15 THEN
X(n - 1) = b - 40: X(n) = b
FOR w = (b - 60) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
q((b - 60) / 20, n - 1) = 1
END IF
IF r = 16 THEN
X(n - 1) = b: X(n) = b
FOR w = (b - 60) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
q((b - 20) / 20, n - 1) = 1
END IF
IF r = 17 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b
FOR w = n - 1 TO n + 1
q((b - 20) / 20, w) = 1
NEXT w
q((b - 40) / 20, n - 1) = 1
END IF
IF r = 18 THEN
X(n - 1) = b - 20: X(n) = b - 20: X(n + 1) = b
FOR w = n - 1 TO n + 1
q((b - 40) / 20, w) = 1
NEXT w
q((b - 20) / 20, n + 1) = 1
END IF
IF r = 19 THEN
X(n) = b: X(n + 1) = b - 40
FOR w = (b - 60) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
q((b - 60) / 20, n + 1) = 1
END IF
LOCATE 3, 30: PRINT "X("; n; ")="; X(n)
RETURN
7000 ' 消去
FOR s = 0 TO 14
FOR t = 0 TO 8
IF q(s, t) = 0 THEN 7500
NEXT t
j = j + 1
ga = 0
FOR i = 0 TO 8
IF ga < X(i) THEN ga = X(i)
IF X(i) >= 20 THEN X(i) = X(i) - 20
NEXT i
FOR li = s TO 14
FOR hi = 0 TO 8
' q(li, hi) = q(li + 1, hi)
NEXT hi
NEXT li
PUT (0, (s + 1) * 20), ge
' ga = 280
' IF ga < 100 OR ga > 300 THEN 7500
DIM xi(14 + 23 * (ga - (s + 1) * 20))
GET (0, ga)-(180, (s + 1) * 20), xi
PUT (0, ga), xi
ga = ga - 20
PUT (0, ga), xi
s = s - 1
ERASE xi
7500 NEXT s
IF j = 1 THEN score = score + 100
IF j = 2 THEN score = score + 300
IF j = 3 THEN score = score + 500
IF j = 4 THEN score = score + 700
LOCATE 10, 25: PRINT "score:"; score: RETURN
'N KEY(12) GOSUB 8000
8000 IF a < 20 THEN RETURN
IF n < 1 THEN RETURN ELSE n = n - 1: a = a - 20
CALL zdz(r, zd, n)
RETURN
'N KEY(13) GOSUB 9000
9000 IF r = 1 AND a = 160 THEN RETURN
IF r = 2 AND a = 100 THEN RETURN
IF r = 3 AND a = 140 THEN RETURN
IF r = 4 AND a = 140 THEN RETURN
IF r = 5 AND a = 120 THEN RETURN
IF r = 6 AND a = 140 THEN RETURN
IF r = 7 AND a = 120 THEN RETURN
IF r = 8 AND a = 120 THEN RETURN
IF r = 9 AND a = 140 THEN RETURN
IF r = 10 AND a = 140 THEN RETURN
IF r = 11 AND a = 120 THEN RETURN
IF r = 12 AND a = 140 THEN RETURN
IF r = 13 AND a = 120 THEN RETURN
IF r = 14 AND a = 120 THEN RETURN
IF r = 15 AND a = 140 THEN RETURN
IF r = 16 AND a = 140 THEN RETURN
IF r = 17 AND a = 120 THEN RETURN
IF r = 18 AND a = 120 THEN RETURN
IF r = 19 AND a = 140 THEN RETURN
IF n = 8 THEN RETURN
n = n + 1: a = a + 20
CALL zdz(r, zd, n)
RETURN
'oN KEY(14) GOSUB 9500
9500 m = 0
RETURN
10000 IF r = 1 THEN GOSUB 20010
IF r = 2 THEN GOSUB 20020
IF r = 3 THEN GOSUB 20030
IF r = 4 THEN GOSUB 20040
IF r = 5 THEN GOSUB 20050
IF r = 6 THEN GOSUB 20060
IF r = 7 THEN GOSUB 20070
IF r = 8 THEN GOSUB 20080
IF r = 9 THEN GOSUB 20090
IF r = 10 THEN GOSUB 20100
IF r = 11 THEN GOSUB 20110
IF r = 12 THEN GOSUB 20120
IF r = 13 THEN GOSUB 20130
IF r = 14 THEN GOSUB 20140
IF r = 15 THEN GOSUB 20150
IF r = 16 THEN GOSUB 20160
IF r = 17 THEN GOSUB 20170
IF r = 18 THEN GOSUB 20180
IF r = 19 THEN GOSUB 20190
RETURN
20010 PUT (a, b), U1
RETURN
20020 PUT (a, b), U2
RETURN
20030 PUT (a, b), U3
RETURN
20040 PUT (a, b), U4
RETURN
20050 PUT (a, b), U5
RETURN
20060 PUT (a, b), U6
RETURN
20070 PUT (a, b), U7
RETURN
20080 PUT (a, b), U8
RETURN
20090 PUT (a, b), U9
RETURN
20100 PUT (a, b), U10
RETURN
20110 PUT (a, b), U11
RETURN
20120 PUT (a, b), U12
RETURN
20130 PUT (a, b), U13
RETURN
20140 PUT (a, b), U14
RETURN
20150 PUT (a, b), U15
RETURN
20160 PUT (a, b), U16
RETURN
20170 PUT (a, b), U17
RETURN
20180 PUT (a, b), U18
RETURN
20190 PUT (a, b), U19
RETURN
30000 IF r = 1 THEN
IF n = 0 THEN b = b - 40: n = 1: r = 2: GOTO 31000
IF n = 7 THEN a = a - 40: b = b - 40: n = 6: r = 2: GOTO 31000
IF n = 8 THEN a = a - 60: b = b - 40: n = 6: r = 2: GOTO 31000
a = a - 20: b = b - 40: GOTO 31000
END IF
IF r = 2 THEN r = 1: a = a + 20: b = b + 40: GOTO 31000
IF r = 4 THEN
IF n = 8 THEN a = a - 20: b = b - 20: n = 7: r = 5: GOTO 31000
b = b - 20: r = 5: GOTO 31000
END IF
IF r = 5 THEN r = 4: b = b + 20: GOTO 31000
IF r = 6 THEN
IF n = 0 THEN b = b - 20: n = 1: r = 7: GOTO 31000
a = a - 20: b = b - 20: r = 7: GOTO 31000
END IF
IF r = 7 THEN r = 6: a = a + 20: b = b + 20: GOTO 31000
IF r = 8 THEN r = 9: GOTO 31000
IF r = 9 THEN r = 11: b = b - 20: GOTO 31000
IF r = 10 THEN r = 8: a = a - 20: GOTO 31000
IF r = 11 THEN r = 10: a = a + 20: b = b + 20: GOTO 31000
IF r = 12 THEN
IF n = 0 THEN b = b - 20: n = 1: r = 14: GOTO 31000
a = a - 20: b = b - 20: r = 14: GOTO 31000
END IF
IF r = 13 THEN r = 12: a = a + 20: b = b + 20: GOTO 31000
IF r = 14 THEN r = 15: b = b + 20: GOTO 31000
IF r = 15 THEN
IF n = 8 THEN a = a - 20: b = b - 20: n = 7: r = 13: GOTO 31000
b = b - 20: r = 13: GOTO 31000
END IF
IF r = 16 THEN
IF n = 8 THEN a = a - 20: b = b - 20: n = 7: r = 18: GOTO 31000
r = 18: b = b - 20: GOTO 31000
END IF
IF r = 17 THEN r = 16: b = b + 20: GOTO 31000
IF r = 18 THEN r = 19: a = a + 20: b = b + 20: GOTO 31000
IF r = 19 THEN
IF n = 0 THEN b = b - 20: n = 1: rf = 17: GOTO 31000
r = 17: a = a - 20: b = b - 20: GOTO 31000
END IF
31000 CALL zdz(r, zd, n)
GOSUB 32000
RETURN
32000 IF r = 1 THEN zi = 80
IF r = 2 THEN zi = 20
IF r = 3 THEN zi = 40
IF r = 4 THEN zi = 60
IF r = 5 THEN zi = 40
IF r = 6 THEN zi = 60
IF r = 7 THEN zi = 40
IF r = 8 THEN zi = 40
IF r = 9 THEN zi = 60
IF r = 10 THEN zi = 60
IF r = 11 THEN zi = 40
IF r = 12 THEN zi = 60
IF r = 13 THEN zi = 40
IF r = 14 THEN zi = 40
IF r = 15 THEN zi = 60
IF r = 16 THEN zi = 60
IF r = 17 THEN zi = 40
IF r = 18 THEN zi = 40
IF r = 19 THEN zi = 60
RETURN
SUB chuxian (r, a, b)
IF r = 2 THEN a = 60: b = 300
IF r = 1 OR r = 19 THEN a = 80: b = 340
IF r = 3 OR r = 6 OR r = 10 OR r = 12 THEN a = 80: b = 320
IF r = 4 THEN a = 80: b = 340: n = 5
IF r = 5 OR r = 7 OR r = 8 OR r = 9 OR r = 11 OR r = 13 OR r = 14 OR r = 16 OR r = 17 OR r = 18 THEN a = 60: b = 320
IF r = 15 THEN a = 60: b = 340
END SUB
SUB zdz (r, zd, n)
ON r GOSUB p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19
GOTO p20
p1: zd = X(n) + 80: RETURN
p2:
v = 0
FOR w = n - 1 TO n + 2
IF v < X(w) THEN v = X(w)
NEXT w
zd = v + 20
RETURN
p3: IF X(n) >= X(n + 1) THEN zd = X(n) + 40 ELSE zd = X(n + 1) + 40: RETURN
p4: IF X(n - 1) > X(n) THEN zd = X(n - 1) + 40 ELSE zd = X(n) + 60: RETURN
p5:
IF X(n + 1) > X(n) AND X(n + 1) > X(n - 1) THEN zd = X(n + 1) + 20: RETURN
IF X(n) >= X(n + 1) AND X(n) >= X(n - 1) THEN zd = X(n) + 40 ELSE zd = X(n - 1) + 40
RETURN
p6: IF X(n + 1) > X(n) THEN zd = X(n + 1) + 40 ELSE zd = X(n) + 60: RETURN
p7:
IF X(n - 1) > X(n) AND X(n - 1) > X(n + 1) THEN zd = X(n - 1) + 20: RETURN
IF X(n) >= X(n - 1) AND X(n) >= X(n + 1) THEN zd = X(n) + 40 ELSE zd = X(n + 1) + 40
RETURN
p8:
v = 0
FOR w = n - 1 TO n + 1
IF v < X(w) THEN v = X(w)
NEXT w
zd = v + 40
RETURN
p9: IF X(n - 1) > X(n) THEN zd = X(n - 1) + 40 ELSE zd = X(n) + 60: RETURN
p10: IF X(n + 1) > X(n) THEN zd = X(n + 1) + 40 ELSE zd = X(n) + 60: RETURN
p11:
IF X(n - 1) > X(n) AND X(n - 1) >= X(n + 1) THEN zd = X(n - 1) + 20: RETURN
IF X(n) >= X(n - 1) AND X(n) >= X(n + 1) THEN zd = X(n) + 40 ELSE zd = X(n + 1) + 20
RETURN
p12: IF X(n + 1) - X(n) >= 40 THEN zd = X(n + 1) + 20 ELSE zd = X(n) + 60: RETURN
p13:
v = 0
FOR w = n - 1 TO n + 1
IF v < X(w) THEN v = X(w)
NEXT w
zd = v + 40
RETURN
p14:
IF (X(n - 1) - X(n + 1)) >= 40 AND X(n - 1) >= X(n) THEN
zd = X(n - 1) + 20
ELSEIF (X(n) - X(n + 1)) >= 40 AND X(n) >= X(n - 1) THEN
zd = X(n) + 20
ELSE
zd = X(n + 1) + 40
END IF: RETURN
p15: IF X(n - 1) >= X(n) THEN zd = X(n - 1) + 60 ELSE zd = X(n) + 60: RETURN
p16: IF X(n - 1) - X(n) >= 40 THEN zd = X(n - 1) + 20 ELSE zd = X(n) + 60: RETURN
p17:
IF X(n + 1) - X(n - 1) >= 40 AND X(n + 1) >= X(n) THEN zd = X(n + 1) + 20: RETURN
IF X(n) - X(n - 1) >= 40 AND X(n) >= X(n + 1) THEN zd = X(n) + 20 ELSE zd = X(n - 1) + 40
RETURN
p18:
v = 0
FOR w = n - 1 TO n + 1
IF v < X(w) THEN v = X(w)
NEXT w
zd = v + 40
RETURN
p19: IF X(n) >= X(n + 1) THEN zd = X(n) + 60 ELSE zd = X(n + 1) + 60: RETURN
p20: LOCATE 2, 20: PRINT " ": LOCATE 2, 20: PRINT "zd="; zd, "x("; n; ")="; X(n)
LOCATE 2, 10: PRINT b
END SUB
====================================================
一直找不出原因。有人愿意接手吗?
代码现在不在手里,得回家才有。[em1]
===================================================
基本没有注释,高中时候写的呢,当时没有找出问题所在。
我怀疑是对double型数值做绝对等于判断造成的,落点判断不对。
各位大哥可以看看。
===========================================================
'DEFSNG R
DECLARE SUB chuxian (r, a, b)
DECLARE SUB zdz (r, zd, n)
COMMON SHARED r, a, b, zd, n
SCREEN 12
WINDOW (-20, -40)-(640, 480)
DIM SHARED q(14, 8)
DIM SHARED X(20), ge(664)
DIM SHARED U1(344), U2(304), U3(404), U4(504), U5(524), U6(504), U7(524), U8(424), U9(504), U10(504)
DIM SHARED U11(424), U12(504), U13(424), U14(424), U15(504), U16(504), U17(424), U18(424), U19(504)
LINE (0, 80)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (0, 60)-(20, 40), 3, B
LINE (0, 20)-(20, 20), 3
GET (0, 80)-(20, 0), U1
CLS
LINE (0, 20)-(80, 0), 3, B
PAINT (20, 10), 1, 3
LINE (60, 0)-(60, 20), 3
LINE (20, 20)-(40, 0), 3, B
GET (0, 20)-(80, 0), U2
CLS
LINE (0, 40)-(40, 0), 3, B
PAINT (20, 20), 1, 3
LINE (0, 20)-(40, 20), 3
LINE (20, 0)-(20, 40), 3
GET (0, 40)-(40, 0), U3
CLS
LINE (0, 60)-(20, 20), 3, B
PAINT (10, 40), 1, 3
LINE (20, 40)-(40, 0), 3, B
PAINT (30, 20), 1, 3
LINE (0, 40)-(20, 40), 3
LINE (20, 20)-(40, 20), 3
GET (0, 60)-(40, 0), U4
CLS
LINE (0, 20)-(40, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 40)-(60, 20), 3, B
PAINT (40, 30), 1, 3
LINE (20, 0)-(20, 20), 3
LINE (40, 20)-(40, 40), 3
GET (0, 40)-(60, 0), U5
CLS
LINE (0, 40)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (20, 60)-(40, 20), 3, B
PAINT (30, 40), 1, 3
LINE (0, 20)-(20, 20), 3
LINE (20, 40)-(40, 40), 3
GET (0, 60)-(40, 0), U6
CLS
LINE (0, 40)-(40, 20), 3, B
PAINT (20, 30), 1, 3
LINE (20, 20)-(60, 0), 3, B
PAINT (40, 10), 1, 3
LINE (20, 20)-(20, 40), 3
LINE (40, 0)-(40, 20), 3
GET (0, 40)-(60, 0), U7
CLS
LINE (0, 20)-(60, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 40)-(40, 0), 3, B
PAINT (30, 30), 1, 3
GET (0, 40)-(60, 0), U8
CLS
LINE (20, 60)-(40, 0), 3, B
PAINT (30, 20), 1, 3
LINE (0, 40)-(40, 20), 3, B
PAINT (10, 30), 1, 3
GET (0, 60)-(40, 0), U9
CLS
LINE (0, 60)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (0, 40)-(40, 20), 3, B
PAINT (30, 30), 1, 3
GET (0, 60)-(40, 0), U10
CLS
LINE (0, 40)-(60, 20), 3, B
PAINT (20, 30), 1, 3
LINE (20, 40)-(40, 0), 3, B
PAINT (30, 10), 1, 3
GET (0, 40)-(60, 0), U11
CLS
LINE (0, 60)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (0, 40)-(20, 20), 3, B
LINE (20, 60)-(40, 40), 3, B
PAINT (30, 50), 1, 3
GET (0, 60)-(40, 0), U12
CLS
LINE (0, 20)-(60, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 20)-(40, 0), 3, B
LINE (0, 40)-(20, 20), 3, B
PAINT (10, 30), 1, 3
GET (0, 40)-(60, 0), U13
CLS
LINE (0, 40)-(60, 20), 3, B
PAINT (20, 30), 1, 3
LINE (20, 40)-(40, 20), 3, B
LINE (40, 20)-(60, 0), 3, B
PAINT (50, 10), 1, 3
GET (0, 40)-(60, 0), U14
CLS
LINE (20, 60)-(40, 0), 3, B
PAINT (30, 20), 1, 3
LINE (20, 40)-(40, 20), 3, B
LINE (0, 20)-(20, 0), 3, B
PAINT (10, 10), 1, 3
GET (0, 60)-(40, 0), U15
CLS
LINE (20, 60)-(40, 0), 3, B
PAINT (30, 20), 1, 3
LINE (20, 40)-(40, 20), 3, B
LINE (0, 60)-(20, 40), 3, B
PAINT (10, 50), 1, 3
GET (0, 60)-(40, 0), U16
CLS
LINE (0, 40)-(60, 20), 3, B
PAINT (20, 30), 1, 3
LINE (20, 40)-(40, 20), 3, B
LINE (0, 20)-(20, 0), 3, B
PAINT (10, 10), 1, 3
GET (0, 40)-(60, 0), U17
CLS
LINE (0, 20)-(60, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 20)-(40, 0), 3, B
LINE (40, 40)-(60, 20), 3, B
PAINT (50, 30), 1, 3
GET (0, 40)-(60, 0), U18
CLS
LINE (0, 60)-(20, 0), 3, B
PAINT (10, 20), 1, 3
LINE (0, 40)-(20, 20), 3, B
LINE (20, 20)-(40, 0), 3, B
PAINT (30, 10), 1, 3
GET (0, 60)-(40, 0), U19
CLS
LINE (0, 20)-(180, 0), 3, B
PAINT (20, 10), 1, 3
LINE (20, 20)-(40, 0), 3, B
LINE (60, 20)-(80, 0), 3, B
LINE (100, 20)-(120, 0), 3, B
LINE (140, 20)-(160, 0), 3, B
GET (0, 20)-(180, 0), ge
CLS
LINE (0, 320)-(180, 0), 3, B
LINE (0, 20)-(180, 0), 3, B
LINE (0, 60)-(180, 40), 3, B
LINE (0, 100)-(180, 80), 3, B
LINE (0, 0)-(200, 0), 3
LINE (0, 0)-(0, 100), 3
'以上是图形的定义
'EY(12) ON: KEY(13) ON: KEY(14) ON
FOR zz = 0 TO 8
X(zz) = 0
NEXT
100 RANDOMIZE TIMER
n = 4: r! = (1 + INT(RND * 19))
' r = 2
CALL chuxian(r, a, b)
CALL zdz(r, zd, n)
FOR h = 1 TO 17
m = 80000': KEY(12) STOP: KEY(13) STOP: KEY(14) STOP
GOSUB 10000
FOR k = 0 TO m: NEXT k
GOSUB 10000': KEY(12) ON: KEY(13) ON: KEY(14) ON
b = b - 20
IF b <= zd THEN EXIT FOR
' GOSUB 32000
' IF b = zi THEN EXIT FOR
' IF zd >= 300 THEN END
ff$ = INKEY$
IF ff$ = "j" THEN GOSUB 8000
IF ff$ = "l" THEN GOSUB 9000
IF ff$ = "k" THEN GOSUB 9500
IF ff$ = "i" THEN GOSUB 30000
DEF SEG = 0: POKE 1050, PEEK(1052)
NEXT h
GOSUB 10000
GOSUB 5000
GOSUB 7000
GOTO 100
5000 IF r = 1 THEN
X(n) = b
FOR w = (b - 80) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
END IF
IF r = 2 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b: X(n + 2) = b
FOR w = n - 1 TO n + 2
q((b - 20) / 20, w) = 1
NEXT w
END IF
IF r = 3 THEN
X(n) = b: X(n + 1) = b
FOR w = (b - 40) / 20 TO (b - 20) / 20
FOR v = n TO n + 1
q(w, v) = 1
NEXT v
NEXT w
END IF
IF r = 4 THEN
X(n - 1) = b: X(n) = b - 20
q((b - 20) / 20, n - 1) = 1
q((b - 40) / 20, n - 1) = 1
q((b - 40) / 20, n) = 1
q((b - 60) / 20, n) = 1
END IF
IF r = 5 THEN
X(n - 1) = b - 20: X(n) = b: X(n + 1) = b
q((b - 40) / 20, n - 1) = 1
q((b - 40) / 20, n) = 1
q((b - 20) / 20, n) = 1
q((b - 20) / 20, n + 1) = 1
END IF
IF r = 6 THEN
X(n) = b - 20: X(n + 1) = b
q((b - 20) / 20, n + 1) = 1
q((b - 40) / 20, n) = 1
q((b - 40) / 20, n + 1) = 1
q((b - 60) / 20, n) = 1
END IF
IF r = 7 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b - 20
q((b - 20) / 20, n - 1) = 1
q((b - 20) / 20, n) = 1
q((b - 40) / 20, n) = 1
q((b - 40) / 20, n + 1) = 1
END IF
IF r = 8 THEN
X(n - 1) = b - 20: X(n) = b: X(n + 1) = b - 20
q((b - 20) / 20, n) = 1
q((b - 40) / 20, n - 1) = 1
q((b - 40) / 20, n) = 1
q((b - 40) / 20, n + 1) = 1
END IF
IF r = 9 THEN
X(n - 1) = b - 20: X(n) = b
q((b - 20) / 20, n) = 1
q((b - 40) / 20, n - 1) = 1
q((b - 40) / 20, n) = 1
q((b - 60) / 20, n) = 1
END IF
IF r = 10 THEN
X(n) = b: X(n + 1) = b - 20
q((b - 20) / 20, n) = 1
q((b - 40) / 20, n) = 1
q((b - 40) / 20, n + 1) = 1
q((b - 60) / 20, n) = 1
END IF
IF r = 11 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b
FOR w = n - 1 TO n + 1
q((b - 20) / 20, w) = 1
NEXT w
q((b - 40) / 20, n) = 1
END IF
IF r = 12 THEN
X(n) = b: X(n + 1) = b
FOR w = (b - 60) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
q((b - 20) / 20, n + 1) = 1
END IF
IF r = 13 THEN
X(n - 1) = b: X(n) = b - 20: X(n + 1) = b - 20
FOR w = n - 1 TO n + 1
q((b - 40) / 20, w) = 1
NEXT w
q((b - 20) / 20, n - 1) = 1
END IF
IF r = 14 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b
FOR w = n - 1 TO n + 1
q((b - 20) / 20, w) = 1
NEXT w
q((b - 40) / 20, n + 1) = 1
END IF
IF r = 15 THEN
X(n - 1) = b - 40: X(n) = b
FOR w = (b - 60) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
q((b - 60) / 20, n - 1) = 1
END IF
IF r = 16 THEN
X(n - 1) = b: X(n) = b
FOR w = (b - 60) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
q((b - 20) / 20, n - 1) = 1
END IF
IF r = 17 THEN
X(n - 1) = b: X(n) = b: X(n + 1) = b
FOR w = n - 1 TO n + 1
q((b - 20) / 20, w) = 1
NEXT w
q((b - 40) / 20, n - 1) = 1
END IF
IF r = 18 THEN
X(n - 1) = b - 20: X(n) = b - 20: X(n + 1) = b
FOR w = n - 1 TO n + 1
q((b - 40) / 20, w) = 1
NEXT w
q((b - 20) / 20, n + 1) = 1
END IF
IF r = 19 THEN
X(n) = b: X(n + 1) = b - 40
FOR w = (b - 60) / 20 TO (b - 20) / 20
q(w, n) = 1
NEXT w
q((b - 60) / 20, n + 1) = 1
END IF
LOCATE 3, 30: PRINT "X("; n; ")="; X(n)
RETURN
7000 ' 消去
FOR s = 0 TO 14
FOR t = 0 TO 8
IF q(s, t) = 0 THEN 7500
NEXT t
j = j + 1
ga = 0
FOR i = 0 TO 8
IF ga < X(i) THEN ga = X(i)
IF X(i) >= 20 THEN X(i) = X(i) - 20
NEXT i
FOR li = s TO 14
FOR hi = 0 TO 8
' q(li, hi) = q(li + 1, hi)
NEXT hi
NEXT li
PUT (0, (s + 1) * 20), ge
' ga = 280
' IF ga < 100 OR ga > 300 THEN 7500
DIM xi(14 + 23 * (ga - (s + 1) * 20))
GET (0, ga)-(180, (s + 1) * 20), xi
PUT (0, ga), xi
ga = ga - 20
PUT (0, ga), xi
s = s - 1
ERASE xi
7500 NEXT s
IF j = 1 THEN score = score + 100
IF j = 2 THEN score = score + 300
IF j = 3 THEN score = score + 500
IF j = 4 THEN score = score + 700
LOCATE 10, 25: PRINT "score:"; score: RETURN
'N KEY(12) GOSUB 8000
8000 IF a < 20 THEN RETURN
IF n < 1 THEN RETURN ELSE n = n - 1: a = a - 20
CALL zdz(r, zd, n)
RETURN
'N KEY(13) GOSUB 9000
9000 IF r = 1 AND a = 160 THEN RETURN
IF r = 2 AND a = 100 THEN RETURN
IF r = 3 AND a = 140 THEN RETURN
IF r = 4 AND a = 140 THEN RETURN
IF r = 5 AND a = 120 THEN RETURN
IF r = 6 AND a = 140 THEN RETURN
IF r = 7 AND a = 120 THEN RETURN
IF r = 8 AND a = 120 THEN RETURN
IF r = 9 AND a = 140 THEN RETURN
IF r = 10 AND a = 140 THEN RETURN
IF r = 11 AND a = 120 THEN RETURN
IF r = 12 AND a = 140 THEN RETURN
IF r = 13 AND a = 120 THEN RETURN
IF r = 14 AND a = 120 THEN RETURN
IF r = 15 AND a = 140 THEN RETURN
IF r = 16 AND a = 140 THEN RETURN
IF r = 17 AND a = 120 THEN RETURN
IF r = 18 AND a = 120 THEN RETURN
IF r = 19 AND a = 140 THEN RETURN
IF n = 8 THEN RETURN
n = n + 1: a = a + 20
CALL zdz(r, zd, n)
RETURN
'oN KEY(14) GOSUB 9500
9500 m = 0
RETURN
10000 IF r = 1 THEN GOSUB 20010
IF r = 2 THEN GOSUB 20020
IF r = 3 THEN GOSUB 20030
IF r = 4 THEN GOSUB 20040
IF r = 5 THEN GOSUB 20050
IF r = 6 THEN GOSUB 20060
IF r = 7 THEN GOSUB 20070
IF r = 8 THEN GOSUB 20080
IF r = 9 THEN GOSUB 20090
IF r = 10 THEN GOSUB 20100
IF r = 11 THEN GOSUB 20110
IF r = 12 THEN GOSUB 20120
IF r = 13 THEN GOSUB 20130
IF r = 14 THEN GOSUB 20140
IF r = 15 THEN GOSUB 20150
IF r = 16 THEN GOSUB 20160
IF r = 17 THEN GOSUB 20170
IF r = 18 THEN GOSUB 20180
IF r = 19 THEN GOSUB 20190
RETURN
20010 PUT (a, b), U1
RETURN
20020 PUT (a, b), U2
RETURN
20030 PUT (a, b), U3
RETURN
20040 PUT (a, b), U4
RETURN
20050 PUT (a, b), U5
RETURN
20060 PUT (a, b), U6
RETURN
20070 PUT (a, b), U7
RETURN
20080 PUT (a, b), U8
RETURN
20090 PUT (a, b), U9
RETURN
20100 PUT (a, b), U10
RETURN
20110 PUT (a, b), U11
RETURN
20120 PUT (a, b), U12
RETURN
20130 PUT (a, b), U13
RETURN
20140 PUT (a, b), U14
RETURN
20150 PUT (a, b), U15
RETURN
20160 PUT (a, b), U16
RETURN
20170 PUT (a, b), U17
RETURN
20180 PUT (a, b), U18
RETURN
20190 PUT (a, b), U19
RETURN
30000 IF r = 1 THEN
IF n = 0 THEN b = b - 40: n = 1: r = 2: GOTO 31000
IF n = 7 THEN a = a - 40: b = b - 40: n = 6: r = 2: GOTO 31000
IF n = 8 THEN a = a - 60: b = b - 40: n = 6: r = 2: GOTO 31000
a = a - 20: b = b - 40: GOTO 31000
END IF
IF r = 2 THEN r = 1: a = a + 20: b = b + 40: GOTO 31000
IF r = 4 THEN
IF n = 8 THEN a = a - 20: b = b - 20: n = 7: r = 5: GOTO 31000
b = b - 20: r = 5: GOTO 31000
END IF
IF r = 5 THEN r = 4: b = b + 20: GOTO 31000
IF r = 6 THEN
IF n = 0 THEN b = b - 20: n = 1: r = 7: GOTO 31000
a = a - 20: b = b - 20: r = 7: GOTO 31000
END IF
IF r = 7 THEN r = 6: a = a + 20: b = b + 20: GOTO 31000
IF r = 8 THEN r = 9: GOTO 31000
IF r = 9 THEN r = 11: b = b - 20: GOTO 31000
IF r = 10 THEN r = 8: a = a - 20: GOTO 31000
IF r = 11 THEN r = 10: a = a + 20: b = b + 20: GOTO 31000
IF r = 12 THEN
IF n = 0 THEN b = b - 20: n = 1: r = 14: GOTO 31000
a = a - 20: b = b - 20: r = 14: GOTO 31000
END IF
IF r = 13 THEN r = 12: a = a + 20: b = b + 20: GOTO 31000
IF r = 14 THEN r = 15: b = b + 20: GOTO 31000
IF r = 15 THEN
IF n = 8 THEN a = a - 20: b = b - 20: n = 7: r = 13: GOTO 31000
b = b - 20: r = 13: GOTO 31000
END IF
IF r = 16 THEN
IF n = 8 THEN a = a - 20: b = b - 20: n = 7: r = 18: GOTO 31000
r = 18: b = b - 20: GOTO 31000
END IF
IF r = 17 THEN r = 16: b = b + 20: GOTO 31000
IF r = 18 THEN r = 19: a = a + 20: b = b + 20: GOTO 31000
IF r = 19 THEN
IF n = 0 THEN b = b - 20: n = 1: rf = 17: GOTO 31000
r = 17: a = a - 20: b = b - 20: GOTO 31000
END IF
31000 CALL zdz(r, zd, n)
GOSUB 32000
RETURN
32000 IF r = 1 THEN zi = 80
IF r = 2 THEN zi = 20
IF r = 3 THEN zi = 40
IF r = 4 THEN zi = 60
IF r = 5 THEN zi = 40
IF r = 6 THEN zi = 60
IF r = 7 THEN zi = 40
IF r = 8 THEN zi = 40
IF r = 9 THEN zi = 60
IF r = 10 THEN zi = 60
IF r = 11 THEN zi = 40
IF r = 12 THEN zi = 60
IF r = 13 THEN zi = 40
IF r = 14 THEN zi = 40
IF r = 15 THEN zi = 60
IF r = 16 THEN zi = 60
IF r = 17 THEN zi = 40
IF r = 18 THEN zi = 40
IF r = 19 THEN zi = 60
RETURN
SUB chuxian (r, a, b)
IF r = 2 THEN a = 60: b = 300
IF r = 1 OR r = 19 THEN a = 80: b = 340
IF r = 3 OR r = 6 OR r = 10 OR r = 12 THEN a = 80: b = 320
IF r = 4 THEN a = 80: b = 340: n = 5
IF r = 5 OR r = 7 OR r = 8 OR r = 9 OR r = 11 OR r = 13 OR r = 14 OR r = 16 OR r = 17 OR r = 18 THEN a = 60: b = 320
IF r = 15 THEN a = 60: b = 340
END SUB
SUB zdz (r, zd, n)
ON r GOSUB p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19
GOTO p20
p1: zd = X(n) + 80: RETURN
p2:
v = 0
FOR w = n - 1 TO n + 2
IF v < X(w) THEN v = X(w)
NEXT w
zd = v + 20
RETURN
p3: IF X(n) >= X(n + 1) THEN zd = X(n) + 40 ELSE zd = X(n + 1) + 40: RETURN
p4: IF X(n - 1) > X(n) THEN zd = X(n - 1) + 40 ELSE zd = X(n) + 60: RETURN
p5:
IF X(n + 1) > X(n) AND X(n + 1) > X(n - 1) THEN zd = X(n + 1) + 20: RETURN
IF X(n) >= X(n + 1) AND X(n) >= X(n - 1) THEN zd = X(n) + 40 ELSE zd = X(n - 1) + 40
RETURN
p6: IF X(n + 1) > X(n) THEN zd = X(n + 1) + 40 ELSE zd = X(n) + 60: RETURN
p7:
IF X(n - 1) > X(n) AND X(n - 1) > X(n + 1) THEN zd = X(n - 1) + 20: RETURN
IF X(n) >= X(n - 1) AND X(n) >= X(n + 1) THEN zd = X(n) + 40 ELSE zd = X(n + 1) + 40
RETURN
p8:
v = 0
FOR w = n - 1 TO n + 1
IF v < X(w) THEN v = X(w)
NEXT w
zd = v + 40
RETURN
p9: IF X(n - 1) > X(n) THEN zd = X(n - 1) + 40 ELSE zd = X(n) + 60: RETURN
p10: IF X(n + 1) > X(n) THEN zd = X(n + 1) + 40 ELSE zd = X(n) + 60: RETURN
p11:
IF X(n - 1) > X(n) AND X(n - 1) >= X(n + 1) THEN zd = X(n - 1) + 20: RETURN
IF X(n) >= X(n - 1) AND X(n) >= X(n + 1) THEN zd = X(n) + 40 ELSE zd = X(n + 1) + 20
RETURN
p12: IF X(n + 1) - X(n) >= 40 THEN zd = X(n + 1) + 20 ELSE zd = X(n) + 60: RETURN
p13:
v = 0
FOR w = n - 1 TO n + 1
IF v < X(w) THEN v = X(w)
NEXT w
zd = v + 40
RETURN
p14:
IF (X(n - 1) - X(n + 1)) >= 40 AND X(n - 1) >= X(n) THEN
zd = X(n - 1) + 20
ELSEIF (X(n) - X(n + 1)) >= 40 AND X(n) >= X(n - 1) THEN
zd = X(n) + 20
ELSE
zd = X(n + 1) + 40
END IF: RETURN
p15: IF X(n - 1) >= X(n) THEN zd = X(n - 1) + 60 ELSE zd = X(n) + 60: RETURN
p16: IF X(n - 1) - X(n) >= 40 THEN zd = X(n - 1) + 20 ELSE zd = X(n) + 60: RETURN
p17:
IF X(n + 1) - X(n - 1) >= 40 AND X(n + 1) >= X(n) THEN zd = X(n + 1) + 20: RETURN
IF X(n) - X(n - 1) >= 40 AND X(n) >= X(n + 1) THEN zd = X(n) + 20 ELSE zd = X(n - 1) + 40
RETURN
p18:
v = 0
FOR w = n - 1 TO n + 1
IF v < X(w) THEN v = X(w)
NEXT w
zd = v + 40
RETURN
p19: IF X(n) >= X(n + 1) THEN zd = X(n) + 60 ELSE zd = X(n + 1) + 60: RETURN
p20: LOCATE 2, 20: PRINT " ": LOCATE 2, 20: PRINT "zd="; zd, "x("; n; ")="; X(n)
LOCATE 2, 10: PRINT b
END SUB
====================================================