主题:写了个小东西,大家别笑话
DECLARE SUB clearrow ()
DECLARE SUB judge (x!, y!)
DECLARE SUB left (x!, y!)
DECLARE SUB right (x!, y!)
DECLARE SUB down (x!, y!)
DECLARE SUB genanother (x!, y!)
DECLARE SUB changeblock (x!, y!)
DECLARE SUB contrl (x!, y!)
DECLARE SUB clearbox (x!, y!)
DECLARE SUB mainframe ()
DECLARE SUB drawbox ()
DECLARE SUB blocktomain (x, y)
DECLARE SUB genblock ()
SCREEN 12
DIM SHARED mainarry(21, 44), blockarry(3, 3), tempx, tempy, mainstill(21, 44)
x = 11: y = 2
CALL mainframe
CALL genblock
CALL blocktomain(x, y)
CALL drawbox
DO
tempx = x: tempy = y
CALL contrl(x, y)
IF tempx <> x OR tempy <> y THEN
CALL clearbox(tempx, tempy)
END IF
CALL blocktomain(x, y)
CALL drawbox
CALL judge(x, y)
CALL clearrow
k$ = INKEY$
LOOP UNTIL k$ = "t"
SUB blocktomain (x, y)
mainarry(x - 1, y - 1) = blockarry(1, 1)
mainarry(x, y - 1) = blockarry(2, 1)
mainarry(x + 1, y - 1) = blockarry(3, 1)
mainarry(x - 1, y) = blockarry(1, 2)
mainarry(x, y) = blockarry(2, 2)
mainarry(x + 1, y) = blockarry(3, 2)
mainarry(x - 1, y + 1) = blockarry(1, 3)
mainarry(x, y + 1) = blockarry(2, 3)
mainarry(x + 1, y + 1) = blockarry(3, 3)
END SUB
SUB changeblock (x, y)
t = blockarry(1, 1)
blockarry(1, 1) = blockarry(3, 1)
blockarry(3, 1) = blockarry(3, 3)
blockarry(3, 3) = blockarry(1, 3)
blockarry(1, 3) = t
t = blockarry(2, 1)
blockarry(2, 1) = blockarry(3, 2)
blockarry(3, 2) = blockarry(2, 3)
blockarry(2, 3) = blockarry(1, 2)
blockarry(1, 2) = t
END SUB
SUB clearbox (x, y)
IF mainstill(x - 1, y - 1) = 0 AND mainarry(x - 1, y - 1) = 1 THEN
mainarry(x - 1, y - 1) = 0
CIRCLE ((x - 1) * 10 + 100, (y - 1) * 10 + 20), 5, 0
END IF
IF mainstill(x, y - 1) = 0 AND mainarry(x, y - 1) = 1 THEN
mainarry(x, y - 1) = 0
CIRCLE (x * 10 + 100, (y - 1) * 10 + 20), 5, 0
END IF
IF mainstill(x + 1, y - 1) = 0 AND mainarry(x + 1, y - 1) = 1 THEN
mainarry(x + 1, y - 1) = 0
CIRCLE ((x + 1) * 10 + 100, (y - 1) * 10 + 20), 5, 0
END IF
IF mainstill(x - 1, y) = 0 AND mainarry(x - 1, y) = 1 THEN
mainarry(x - 1, y) = 0
CIRCLE ((x - 1) * 10 + 100, y * 10 + 20), 5, 0
END IF
IF mainstill(x, y) = 0 AND mainarry(x, y) = 1 THEN
mainarry(x, y) = 0
CIRCLE (x * 10 + 100, y * 10 + 20), 5, 0
END IF
IF mainstill(x + 1, y) = 0 AND mainarry(x + 1, y) = 1 THEN
mainarry(x + 1, y) = 0
CIRCLE ((x + 1) * 10 + 100, y * 10 + 20), 5, 0
END IF
IF mainstill(x - 1, y + 1) = 0 AND mainarry(x - 1, y + 1) = 1 THEN
mainarry(x - 1, y + 1) = 0
CIRCLE ((x - 1) * 10 + 100, (y + 1) * 10 + 20), 5, 0
END IF
IF mainstill(x, y + 1) = 0 AND mainarry(x, y + 1) = 1 THEN
mainarry(x, y + 1) = 0
CIRCLE (x * 10 + 100, (y + 1) * 10 + 20), 5, 0
END IF
IF mainstill(x + 1, y + 1) = 0 AND mainarry(x + 1, y + 1) = 1 THEN
mainarry(x + 1, y + 1) = 0
CIRCLE ((x + 1) * 10 + 100, (y + 1) * 10 + 20), 5, 0
END IF
END SUB
SUB clearrow
FOR yy = 40 TO 1 STEP -1
FOR xx = 1 TO 21
s = mainstill(xx, yy) + s
NEXT xx
IF s = 21 THEN
FOR i = 1 TO 21
mainarry(i, yy) = 0
mainstill(i, yy) = 0
NEXT i
FOR yyy = yy TO 1 STEP -1
FOR xxx = 1 TO 21
mainarry(xxx, yyy) = mainarry(xxx, yyy - 1)
mainstill(xxx, yyy) = mainstill(xxx, yyy - 1)
NEXT xxx
NEXT yyy
CLS
CALL mainframe
END IF
s = 0
NEXT yy
END SUB
SUB contrl (x, y)
DO
time = time + 1
LOCATE 1, 1
PRINT time
x$ = INKEY$
LOOP UNTIL x$ <> "" OR time = 500
IF y < 39 AND x$ <> "s" THEN
CALL down(x, y)
END IF
IF x$ = "w" THEN
CALL changeblock(x, y)
ELSEIF x$ = "a" AND x > 2 THEN
CALL left(x, y)
ELSEIF x$ = "s" AND y < 39 THEN
CALL down(x, y)
ELSEIF x$ = "d" AND x < 20 THEN
CALL right(x, y)
ELSEIF x$ = "t" THEN
END
END IF
END SUB
SUB down (x, y)
IF y < 39 OR y < 38 AND mainstill(x, y + 2) = 0 THEN
y = y + 1
END IF
END SUB
SUB drawbox
FOR y = 1 TO 40
FOR x = 1 TO 21
IF mainarry(x, y) = 1 THEN
CIRCLE (x * 10 + 100, y * 10 + 20), 5, 2
END IF
NEXT x
NEXT y
END SUB
SUB genanother (x, y)
x = 11: y = 2
CALL genblock
CALL blocktomain(x, y)
CALL drawbox
END SUB
SUB genblock
s$ = "111001001111100100100111001001111100111111111010010111"
RANDOMIZE TIMER
blockorder = INT(RND * 6) + 1
i = 1
FOR y = 1 TO 3
FOR x = 1 TO 3
blockarry(x, y) = VAL(MID$(s$, ((blockorder - 1) * 9 + i), 1))
i = i + 1
NEXT x
NEXT y
END SUB
SUB judge (x, y)
IF y = 39 OR mainstill(x - 1, y + 2) = 1 AND mainarry(x - 1, y + 1) = 1 OR mainstill(x, y + 2) = 1 AND mainarry(x, y + 1) = 1 OR mainstill(x + 1, y + 2) = 1 AND mainarry(x + 1, y + 1) = 1 OR mainstill(x - 1, y + 1) = 1 AND mainarry(x - 1, y) = 1 OR _
mainstill(x, y + 1) = 1 AND mainarry(x, y) = 1 OR mainstill(x + 1, y + 1) = 1 AND mainarry(x + 1, y) = 1 OR mainstill(x - 1, y) = 1 AND mainarry(x - 1, y - 1) = 1 OR mainstill(x, y) = 1 AND mainarry(x, y - 1) = 1 OR mainstill(x + 1, y) = 1 AND _
mainarry(x + 1, y - 1) = 1 THEN
IF mainarry(x - 1, y - 1) = 1 THEN
mainstill(x - 1, y - 1) = 1
END IF
IF mainarry(x, y - 1) = 1 THEN
mainstill(x, y - 1) = 1
END IF
IF mainarry(x + 1, y - 1) = 1 THEN
mainstill(x + 1, y - 1) = 1
END IF
IF mainarry(x - 1, y) = 1 THEN
mainstill(x - 1, y) = 1
END IF
IF mainarry(x, y) = 1 THEN
mainstill(x, y) = 1
END IF
IF mainarry(x + 1, y) = 1 THEN
mainstill(x + 1, y) = 1
END IF
IF mainarry(x - 1, y + 1) = 1 THEN
mainstill(x - 1, y + 1) = 1
END IF
IF mainarry(x, y + 1) = 1 THEN
mainstill(x, y + 1) = 1
END IF
IF mainarry(x + 1, y + 1) = 1 THEN
mainstill(x + 1, y + 1) = 1
END IF
CALL genanother(x, y)
END IF
END SUB
SUB left (x, y)
IF mainstill(x - 2, y) = 1 AND mainarry(x - 1, y) = 1 OR mainstill(x - 2, y - 1) = 1 AND mainarry(x - 1, y - 1) = 1 OR mainstill(x - 2, y + 1) = 1 AND mainarry(x - 1, y + 1) = 1 THEN
ELSE
x = x - 1
END IF
END SUB
SUB mainframe
LINE (104, 24)-(316, 426), 2, B
END SUB
SUB right (x, y)
IF mainstill(x + 2, y) = 1 AND mainarry(x + 1, y) = 1 OR mainstill(x + 2, y - 1) = 1 AND mainarry(x + 1, y - 1) = 1 OR mainstill(x + 2, y + 1) = 1 AND mainarry(x + 1, y + 1) = 1 THEN
ELSE
x = x + 1
END IF
END SUB