回 帖 发 新 帖 刷新版面

主题:MOZ版主的贪吃蛇,厉害

DECLARE FUNCTION Getas$ (s$)
DEFLNG A-Z

  COLOR 7, 0
  CLS
  PRINT chr$(218); STRING$(78, 196); chr$(191);
  LOCATE 25, 1: PRINT chr$(192); STRING$(78, 196); chr$(217);
  FOR i = 2 TO 24
      LOCATE i, 1: PRINT chr$(179);
      LOCATE i,80: PRINT chr$(179);
  NEXT
  COLOR 1, 14
  LOCATE 12, 30
  PRINT "      ";
  F = 1
  E# = .9
  s$ = "-12+30-12+31-12+32-12+33-12+34-12+35"
  a$ = Getas$(s$)

  DO
    T1# = TIMER
    DO
         k$ = INKEY$
    LOOP UNTIL k$ <> "" OR ABS(TIMER - T1#) > E#
    SELECT CASE k$
    CASE CHR$(0) + CHR$(75): IF F <> 3 THEN F = 1
    CASE CHR$(0) + CHR$(72): IF F <> 4 THEN F = 2
    CASE CHR$(0) + CHR$(77): IF F <> 1 THEN F = 3
    CASE CHR$(0) + CHR$(80): IF F <> 2 THEN F = 4
    CASE CHR$(27):           F = 0
    END SELECT
    X = VAL(MID$(s$, 2, 2))
    y = VAL(MID$(s$, 5, 2))
    X2 = X
    Y2 = y
    SELECT CASE F
    CASE 1: Y2 = Y2 - 1
    CASE 2: X2 = X2 - 1
    CASE 3: Y2 = Y2 + 1
    CASE 4: X2 = X2 + 1
    END SELECT
    z$ = "-" + RIGHT$(STR$(X2), 2) + "+" + RIGHT$(STR$(Y2), 2)
    IF X2 < 2 OR X2 > 24 OR Y2 < 2 OR Y2 > 79 OR INSTR(s$, z$) THEN
       F = 0
    ELSE
       COLOR 1, 14
       LOCATE X2, Y2
       PRINT " ";
       IF a$ = z$ THEN
          s$ = a$ + s$
          a$ = Getas$(z$)
          T3 = T3 + 1
          IF T3 > 5 THEN
             T3 = 0
             E# = E# - .1
          END IF
       ELSE
          COLOR 7, 0
          LOCATE VAL(RIGHT$(s$, 5)), VAL(RIGHT$(s$, 2))
          PRINT " ";
          MID$(s$, 1) = z$ + s$
       END IF
    END IF
  LOOP WHILE F

FUNCTION Getas$ (s$)
DO
   X = 2 + RND * 22
   y = 2 + RND * 77
   a$ = "-" + RIGHT$(STR$(X), 2) + "+" + RIGHT$(STR$(y), 2)
LOOP WHILE INSTR(s$, a$)
COLOR 0, 4
LOCATE X, y
PRINT "*";
Getas$ = a$
END FUNCTION

回复列表 (共13个回复)

沙发

字符串当数组用,MOZ就喜欢这么玩,不过效率会比数组低些

板凳

[quote]字符串当数组用,MOZ就喜欢这么玩,不过效率会比数组低些[/quote]
啊?你怎么知道我喜欢拿字符串当数组用的?
效率比数组低?那倒未必,得看在什么情况下。

如果需要数值转换的(特别是数量巨大,转换频繁的时候),字符串的确有弱点。
如果相对于数组的移位(相当于C的内存批量复制),或者搜索包含等运算中,
在QB里已经再没有其他更好的办法了。
用字符串的instr( ), mid$( ),以及字符串+等,字符串有相当的优势。
字符串的操作已经相当于C的内存处理了。比起数组来有过之而无不及。
(QB里没有对内存批量操作的办法,只能通过文件BSAVE,BLOAD)
不定长字符串比起来需要定义界限的数组来更方便好用。
(当然,方便是相对于C明确的内存大小必须事前定义而言)
甚至文本文件处理,我都首推字符串,比数组好用快速方便多了。

3 楼

我还是老老实实用数组吧,呵呵

4 楼

想问一下,QB里用DEFLNG A-Z把变量默认定义为长整效率好还是DEFINT A-Z效率好?感觉16位代码还是DEFINT A-Z好一些吧?

5 楼

哦,不错。
你不说我还没想起来。
除了范围以外,短整形会好上(虽然是那么微不足道的)一些。

我总担心会在某个位置溢出,所以习惯了使用长整形。

6 楼

Wrong, 32位整形在32位机最快

7 楼

QB因为设计时的原因,只能在16位环境中运行.
就算是32位机,也需要兼容模拟成16位的环境中执行.

8 楼

早已经可以编译成32位系统的代码啦
不过不是用QB编译器

MOZ只用QB吗?

9 楼

在QB里我能用什么编译器?

FreeBasic可以编译32位目标代码,
可是对输出以及字符串处理都已经有了很大的改变
(我最痛恨的就是它像C一样把chr(0)当成字符结束符了)

VB,VFP编译控制台程序那还不如做窗体,
好像跟QB有太大的差别了.想不做图形都不成了.

10 楼

FreeBASIC好象并不支持QB语句函数全集?QB的程序当然还是QB编译最好,就是那个QBASIC都相当的棒。用QB原生编译器编译QB程序速度最快最能感受DOS程序的纯粹

我来回复

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