回 帖 发 新 帖 刷新版面

主题:写了个小东西,大家别笑话

很长时间以前就有编一个俄罗斯方块的心愿,但是由于水平实在不行,编不出来呀,费了很大劲才写成这样,算是个界面吧,也算是对自己的一个交待。非常粗糙,毛病也很多,和以前我看到的几个高手写的比不了,大家别笑话,还有些BUG,但是实在不愿意动脑子改了,太累了。w变形、a左、s下、d右、t退出。
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

回复列表 (共12个回复)

沙发

运行了下...加强版的方块游戏...
能尝试写出来就是好的...
不停的写才有进步....


哎...我老了..退步了

板凳

呵呵,冷石说笑了,其实就是觉得不写的话有点不甘心,写的太糙。你写的那个倒给我印象很深,很好。其实我的这个破玩艺也象是爱因斯坦做的板凳,编了好几次了,前几次的没到一半就进行不下去了,总算没白忙积累点经验。这个毛病也很大,判断的不准,但是也不想找了,就这样吧,实在太累脑子。

3 楼

怎么可能笑话?写得很好

4 楼

强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!强!

5 楼

你把方块弄成圆形的干什么?

如果这样你这个程序干脆不要叫“俄罗斯方块”了,叫“俄罗斯圆形”算了。

6 楼

把CIRCLE换成LINE就成方块了。呵呵

7 楼

俄罗斯圆形?新鲜!!!!!!!!!!!!!!!

8 楼

还有你这种版本是不是新的啊!平时都是一次四个方块,这次你变成了一次五个。

9 楼

写的不好,就是练手的,不是都说了吗。积累经验而已。想看好的找冷石的。

10 楼

还是不错的。练手的真新鲜。

我来回复

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