一.序言 1.1 本手册的说明 随着文曲星新品CC800的上市,其主要特色GVBASIC自主编程功能受到了广大的文曲星用户及程序设计爱好者的热烈欢迎,为此我们编写了这个说明文档,以供广大用户参考.由于时间有限,所加入范例程序不是太多,我们会在今后陆续添加到本手册中.请您随时关注文曲星网站. 1.2 BASIC的历史 BASIC Beginner's All-purpose Symbolic Instruction Code 的缩写,意为初学者通用符号指令代码)语言是在1964年由美国的两位教授Thomas 和John G.Kemeny在Fortran语言的基础上设计的语言系统,这个简单、易学的程序设计语言当时只有17条语句,12个函数和3个命令,现在一般称其为基本BASIC。 BASIC语言自诞生起,几十年间,经过世界各地的微机生产厂家的不断扩充和完善,先后出现了许多版本,其中有几个版本使用最为广泛,如:APPLE-Ⅱ机上用的APPLE SOFT BASIC,LASER-310上用的MSBASIC以及IBM-PC及其兼容机上用的BASICA和GWBASIC等.另外还是MicroSoft公司的MSBASIC和QBASIC等. 从诞生之初,BASIC语言就以其简单,易学对硬件要求低等特点受到了广大程序设计人员,特别是电脑初学者的青睐,历经数十年,显示了其顽强的生命力。如令BASIC语言在许多国家都作为一种计算机程序的教学语言和入门语言。流行当今的VisualBasic语言也借荐了许多BASIC语言的特点而倍受注目. 1.3.什么是文曲星GVBASIC 文曲星GVBASIC是在APPLE SOFT BASIC和GWBASIC基础上,继承了BASIC语言简单,易学功能强大的特点,根据文曲星自身的硬件特点而开发的程序语言,它的出现极大的拓展了文曲星的使用范围及功能,使客户能够根据自身的需求,编制出他们所需要的而现有文曲星上又没有的软件,真正做到了想你所想,做你所想。并且由于文曲星GVBASIC和其它BASIC语言的共通性,因此通过使用它可以为更好地了解及使用其它的BASIC语言和其它程序语言打下了一个良好的基础. 1.4 文曲星GVBASIC与其它BASIC语言的异同 1.4.1.文曲星GVBASIC与其它BASIC语言名称及用法均相同的命令及语句
命令及函数名用途 用法 与数组定义相关的 DATA 与数组有关的相同 READ 与数组有关的相同 RESTORE 与数组有关的相同 DIM 与数组有关的相同 流程控制 IF...THEN...ELSE 选择结构语句相同 IF..THEN... 选择结构语句相同 WHILE..WEND 循环控制相同 FOR...TO..STEP...NEXT 循环控制相同 DEF FN 定义函数相同 GOSUB...RETURN 分支到当前程序模块中的子程序相同 字符串处理 ABS() 返回数的绝对值相同 ATN() 返回用弧度表示的正切值相同 COS() 返回弧度的余弦相同 EXP() 返回e的指定次幂相同 INT() 返回不大于给定数的最大整数相同 LOG() 返回一个数值的自然对数相同 RND() 产生0-1之间的随机数相同 SGN() 返回数的符号值相同 SIN() 返回弧度的下弦相同 SQR() 返回数的平方根相同 TAN() 返回弧度的正切相同 ASC() 返回字符串每一个字符的ASCII码相同 CHR$() 返回指定的ASCII码对应的字符相同 HEX$() 返回十进制数的十六进制的字符串相同 LEFT$() 返回从字符串左边开始的的指定数目的字符相同 LEN() 返回字符的长度相同 MID$() 返回从字符串指定位置开始的指定数目字符相同 RIGHT$() 返回从字符串右端开始的指定数目的字符相同 STR$() 返回把数值数据转换为字符后的字符串相同 INVERSE 反显字符相同 VAL()把一个数字字符转换为相应的数值相同 输入/输出相关命令 CLS 清除屏幕相同 INKEY$ 从键盘读入一个字符相同 INPUT 从键盘读取输入相同 LOCATE 把文件光标定位到指定的行,列相同 SPC() 在PRINT语句中跳过指定个数的空格相同 WRITE 把数据输出到屏幕或文件相同 图形 CIRCLE 画圆相同 LINE 画线相同 BOX 画矩形相同 DRAW 画点不同 声音 PLAY 演奏指定的音乐相同 BEEP 使扬声器发出一个短促的声音相同 文件 OPEN 打开文件 INPUT# 从顺序文件读取一个字符串相同 GET 从随机和二进制文件读取数据相同 PUT 把数据写入随机或二进制文件相同 LOF 返回随机文件长度相同 CLOSE 关闭文件相同 EOF() 当文件指针位于文件结尾时返回-1 相同 其它 TRACE 单步跟踪程序执行相同 LET 将变量赋值 SWAP 交换两下变量的值相同 SYSTEM 退出BASIC系统相同
1.4.2 在其它版本BASIC语言上存在而在文曲星GVBASIC中没有的语句
命令及语法用途原因可否用其它命令代替 流程控制 SELECT CASE...END SELECT 多条件多分支选择语句未开发可以有IF...THEN...或者ON .GOTO语句代替 DO...LOOP 直到条件为真时结束循环未开发可以有WHILE...WEND代替 CALL 调用机器语言考虑系统安全 ------------ CHAIN 把控制转移到另一个程序未开发可以用ON..GOSUB代替 FUNCTION 定义语言函数未开发可用DEF FN CDBL 把数作为双精度值返回较少使用 数组相关 LBOUND 返回数组一个维的最小合法下标可不用 -- UBOUND 返回数组一个维的最大合法下标可不用 -- OPTION BASE 设置0或者1作为默认最小合法下标可不用 -- 字符串 LCASE$() 返回以小写字母组成的字符串未开发可自主编程代替 LTRIM$() 返回删除字符串左端空格后的字串较少使用可自主编程代替 UCASE$() 返回以大写字母组成的字符串未开发可自主编程代替 SPACE$() 返回由指定数目空格字符组成的字串较少使用可自主编程代替 输入/输出 CSRLIN() 返回当前光标所在行未开发可用不同名函数POS()代替 PRINT USING 按指定格式显示数值不需要 -- TAB() 指它格式输出不需要 -- WIDTH 定义屏幕或其它设备的行列数或宽度不需要 -- 图形 COLOR 设定前景和背景色单色不需要 -- SCREEN 设定当前屏幕模式未开发 -- WINDOW 设定逻辑坐标系统未开发 -- GET() 把图像从屏幕复制到内存中的数组未开发 -- PUT() 把图像从内存数组复制到决屏幕未开发 -- 声音 SOUND 使扬声器产生指定频率的音调不需要 -- 文件操作 LOC() 返回文件的当前位置较少使用 -- SEEK() 移到文件中的指定位置未开发 -- LOCK() 为文件或文件中一条记录加锁不需要 --
1.4.3GVBASIC和其它版本BASIC同名函数或语句使用的差异. 1.PRINT语句 用途:向屏幕光标位置显示数值,字符串数据 由于文曲星屏幕的局限, PRINT 语句在使用中和PC机的BASIC有所不同. PRINT 语句中的的逗号在PC机上表示按分区方式显示, 而在GVBASIC中则表示换行输出. 例如: PRINT 1,2,3 在PC上输出为: 1 2 3 在文曲星上输出为: 1 2 3 而分号在其它BASIC和GVBASIC中作用相同,即按紧凑格式输出 例如: PRINT 1;2;3 在PC机上输出为: 123 在文曲星上输出为: 123 2.DRAW语句 用途:画连续直线. 在GVBASIC中DRAW语句相对简化,单独使用该语句时只能画出一个点. 而在其它BASIC中DRAW语句相对复杂一些,可以画出各个方向上的的连续的直线. 例如: 在其它版本BASIC中: DRAW "BM100,100;F60;L120;E60" 表示画一个三角形. 而在GVBASIC中上述语句是错误的. 当然在GVBASIC中也可画出三角形, 但要用DRAW语句配合FOR循环语句才可以或者用LINE语句也可,应用起来相对复杂一些
2.2 GVBASIC中的符号定义 2.2 GVBASIC中的符号定义与其它BASIC版本完全一样. 1.数值表达式 % 整型变量 $ 字符串 + 加法运算符 - 减法运算符 * 乘法运算符 / 除法运算符 ^ 乘方运算符 2.关系运算符 = 等于 > 大于 < 小于 >= 大于或等于 <= 小于或等于 <> 不等于 3.逻辑运算符 AND 逻辑与 OR 逻辑或 NOT 逻辑非 4.特殊符号 ; 控制PRINT语句以紧凑格式输出 , 控制PRINT语句以换行格式输出 : 分隔一行中并联语句 ? INPUT语句提示符 ] GVBASIC命令提示符(表示GVBASIC处于编辑状态并等待用户输入命令) 2.3 GVBASIC语言中定义了哪几种数据类型. 解答: GVBASIC定义了两种数据类型 (1)常规整型数: 范围从-32768到+32767, 通常正号可以省略,类型声明符为%, 例如: A% 就表示变量为整型 (2)实型变量: 范围从-10E+30,10E+30 2.4 GVBASIC其它规定 变量名最长: 16 最大行号: 9999 2.5 变量,数组定义 LET 将值赋给变量 SWAP 交换两下变量的值 DIM 定义数组 READ 将DATA语句中的下一个数据项赋给指定的变量 DATA 指定要读入数组的一组数据 RESTORE 指定为读入数据所用的下一个DATA语句 范例:随机产生10个二位整数,放入数组a,从中选出一个最大的和最小的数打印出来.(数组的应用) ]10 CLS ]20 DIM A(10) ]30 m=100 ]40 n=-100 ]50 FOR I=1 TO 10 ]60 A(I)=INT(RND*90)+10 ]70 PRINT A(I); ]80 NEXT I ]90 FOR I=1 TO 10 ]100 IF A(I)>N THEN N=A(I) ]110 IF A(I)<M THEN m=A(I) ]120 NEXT I ]130 PRINT "最大数 N=";n,"最小数 M=";m ]140 END
2.6 流程控制 GVBASIC提供了较常用的几种流程控制语句 GOTO IF...THEN/GOTO...ELSE ON...GOTO n1,n2,n3... 范例:1.编制程序将24小时计时法转成12小时计时法 ]10 REM 转换计时法 ]20 INPUT HOUR24,MINTUE ]30 IF HOUR24<0 OR HOUR24>23 THEN 60 ]40 IF HOUR24<=12 THEN HOUR12=HOUR24: PRINT "现在时间是:";HOUR12;":";MINTUE;"am" ]50 IF HOUR24>12 THEN HOUR12=INT(HOUR24/2): PRINT HOUR12;MINTUE;"pm" ]60 END 2.7循环结构语句 WHILE...WEND 当给定的条件为真时,执行循环语句中的循环体 FOR...NEXT 根据指定的次数执行循环体 范例1: 打印九九乘法表. 10 REM 乘法表 20 FOR A=1 TO 9 30 FOR B=A TO 9 40 PRINT A;"*";b;"=";A*B, 50 NEXT B 60 NEXT A 70 END 2.8 过程及函数 DEF FN 定义用户自定义函数 GOSUB...RETURN 分运支到当前程序模块中的了例程 ON...GOSUB 2.9 数学运算函数和语句 ABS() 返回数的绝对值 ATN() 返回用弧度表示的反正切值 COS() 返回弧度的余弦 EXP() 返回e的指定次幂 INT() 返回不大于给定数的最大整数 LOG() 返回一个数值的自然对数 RND() 产生0-1之间的随机数 SGN() 返回数的符号值 SIN() 返回弧度的正弦 SQR() 返回数的平方根 TAN() 返回弧度的正切 2.10 字符串 一,字符串常量 字符是指单个字母,数字或其他特殊符号及文曲星中的图形,字符串是系统允许使用的若干个字符构成的序列,也称为字符串常量.一个字符串一般是双引号括起来的一串字符. 二 字符串大小的比 在计算机内部(文曲星内部),所有字符都是以ASCII码表示的,比较两下字符的大小,就是比较它们的ASCII码值的大小 三 字符串比较的规律 1.同规格的字母比较,按字母的顺序排,后面的大。 2.大小写字母的比较,小写字母大于大写字母. 3.数字字符比较,按数值的大小排,数值大的大. 4.字母与数字比较,数字(0-9)的代码均小于字母(A-Z)的代码 5.空格比数字,标点,字母等常见符号都小. 四 字符串处理的函数及语句 ASC() 返回字符或字符串第一个字符的ASCII码 CHR$() 返回指定的ASCII码对应的字符 LEFT$() 返回从字符串左边开始的指定数目的字符 LEN() 返回字符串的长度 MID$() 返回从字符串指定位置开始的指定数目字符 RIGHT$() 返回从字符串右端开始的指定数目的字符 STR$() 返回把数值型数据转换为字符型后的字符串 VAL() 把一个数字字符串转换为相应的数值 范例: 输入一串字符,将它的内容按下列的密码规则转换为明码输出 密码: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 明码: F L Q C O S N Z E Y V R X H T B W A J D M I G U P K 其余字符都不变换 例如: 输入: V BVZI VO KILJ UXDN 输出: I LIKE IT VERY MUCH 程序如下 ]10 CLS ]20 X$="ABCDEFGHIJKLMNOPQRSTUVWXYZ" ]30 Y$="FLQCOSNZEYVRXHTBWAJDMIGUPK" ]40 INPUT Z$ ]50 FOR I=1 TO LEN(Z$) '将该密码从左到右逐个处理 ]60 A$=MID$(Z$,I,1) '取出第I个字符放入A$中 ]70 FOR J=1 TO 26 ' 寻找密码字符在X$中的位置 ]80 IF A$=MID$(X$,J,1) THEN 100 ]90 NEXT J ]100 IF A$=MID$(X$,J,1) THEN PRINT MID$(Y$,J,1); ELSE PRINT A$; '若找到,转明输出,则否显示原字符 ]110 NEXT I ]120 END ]RUN 如果输入: V BVZI VO KILJ UXDN 输出结果: I LIKE IT VERY MUCH 2.11简单输入/输出 CLS 清除屏幕 INKEY$ 从键盘读取一个字符 INPUT 从键盘读取输入 LOCATE 把光标定位到指定的行,列 PRINT 从屏幕当前光标位置显示数值,字符串或数据 SPC() 在PRINT语句中跳过指定个数的空格 WRITE 把数据输出到屏幕或文件 范例: 产生一个动态的字符 ]10 FOR I=1 TO 10 ]20 N=I ]30 LOCATE 3,N ]40 PRINT "GO!" ]50 FOR J=1 TO 100 /*空循环起延时作用*/ ]60 NEXT J ]70 CLS /*擦除运动轨迹*/ ]80 NEXT I ]90 END RUN /*显示从左到右运动GO!*/ 2.12 图形 CIRCLE 在屏幕指定位置画圆 DRAW 在屏幕指定位置画点 LINE 画直线或矩形 BOX 画矩形 ELLIPSE 画椭圆 2.13 声音 BEEP 使扬声器发出一个短促的声音 PLAY 演奏指定的音乐 2.14 文件 EOF() 当文件指针位于文件结尾时返回-1(真) INPUT # 从顺序文件中读取数据 OPEN 打开文件 WRITE 把数据写入顺序文件 CLOSE 关闭数据文件 LSET 向缓冲区分配的变量赋值,并做左对齐调整 LOF 返回随机文件长度 GET 从指定文件读取指定记录放入缓冲区 PUT 向指定文件的指定记录写入缓冲区内容 FIELD 指定缓冲区大小分配缓冲区变量 COPY 复制文件 范例: 建立一个数据文件,并用WRITE#语句将5个人的姓名和年龄输出给该文件,然后程序将该文件关闭,再次将它打开用于输入,并把这5个记录读回到程序中,并显示到屏幕上. ]10 CLS ]20 OPEN "TEST.TXT" FOR OUTPUT AS #1 ]30 PRINT "输入5个姓名,年龄" ]40 FOR I=1 TO 5 ]50 INPUT NAME$,AGE% ]60 WRITE #1,NAME$,AGE% ]70 NEXT I ]80 CLOSE #1 ]90 OPEN "TEST.TXT" FOR INPUT AS #1 ]100 PRINT "你输入的姓名,年龄如下:" ]110 FOR I=1 TO 5 ]120 INPUT #1,NAME$,AGE% ]130 PRINT NAME$,AGE%; ]140 NEXT I ]150 CLOSE #1 ]160 END
3.1GVBASIC环境下编辑和帮助按键览表
编辑状态 键名称功 能 F1 更改输入模式(插入,覆盖) F2 删除 ← → 左右移动光标 SHIFT 切换英数中文输入 CR(输入) 确认一行程序输入结束 AC(退出) 不能退出GVBASIC,可使用BASIC指令SYSTEM退出BASIC HELP(帮助进入BASIC帮助文件 帮助状态 HELP(帮助) 切换帮助方式(内容,索引) AC(退出) 退出BASIC帮助到BASIC编辑状态 ←↑→↓ 移动光标,浏览内容时为翻屏 字母键 在索引帮助状态,可以跳到以相应字母开始的指令索引区,如果已到该字母区,则在该字母区循环移动光标 CR(输入) 确认浏览项 运行状态 AC(跳出) 可以跳出死循环3.2 什么是GVBASIC助手 GVBASIC助手是远见公司为GVBASIC专门开发的辅助工具, 有了它可以使程序的编辑变得更加方便, 因此强烈推荐各位在编写GVBASIC程序时一定要用GVBASIC助手.例如: 在GVBASIC环境中如果要修改一条语句则必须用EDIT命令逐条去修改,而有了GVBASIC助手您就只需把光标移动到要修改的地方就可以了. GVBASIC助手编辑环境下各键使用方法: 按→ ↑ ← ↓移动光标到输入位置 按<F1>键 切换插入覆盖模式 按<F2>键 删除字符 按<跳出>键到保存菜单
指令及函数一览:
变量及数组定定义函数: DIM 数组定义 说明: 定义数组维数并分配空间,没有经过DIM说明的数组下缺省最大值是10. 用法: DIM 数组名(N1,N2,N3...) IF...THEN/(GOTO)...ELSE 条件判断 语法: IF...THEN n,条件成立时跳到n行处执行;条件不成立时接着下一行执行。 IF...GOTO n 等价于 IF...THEN n IF ... THEN n ELSE ..., IF ... IF ...GOTO n ELSE ... IF ... 范例: ]10 N=1 ]20 PRINT N,SQR(N) ]30 N=N+1 ]40 IF N<4 THEN GOTO 20 ]50 END ]RUN 显示结果: 1 1 2 1.41421356 3 1.73205081 4 2 ] LET 给变量赋值 说明: LET 命令可以省略 语法: LET 变量=表达式 范例: ]10 LET N=2008-1999 ]20 R=0.09 ]30 LET AAL=100*(1+R)^N ]40 PRINT "AAL";AAL ]50 END ]RUN AAL=217.189328 SWAP 变量互换 语法: SWAP A1,B1 范例: ]10 A=28;B=50 ]20 PRINT A,B ]30 SWAP A,B ]40 PRINT A,B ]50 END ]RUN 28 50 50 28 ]
选择结构流程语句
GOTO 无条件跳转 说明: *程序跳转到指定行号处运行 语法:GOTO n 范例: ]10 LET A=20 ]20 GOTO 40 程序跳转到行号40处在屏幕上输出HELLO字样 ]30 PRINT A ]40 PRINT "HELLO" ]50 END RUN 显示结果: HELLO IF...THEN/(GOTO)...ELSE 条件判断 语法: IF...THEN n,条件成立时跳到n行处执行;条件不成立时接着下一行执行。 IF...GOTO n 等价于 IF...THEN n IF ... THEN n ELSE ..., IF ... IF ...GOTO n ELSE ... IF ... 范例: ]10 N=1 ]20 PRINT N,SQR(N) ]30 N=N+1 ]40 IF N<4 THEN GOTO 20 ]50 END ]RUN 显示结果: 1 1 2 1.41421356 3 1.73205081 4 2 ] ON 控制转移 语法: ON...GOTO n1,n2,n3... 说明: 计算ON后的表达式的值,为1时对应n1子程序,为2时对应n2子程序..当无对应时继续执行下一条语句. 范例: 请参考本教程后面的例程< 四则运算>
循环控制语句 FOR...TO...STEP...NEXT 循环控制 语法: FOR ... TO ... NEXT 如: ]10 FOR I=5 TO 1 STEP -1 ]20 PRINT I ]30 NEXT I ]40 END ]RUN 显示结果: 5 4 3 2 1 ] WHILE/WEND 循环控制 说明:当表达式为真时执行循环,当表达式为假时继续执行WEND后的下一条语句 语法: WHILE 表达式 .... WEND 范例: ]10 REM AVERAGE ]20 S0=0 ]30 GOSUB S0 ]40 PRINT S0 ]50 GOTO 990 ]100 READ A ]110 WHILE A<>-1 ]120 S0=S0+A ]130 READ A ]140 WEND ]900 DATA 34,45,50,65,23,88,-1 ]990 END ]RUN 305 ]
自定义函数及转子过程语句: DEF FN 自定义函数 用法: DEF FN 函数名=表达式 范例: ]10 DEF FN A(W)=2*W+W; ]20 PRINT FN A(23) ]30 DEF FN B(X)=4+3 ]40 G=FN B(23) ]50 PRINT G ]60 DEF FN A(Y)=FN B(Z)+Y ]70 PRINT FN A(G) ]80 END ]RUN 结果: 69 7 14 ] GOSUB 跳转子程序 说明:程序跳转到以指定行号开始的子程序处运行,遇到RETURN语句时,就返回到GOSUB的下一条语句接着运行. 语法: GOSUB n 范例: ]10 GOSUB 100 ]20 IF X>0 THEN PRINT X ELSE PRINT "ERR" ]30 END ]100 INPUT X /*子程序开始*/ ]110 RETURN /*子程序结束*/ ]RUN /*运行程序*/ ?45 45 /*输出结果*/ 此程序执行顺序为:10->100->110->20->30 RETURN 子程序返回 说明: 请参考GOSUB语句范例 语法: RETURN RESUME 出错子程序返回 语法: RESUME
数学运算函数: AND 逻辑与 用法: AND 范例: ]20 IF A>0 AND A<1 THEN PRINT A OR 逻辑或 语法: OR 范例: ]20 IF A> OR B>1 THEN PRINT A*B NOT 逻辑非 语法: NOT 范例: ]20 IF NOT(A>2) THEN PRINT A ABS 取绝对值 语法: ABS (exp) 范例: ]10 A=ABS(35*-4) ]20 PRINT A ]30 END ]RUN 140 ] ATN 反正切值 说明: 返回弧度的正切值 语法: ATN (表达式) 范例: COS 余弦值 说明:返回弧度的余弦值 语法: COS (表达式) EXP e的次方 说明: e的x次方值 语法: EXP(x) INT 取整 说明: 取值为x的整数部分 语法: INT(x) 范例: ]10 A=234.58 ]20 PRINT INT(A) ]30 END ]RUN 显示结果: 234 ] LOG 取对数 说明: 以e为底的对数 语法: LOG(x) RND 产生随机数 说明: 产生一个(0,1)间的随机小数,如果x>0,每次产生不同的随机数;如果x<0,产生一定系列的随机数,如果x=0,输出上次产生的随机数 用法: RND(x) SGN 取符号 语法: SGN(x) SIN 正弦值 说明:返回弧度的正弦值 语法: SIN(exp) SQR 平方根 语法: SQR(exp) TAN 正切值 说明: 返回弧度的正切值 语法: TAN(exp)
字符串处理函数
ASC 求ASCII码 说明: 求取字符串s$中的第一个字符的ASCII码 语法: ASC(S$) 范例: ]10 A$="hello" ]20 PRINT ASC(A$) CHR$ 取字符 说明: 求ASCII码为n的字符 语法: CHR$ (n) 范例: ]10 FOR I=1 TO 255 打印从1-255对应的字符 ]20 PRINT CHR$(I) ]30 NEXT I LEFT$ 取字符 说明: 取字符串s$左端的n个字符 语法: LEFT$ (s$,n) 范例: ]10 X$="ABCDEFGHIJKLMNOPQRSTUVWXYZ" ]20 A$=LEFT$(x$,5) ]30 PRINT A$ ]40 END RUN 显示结果: ABCDE LEN 求字串长 说明: 求字符串s$的长度 语法: LEN (S$) 范例: ]10 X$="ILOVEGVBASIC" ]20 PRINT LEN(X$) ]RUN 显示结果: 12 MID$ 取字符 说明: 从字符n位置起取m个字符 语法: MID$ (S$,n,m) 范例: ]10 X$="ABCDEFGHIJKLMNOPQRSTUVWXYZ" ]20 A$=MID$(x$,13,3) ]30 PRINT A$ ]40 END RUN 显示结果: MNO RIGHT$ 取字符 说明: 取字符串S$右端的n个字符 语法: RIGHT$(S$,n) 范例: ]10 X$="ABCDEFGHIJKLMNOPQRSTUVWXYZ" ]20 A$=RIGHT$(x$,4) ]30 PRINT A$ ]40 END RUN 显示结果: WXYZ MKS$ 实数转换成二进制(5byte表示) 语法: MKS$(numexpr) 范例: ]40 LSET A$=MKS$(1.445) STR$ 数字转为字串 说明: 将数字n转化为字串 语法: STR$(n) 范例: ]10 LET X=123 /* 数值 */ ]20 A$=STR$(X) ]30 PRINT A$ ]40 END ]RUN 显示结果: 123 /* 字符串 */ VAL 字串转为数字 说明: 将字符串S$转化为数字 语法: VAL(S$) 范例: ]10 LET X$="12345" /* 字串形 */ ]20 A=VAL(X$) ]30 PRINT A ]40 END ]RUN 显示结果: 12345 /* 数值形 */ POS 取字符位置 说明: 得到光标的水平位置 语法: POS(n) 范例: SPC 打印空格 说明: 打印n个空格,需配合PRINT语句使用 语法: SPC(n) 范例: ]PRINT 45:SPC(4);56 45 56 CVI$ 二进制串(2byte)转为整数 语法: CVI$(S$) 范例: ]40 A%=CVI$("10") CVS$ 二进制串(5byte)转为实数 语法: CVS$(S$) 范例: ]30 LSET A$=MKS$(1.445) ]40 A=CVS$(A$) MKI$ 整数转为二进制串(2byte表示) 语法: MKI$(intexpr) 范例: ]40 RSET A$=MKI$(10) MKS$ 实数转为二进制串(5byte表示) 语法: MKS$(numexpr) 范例: ]40 LSET A$=MKS$(1.445)
输入/输出处理函数
READ 从数据区读数 语法: READ dat1,dat2,dat3... 范例: ]10 REM AVERAGE /*该程序读取多个数,然后计算它们的平均值 ]20 S0=0 ]30 GOSUB 100 ]40 PRINT S0 ]50 GOTO 990 ]100 READ A ]110 WHILE A<>-1 ]120 S0=S0+A ]130 READ A ]140 WEND ]900 DATA 34,45,50,65,23,88,-1 ]990 END ]RUN 显示结果: 305 DATA 置数据区数据 说明: 程序范例请参考READ 语法: DATA dat1,dat2,dat3... RESTORE 恢复指针 说明:恢复数据区指针到数据区头 语法: RESTORE INPUT 从键盘输入 语法: INPUT A1,A2,A3 范例1: ]10 INPUT A ]20 PRINT A ]30 END ]RUN ?23 /*程序运行后出现 ?提示符等待用户键入*/ 23 范例2: ]10 INPUT A$ ]20 PRINT A$ ]30 END ?I LOVE GVBASIC /*在?提示符后键入I LOVE GVBASIC*/ I LOVE GVBASIC /*屏幕输出I LOVE GVBASIC*/ PRINT 屏幕显示 语法: 1.PRINT exp 显示完表达式然后换行 2.PRINT exp1,exp2,exp3...显示完每个表达式以后换行 3.PRINT exp1;exp2;exp3...显示完每个表达式以后不换行,接着显示下一个表达式 范例: ]10 A$="THIS" ]20 B$="IS" ]30 C$="GVBASIC" ]40 PRINT A$,B$,C$ /*换行显示方式*/ ]50 PRINT A$;B$;C$ /*不换行显示方式*/ ]60 END ]RUN THIS IS GVBASIC THISISGVBASIC LOCATE 置显示位置 说明: 可以用该命令通过改变n,m参数的值实现动画字幕 语法: LOCATE n,m n: 纵坐标位置 m: 横坐标位置 范例: ]10 FOR I=1 TO 10 ]20 N=I ]30 LOCATE 3,N ]40 PRINT "GO!" ]50 FOR J=1 TO 100 /*空循环起延时作用*/ ]60 NEXT J ]70 CLS /*擦除运动轨迹*/ ]80 NEXT I ]90 END RUN /*显示从左到右运动GO!*/ INVERSE 反显字符 语法: INVERSE 范例: ]30 INVERSE INKEY$ 读键值 语法: INKEY$ 范例: ]10 WHILE INKEY$<>" " ]20 PRINT "A"; ]30 WEND
图形及声音处理函数
PLAY 放音乐 说明: C D E F G A B 7个英文字符分别代表音阶: 1 2 3 4 5 6 7 语法: PLAY "CDEFGAB" 范例: ] PLAY "L8 AG L2A P2 L8 GFED L2 C L1 D P1" BEEP 喇叭发声 语法: BEEP 说明: 让喇叭发出短促的提示声 GRAPH 图形模式 语法: GRAPH 范例: ]10 GRAPH ]20 BOX 10,10,40,40 ]30 CIRCLE 50,50,30 ]40 END DRAW 画点语句 语法: DRAW X,Y,TYPE 其中TYPE确定画点方式,其它图形指令亦有此下列参数 0 clear 清除 1 print 画点 2 convert 反显 3 ora 或 4 and 与 5 eor 异或 LINE 画直线/矩形 语法: LINE X0,Y0,X1,Y1,TYPE 范例1: ]10 GRAPH ]20 LINE 10,10,50,50,1 ]40 END RUN /*该程序在屏幕上打印出一条直线*/ 范例2: ]10 GRAPH ]20 LINE 10,10,50,50,1 ]30 LINE 50,10,50,30,1 ]40 LINE 50,30,10,30,1 ]50 LINE 10,10,10,30,1 ]60 END RUN /*该程序在屏幕上画出下个漂亮的长方形*/ ELLIPSE 画椭圆 语法: ELLIPSE X0,Y0,A,B,FILL,TYPE *FILL=1 填充 *FILL=0 不填充 *TYPE=1 画椭圆 *TYPE=0 清椭圆 范例: ]10 GRAPH ]20 ELLIPSE 80,40,60,30,1 ]40 END RUN /*屏幕上画出一个椭圆*/ CIRCLE 画圆命令 语法: CIRCLE X0,Y0,R,FILL,TYPE X0: 圆心的横坐标 Y0: 圆心的纵坐标 R : 圆半径 FILL=1: 填充 FILL=0: 不填充 TYPE=1: 画圆 TYPE=0: 清圆 范例: ]10 GRAPH ]30 CIRCLE 80,40,30,1 ]40 END ] RUN /*该程序在屏幕正中央画出一个黑色的圆*/ BOX 画矩形 语法: BOX X0,Y0,X1,Y1,FILL,TYPE *FILL=1 填充 *FILL=0 不填充 *TYPE=1 画矩形 *TYPE=0 清矩形 范例: ]10 GRAPH ]20 BOX 10,10,40,40 ]40 END
文件操作函数: OPEN 打开数据文件 语法: OPEN file$ [FOR mode AS #filenum% [LEN=reclen%] file$:文件名串 mode 打开方式 INPUT 只读 OUTPUT 只写 APPEND 追加 RANDOM 随机 filenum%: 文件号 LEN: 缓冲区长度,默认为32(只在RANDOM方式下有效) 范例: ]10 OPEN "DAT" FOR OUTPUT AS #1 ]20 OPEN "DAT1" FOR RANDOM AS #2 LEN=50 CLOSE 关闭数据文件 语法: CLOSE 关闭数据文件 范例: ]10 OPEN "DAT" FOR OUTPUT AS #1 ]20 CLOSE #1 EOF 顺序文件是否结束,未结束返回1(特别注意: 在其它BASIC语言中应返回值0) 语法: EOF(filenum%) 范例: ]50 IF EOF(1) THEN PRINT "FILE END" PUT 向指定文件的指定记录写入缓冲区内容 语法: PUT #filenum%,recordnum% 范例: ]40 PUT #1,1 GET 从指定文件读取指定记录放入缓冲区 语法: GET #filenum%,recordnum% #filenum% 文件号 #recordnum% 记录号 范例: ]40 GET #1,1 INPUT 向数据文件中输入数据 INPUT #filenum%,varlist[,varlist,...] 范例: ]10 INPUT #1,A$,A1$ '向文件号为#1的文件中写入两个变量的值 RSET 向缓冲区分配的变量赋值,并做右对齐调整 语法: RSET VAR$=strexpr$ 范例: ]40 RSET A$="WORLD" COPY 复制文件 语法: COPY 文件名1 文件名2 范例: ]COPY "M" "A.DAT"
程序编辑及调试函数:
SAVE 保存当前内存中的程序 语法: SAVE 文件名 范例: ]10 LET A=20 ]20 PRINT A ]30 END ]SAVE MY.BAS ] LOAD 将源程序装入内存 语法: LOAD 文件名 范例: ]LOAD MY.BAS ]LIST ]10 LET A=10 ]20 PRINT A ]30 END LIST 显示内存当前程序 语法: LIST [ ]/[-n]/[n-]/[n1,n2] 缺省: 显示所有行. -n: 显示n行以前的所有程序行. n-: 显示n行以后的所有程序行. n1,n2: 显示n1至n2行之间所有的程序行. 范例: ]10 LET A=0 ]20 PRINT A ]30 END ]LIST ]10 LET A=0 ]20 PRINT A ]30 END ]LIST 10,20 ]10 LET A=0 ]20 PRINT A NEW 清除内存中的程序和所有变量 语法: NEW 范例: ]10 LET A=0 ]20 END ]LIST ]10 LET A ]20 END ]NEW ]LIST 注:原先输入的程序被清除了 ] RUN 运行程序 语法: RUN [ ]/[n] :从最小行号处运行程序 n:从指定的行号处运行程序 范例: ]10 LET A=20 ]20 PRINT A ]30 END ]RUN 20 ] FILES 列出文件目录 语法: FILES KILL 删除指定的文件 语法: KILL 文件名 EDIT 编辑指定的一行程序 语法: EDIT n n:程序的行号,可对原有程序行进行修改,如果该行号不存在则代表编辑新行 范例: ]EDIT 20 *20 PRINT 89+66 ]LIST ]20 PRINT 89+66 ] CONT 继续运行由STOP命令中断的程序 语法: CONT 范例: ]10 LET A=20 ]20 STOP ]30 PRINT A ]40 END RUN BREAK IN 20 ]CONT 20 ] STOP 暂停执行 *暂停程序的执行等待CONT命令 语法: STOP POP 将堆栈中的返回地址弹栈 说明:和RETURN的功能差不多,但程序不是返回到GOSUB的下条语句,而是接着运行. 语法: POP REM 注释 说明: REM是非执行语句,用来对程序或程序中的某些语句作注释,便于阅读程序 用法: 说明 CLEAR 清除程序变量,释放内存区 语法: CLEAR 范例: ]10 A=23 ]20 PRINT A ]30 CLEAR ]40 PRINT A ]50 END ]RUN 23 0 ] DEL 删除程序行 语法: DEL [n]/[n1,n2]/[n1-n2] n:删掉第n行程序 n1,n2:删掉n1至n2行间的程序 n1-n2:删掉n1至n2行间的程序 范例: ]10 A=12.8 ]20 B=56 ]30 PRINT A,B ]40 END ]DEL 20-30 ]LIST ]10 A=12.4 ]20 END ] TRACE 单步跟踪 说明:TRACE 指令执行后进入单步跟踪状态,这时要执行的每一条语句和行号都显示在屏幕上,直到执行了NOTRACE才退出单步跟踪状态.在GVBASIC助手中不能运行. 语法: TRACE NOTRACE 退出单步跟踪状态 说明: 进入单步跟踪状态后,执行NOTRACE语句后,退出单步状态返回正常状态.只能在GVBASIC环境中运行,而不能在GVBASIC助手中运行 语法: NOTRACE AUTO 自动置行号(GVBASIC助手中自动拥有该功能) 用法: AUTO [ ]/[n] 范例: ]AUTO %10 A=234.58 %20 PRINT INT(A) %30 END ]RUN
以下两个例程源程序均可在本站下载后直接运行,/*后字符为注释 ****四则运算**** 例程: ]10 CLS ]20 DIM OPERAND(6),OPERATOR(6),EPS(12) ]30 DIM PRIORITY(6,6),STACK1(6),STACK2(6) ]40 RANGE=10:AMOUNT=10IFFICULTY=1 ]50 FOR I=0 TO 6 ]60 FOR J=0 TO 6 ]70 READ PRIORITY(I,J) ]80 NEXT J ]90 NEXT I ]200 CLS ]210 LOCATE 1,4RINT "小学四则运算"RINT "1,开始测试" /*主菜单*/ ]220 PRINT "2,选择难度" ]230 PRINT "3,题目数量" ]240 PRINT "请选择(1-3):"; ]250 LOCATE 5,13:CHOICE$=INDEX$ /*定位光标*/ ]252 IF ASC(CHOICE$)=27 THEN GOTO 9999 ]260 IF NOT (CHOICE$="b" OR CHOICE$="n" OR CHOICE$="m") THEN GOTO 200 ]272 IF CHOICE$="b" GOTO 400 ]273 IF CHOICE$="n" GOTO 500 ]274 IF CHOICE$="m" GOTO 600 ]400 IF DIFFICULTY<6 THEN IF DIFFICULTY=5 THEN GOTO 1000 ELSE GOTO 700 ]500 CLS ]510 PRINT "1,加法 2,减法": PRINT "3,乘法 4,除法" /*二级菜单*/ ]520 PRINT "5,四则混合 6,小于10": PRINT "7,小于100" ]540 PRINT "请选择(1-7):"; ]550 LOCATE 5,13:CHOICE$=INDEX$ ]562 IF CHOICE$="b" THEN DIFFICULTY=1: GOTO 200 ]563 IF CHOICE$="n" THEN DIFFICULTY=2: GOTO 200 ]564 IF CHOICE$="m" THEN DIFFICULTY=3: GOTO 200 ]565 IF CHOICE$="g" THEN DIFFICULTY=4: GOTO 200 ]566 IF CHOICE$="h" THEN DIFFICULTY=5: GOTO 200 ]567 IF CHOICE$<>"j" AND CHOICE$<>"t" THEN GOTO 500 ]570 IF CHOICE$="j" THEN RANGE=10 ELSE IF CHOICE$="t" THEN RANGE=100 ]580 GOTO 200 ]600 CLS ]610 PRINT RINT "请输入题目数量:"; ]620 INPUT " ";A$ ]630 AMOUNT=INT(VAL(A$)) /*将字符转化为数值*/ ]640 IF AMOUNT <=0 THEN GOTO 600 ]660 GOTO 200 ]700 REM 简单运算 ]701 RIGHT=0 ]710 FOR TIMES=1 TO AMOUNT ]730 NUM1=INT(RANGE*RND(1)) /*使所取的随机数小于10,由RANGE值决定*/ ]740 NUM2=INT(RANGE*RND(1)) ]750 IF DIFFICULTY=4 AND NUM2<=1 THEN GOTO 740 ]760 ON DIFFICULTY GOSUB 3500,3600,3700,3800 ]770 IF ANSWER <0 THEN GOTO 730 ]775 IF ANSWER <>INT(ANSWER) AND DIFFICULTY=4 THEN GOTO 730 /*答题错误转730重做此题*/ ]780 CLS: PRINT NUM1; ]790 ON DIFFICULTY GOSUB 2510,2520,2530,2540 ]800 PRINT NUM2;"="; ]810 INPUT REPLY$ ]815 IF LEN(REPLY$)>0 AND VAL(REPLY$)=0 AND REPLY$<>"0" THEN GOTO 780 ]820 IF ABS(VAL(REPLY$)-ANSWER)<.01 THEN PRINT "太棒了!^_^":RIGHT=RIGHT+1:GOTO 830 ]825 PRINT "加油喔!"RINT "正确答案:";INT(ANSWER+0.5) ]830 IF TIMES<>AMOUNT THEN PRINT "按任意键继续...";:GOSUB 3900 ]880 NEXT TIMES ]890 PRINT "总共答对:";RIGHT;" 答错:",AMOUNT-RIGHT ]900 PRINT "是否继续(Y/N)"; ]910 CON$=INKEY$ ]920 IF CON$<>"n" THEN GOTO 700 ]930 GOTO 200 ]1000 REM 四则混合运算 ]1001 RIGHT =0 ]1010 FOR TIMES=1 TO AMOUNT ]1019 REM 生成表达式 ]1020 FOR I=0 TO 6 ]1024 OPERAND(I)=0:OPERATOR(I)=0 ]1050 EPS(I)=0:EPS(12-I)=0 ]1060 NEXT I ]1069 REM NUM:操作数的个数(2-4) ]1070 NUM=INT(3*RND(1))+2 ]1080 FOR I=0 TO NUM-1 ]1090 OPERAND(I)=INT(RANGE*RND(1)) ]1110 NEXT I ]1120 IF INT(4*RND(1))=1 AND NUM<>2 THEN GOTO 1170 ]1130 FOR I=0 TO NUM-2 ]1140 OPERATOR(I)=INT(4*RND(1))+1 ]1150 NEXT I ]1160 GOTO 1300 ]1169 REM 生成带括号的表达式 ]1170 BRACKET=INT((NUM-1)*RND(1)) ]1180 FOR I=0 TO NUM ]1190 OPERATOR(I)=INT(4*RND(1))+1 ]1200 NEXT I ]1210 OPERATOR(BRACKET)=5 ]1220 OPERATOR(BAACKET+2)=6 ]1299 REM 为计算表达式的值做准备 ]1300 J=0: I=0 :EXPROI=0 ]1310 WHILE INT(I+0.5)<INT(NUM+0.5) ]1320 IF OPERATOR(J)=5 THEN J=J+1:EPS(EXPROI)=-5:EXPROI=EXPPOI+1 ]1330 EPS(EXPPOI)=OPERAND(I):EXPROI=EXPPOI+1 ]1340 ON OPERATOR(J) GOSUB 2000,2100,2200,2300 ]1350 IF OPERATOR(J)=6 THEN J=J+1:EPS(EXPPOI)=-6:EXPPOI=EXPPOI+1:GOTO 1340 ]1360 I=I+1:j=J+1 ]1370 WEND ]1390 EPS(EXPPOI)=-7 ]1499 REM 计算运算式的值 ]1500 ST1=0: ST2=0: EXPPOI=0 ]1510 STACK2(ST2)=-7:ST2=ST2+1 ]1520 CH=EPS(EXPPOI):EXPPOI=EXPPOI+1 ]1530 WHILE NOT (CH-7 AND STACK2(ST2-1)=-7) ]1540 IF CH>0 THEN GOSUB 1570 ELSE GOSUB 1580 ]1550 WEND ]1560 GOTO 1600 ]1570 STACK1(ST1)=CH:ST1=ST1+1:CH=EPS(EXPPOI):EXPPOI=EXPPOI+1 ]1575 RETURN ]1580 ON PRIORITY(-STACK2(ST2-1)-1,-CH-1) GOSUB 3100,3200,3300 '注意ON语句的用法 ]1585 RETURN ]1599 REM 判断用户答案是否正确 ]1600 IF STACK1(ST1-1)<0 THEN GOTO 1020 ]1610 ANSWER=STACK1(ST1-1) ]1615 CLS ]1620 FOR K=0 TO EXPPOI-1 ]1630 IF EPS(K)>=0 THEN PRINT EPS(K);ELSE ON -EPS(K) GOSUB 2510,2520,2540,2550,2560 ]1650 NEXT K ]1660 PRINT "="; ]1670 INPUT REPLY$ ]1675 IF LEN(REPLY$)>0 AND VAL(REPLY$)>0 AND VAL(REPLY$=0 AND REPLY$<>"0" THEN GOTO 1615 ]1680 IF ABS(VAL(REPLY$)-ANSWER)<.01 THEN GOSUB 1910 ELSE GOSUB 1930 ]1690 IF TIMES <> AMOUNT THEN PRINT "按任意键继续...";:GOSUB 3900 ]1700 NEXT TIMES ]1710 PRINT "总共答对:";RIGHT;" 答错:";AMOUNT-RIGHT ]1720 PRINT "是否继续(Y/N)"; ]1730 CON$=INKEY$ ]1740 IF CON$<>"n" THEN GOTO 1000 ]1800 GOTO 200 ]1910 PRINT "太棒了!^_^"RINT=RIGHT+1 ]1920 RETURN ]1930 PRINT "加油喔!"RINT "正确答案:";:IF ANSWER<1 THEN PRINT "0"; ]1940 PRINT INT (ANSWER*1000+0.5)/1000 ]1950 RETURN ]2000 EPS(EXPROI)=-1:EXPPOI=EXPPOI+1 ]2010 RETURN ]2100 EPS(EXPPOI)=-2:EXPPOI=EXPPOI+1 ]2110 RETURN ]2200 EPS(EXPPOI)=-3:EXPPOI=EXPPOI+1 ]2210 RETURN ]2300 EPS(EXPPOI)=-4:EXPPOI=EXPPOI+1 ]2310 RETURN ]2510 PRINT "+";:RETURN ]2520 PRINT "-";:RETURN ]2530 PRINT "X";:RETURN ]2540 PRINT "/";:RETURN ]2550 PRINT "(";:RETURN ]2560 PRINT ")";:RETURN ]3100 STACK2(ST2)=CH:ST2=ST2+1 ]3310 CH=EPS(EXPPOI):EXPPOI=EXPPOI+1 ]3120 RETURN ]3200 ST2=ST2-1:STACK2(ST2)=0 ]3210 CH=EPS(EXPPOI):EXPPOI=EXPPOI+1 ]3220 RETURN ]3300 ST2=ST2-1:THETA=STACK(ST2):STACK2(ST2)=0 ]3310 ST1=ST1-1:NUM2=STACK1(ST1):STACK1(ST1)=0 ]3320 ST1=ST1-1:NUM1=STACK1(ST1):STACK1(ST1)=0 ]3330 ON-THETA GOSUB 3500,3600,3700,3810 ]3340 STACK1(ST1)=ANSWER:ST1=ST1+1 ]3350 IF THETA=-4 AND ANSWER=9999 THEN GOTO 1020 ]3360 RETURN ]3500 ANSWER=NUM1+NUM2: RETURN ]3600 ANSWER=NUM1-NUM2:RETURN ]3700 ANSWER=NUM1*NUM2:RETURN ]3800 ANSWER=NUM1/NUM2:RETURN ]3810 IF NUM2=0 THEN ANSWER=9999 ELSE ANSWER=NUM1/NUM2 ]3820 RETURN ]3900 KEYVAL$=CHR$(255) ]3910 WHILE 1 ]3920 IF KEYVAL$<>INKEY$ THEN GOTO 3940 ]3930 WEND ]3940 RETURN ]4001 DATA 3,3,1,1,1,3,3 ]4002 DATA 3,3,1,1,1,3,3 ]4003 DATA 3,3,3,3,1,3,3 ]4004 DATA 3,3,3,3,1,3,3 ]4005 DATA 1,1,1,1,1,2,0 ]4006 DATA 3,3,3,3,0,3,3 ]4007 DATA 1,1,1,1,1,0,2 ]9999 END
***翻牌成对****
]10 GRAPH ]20 DIM POSXY$(18),CHARXY%(18,2),OPFLAG%(18),DELFLAG%(18),OPCUNT%(18) ]21 DIM NUM$(9),TEMP1$(18) ]30 FLAG%=1:TOTAL%=0;SUM%=0:STAY%=10:TIMER=0:CUOCOUNT%=0 ]31 BLK1X%=2:BLK1Y%=1:BLK2X%=2:BLK2Y%=1 ]33 GOSUB 1700 ]40 CLS ]50 FOR I=1 TO 18 ]60 OPFLAG%(I)=0ELFLAG%(I)=0:OPCOUNT%(I)=0 ]70 NEXT I ]80 GOSUB 900: GOSUB 1000: GOSUB 1600: GOSUB 1500 ]90 LET X%=1ET Y%=1:STARTFLAG%=0;TIMER=0 ]100 IF TOTAL%=18 THEN GOSUB 1900:GOTO 200 ]110 STAY%=1: GOSUB 1600 ]111 LOCATE X%,Y%: PRINT " " ]112 IF PEEK(199)<128 THEN 173 ]120 M1$=INKEY$ ]125 LOCATE X%,Y%RINT "■"; ]130 IF M1$=CHR$(23) THEN GOSUB 300 ]140 IF M1$=CHR$(22) THEN GOSUB 400 ]150 IF M1$=CHR$(20) THEN GOSUB 500 ]160 IF M1$=CHR$(21) THEN GOSUB 600 ]170 IF M1$=CHR$(13) THEN GOSUB 1100 ]171 IF M1$=CHR$(27) THEN 190 ]173 STAY%=1: GOSUB 1600 ]174 LOCATE X%,Y%: PRINT " "; ]180 GOTO 100 ]190 CLS: LOCATE 2,3: PRINT "退出"; ]200 CLS ]201 END ]300 REM SUB OPEN -LEFT *****************<<<<<<<<<<<<<<<< ]310 STARTFLAG%=1 ]320 GOSUB 700 ]330 IF Y%=1 AND X%=1 THEN Y%=11:X%=3: GOTO 350 ]340 IF Y%=1 THEN X%=X%-1:Y%=11 ELSE Y%=Y%-2 ]350 XL1%=X%-1:YL1%=(Y%+1)/2:XYSRT1%=XL1%*6+YL1% ]360 IF OPFLAG%(XYSRT1%)=1 OR DELFLAG%(XYSRT1%)=1 THEN GOTO 330 ]380 OLD$=M1$ ]390 RETURN ]400 REM SUB OPEN -RIGHT ****************<<<<<<<<<<<<<<<< ]401 STARTFLAG%=1 ]410 IF TOTAL%=18 THEN GOTO 490 ]420 GOSUB 700 ]430 IF Y%=11 AND X%=3 THEN Y%=1:X%=1:GOTO 450 ]440 IF Y%=11 THEN X%=X%+1:Y%=1 ELSE Y%=Y%+2 ]450 XL1%=X%-1:YL1%=(Y%+1)/2:XYSRT1%=XL1%*6+YL1% ]460 IF DELFLAG%(XYSRT1%)=1 OR OPFLAG%(XYSRT1%)=1 THEN GOTO 430 ]480 OLD$=M1$ ]490 RETURN ]500 REM SUB OPEN -UP^^^^^^^^^^^^^^^^^^^^^^ ]501 STARTFLAG%=1 ]510 GOSUB 700 ]520 IF X%=1 THEN X%=3 ELSE X%=X%-1 ]530 XL1%=X%-1:YL1%=(Y%+1)/2:XYSRT1%=XL1%*6+YL1% ]540 IF OPFLAG%(XYSRT1%)=1 OR DELFLAG%(XYSRT1%)=1 THEN GOTO 520 ]580 OLD$=M1$ ]590 RETURN ]600 REM SUB OPEN -DOWN ^^^^^^^^^^^^^^^^^^^^^^^^^^ ]601 STARTFLAG%=1 ]610 GOSUB 700 ]620 IF X%=3 THEN X%=1 ELSE X%=X%+1 ]630 XL1%=X%-1:YL1%=(Y%+1)/2:XYSRT1%=XL1%*6+YL1% ]640 IF OPFLAG%(XYSRT1%)=1 OR DELFLAG%(XYSRT1%)=1 THEN GOTO 620 ]680 RERUTN ]700 REM SUB SOPEN -RESTORE *************************** ]710 XL1%=X%-1:YL1%=(Y%+1)/2:XYSRT1%=XL1%*6+YL1% ]720 IF DELFLAG%(XYSRT1%)=1 OR OPFLAG%(XYSRT1%)=1 THEN GOTO 740 ]730 LOCATE X%,Y%RINT "■"; ]740 RETURN ]800 REM read----Number ]820 N=0 ]830 READ CH$ ]840 WHILE ASC(CH$)<>48+TMP% ]850 READ CH$ ]855 WEND ]856 FOR I=1 TO 9: READ NUM$(I):NEXT I ]860 DATA "0","苣","菡","菰","蓣","蓐","葳","蒇","蕨","蕤" ]861 DATA "1","睃","眭","睦","瞵","睥","瞍","睢","瞧","睫" ]826 DATA "2","呔","嘻","喳","嗒","啖","叨","嗡"," ]863 DATA "3","蛳","蚊","蜩","螨","蟒","嚏","蜓","蜞","蛴" ]864 DATA "4","蹯","蹊","跄","跟","跖","硗","蹂","蹰","踔" ]865 DATA "5","疳","疟","癃","瘾","瘼","疠","瘛","疽","痈" ]866 DATA "6","宥","寡","褰","蹇","搴","謇","甯","窦","窳" ]867 DATA "7","崦","研","岘","嵴","峒","崛","嵝","峋","崾" ]868 DATA "8","堞","垅","埒","垤","塥","垭","埚","墒" ]869 DATA "9","漭","澌","渫","潆","滠","溽","滹","滤","淠" ]890 RETURN ]900 REM reNdomIze-XY-POS ]930 TMP%=INT(RND(1)*9) ]931 IF TMP%=0 THEN 930 ]932 K=1 ]935 LOCATE 1,18: PRINT TMP% ]938 GOSUB 800 ]940 FOR I=1 TO 18 ]941 IF K=10 THEN K=1 ]942 TEMP1$(I)=NUM$(K) ]943 K=K+1 ]950 NEXT I ]960 I=0:K=1 ]970 FOR I=0 TO 17 ]971 IF I=17 THEN POSXY$(K)=TEMP1$(1):GOTO 990 ]980 N=INT(RND(1)=(18-I)) ]981 IF N=0 THEN GOTO 980 ]983 POSXY$(K)=TEMP1$(N):K=k+1: TEMP1$(N)=TEMP1$(18-I) ]984 NEXT I ]990 RETURN ]1000 REM PUTCHAR ]1010 I=1 ]1020 FOR POSX=1 TO 3 STEP 1 ]1030 FOR POSY=1 TO 11 STEP 2 ]1040 LOCATE POSX,POSY: PRINT POSXY$(I); ]1050 CHARXY%(I,0)=POSX:CHARXY%(I,1)=POSY: I=I+1 ]1060 NEXT POSY ]1070 NEXT POSX ]1090 RETURN ]1100 REM OPEN A CARD ]1110 IF STARTFLAG%=0 THEN X%=1: Y%=1 ]1120 XL1%=X%-1:YL1%=(Y%+1)/2:XYSRT1%=XL1%*6+YL1% ]1130 OPFLAG%(XYSRT1%)=1 ]1140 LOCATE X%,Y%: PRINT " "; ]1150 LOCAT CHARXY%(XYSRT1%,0),CHARXY%(XYSRT1%,1): PRINT POSXY$(XYSRT1%); ]1154 FLAG%=FLAG%+1:OPCOUNT%(XYSRT1%)=OPCOUNT%(XYSRT1%)+1 ]1160 IF FLAG%/2-INT(FLAG%/2)<>0 THEN FLAG%=1 ELSE FLAG%=0 ]1170 IF FLAG%=0 THEN CHAR1$=POSXY$(XYSRT1%): BLK1X%=X%: BLK1Y%=Y%: GOTO 1180 ]1171 IF FLAG%=1 THEN CHAR2$=POSXY$(XYSRT1%): BLK2X%=X%: BLK2Y%=Y%: GOSUB 1200 ]1180 GOSUB 400 ]1190 RETURN ]1120 REM PEI DUI(Y/N)? rem FLAG%=1--->OPeN: FLAG%=0---->No OPEN ]1240 IF CHAR1$=CHAR2$ THEN GOSUB 1300 ]1250 IF CHAR1$<>CHAR2$ THEN GOSUB 1400 ]1290 RETURN ]1300 REM Pel Dul(Y)->Erase 2 block '''''''''''''' ]1310 LOCATE BLK1X%,BLK1Y%: PRINT " "; ]1320 LOCATE BLK2X%,BLK2Y%: print " "; ]1330 XL1%=BLK1X%-1:YL1%=(BLK1Y%+1)/2:XYSRT1%=XL1%*6+YL1% ]1340 XL1%=BLK2X%-1:YL1%=(BLK2Y%+1)/2:XYSRT2%=XL1%*6+YL1% ]1350 DELFLAG%(XYSRT1%)=1: DELFLAG%(XYSRT2%)=1 ]1360 TOTAL%=TOTAL%+2 ]1370 IF OPCOUNT%(XYSRT1%)=1 AND OPCOUNT%(XYSRT2%) THEN GOTO 1371 ]1371 SUM%=SUM%+20: GOTO 1380 ]1374 SUM%=SUM%+10 ]1380 LOCATE 2,14: PRINT "得分"; ]1382 LOCATE 2,18: PRINT " "; ]1383 LOCATE 2,18: PRINT SUM%; ]1384 LOCATE 3,14: PRINT "翻错" ]1385 LCOATE 3,18: PRINT " " ]1386 LOCATE 3,18: PRINT CUOCOUNT%; ]1390 RETURN ]1400 REM Pel DuI(N)->Close 2 blk######################### ]1410 XL1%=BLKX%-1:YL1%=(BLK1Y%+1)/2:XYSRT1%=XL1%*6+YL1% ]1420 XL1%=BLK2X%-1: YL1%=(BLK2Y%+1)/2:XYSRT2%=XL1%*6+YL1% ]1422 OPFLAG%(XYSRT1%)=0: OPFLAG%(XYSRT2%)=0:CUOCOUNT%=CUOCOUNT%+1 ]1425 STAY%=1: GOSUB 1600 ]1430 LOCATE CHARXY%(XYSRT2%,0),CHARXY%(XYSRT2%,1): PRINT POSXY$(XYSRT2%); ]1440 LOCATE BLK2X%,BLK2Y%: PRINT "■"; ]1450 LOCATE BLK1X%,BLK1Y%: PRINT "■"; ]1460 IF OPCOUNT%(XYSRT%)>3 OR OPCOUNT%(XYSRT2%)>3 THEN GOSUB 1800 ]1470 LOCATE 2,14: PRINT "得分"; ]1472 LOCATE 2,18: PRINT " "; ]1473 LOCATE 2,18: PRINT SUM%; ]1474 LOCATE 3,14: PRINT "翻错"; ]1475 LOCATE 3,18: PRINT " "; ]1476 LOCATE 3,18: PRINT CUOCOUNT%; ]1490 RETURN ]1500 REM BLOCK ]1510 LOCATE 1,14: PRINT "难度"; ]1515 LOCATE 1,19: PRINT NAN%; ]1520 FOR LINEX=1 TO 3 STEP 1 ]1530 FOR LINEY=1 TO 11 STEP 2 ]1540 LOCATE LINEX,LINEY: PRINT "■"; ]1550 NEXT LINEY ]1560 NEXT LINEX ]1590 RETURN ]1600 REM sub ]1610 TM1=PEEK(1131) ]1620 TM2=PEEK(1131) ]1640 IF TM1=TM2 THEN GOTO 1630 ]1650 STAY%=STAY%-1 ]1660 IF TIMER=1 THEN LOCATE 1,18: PRINT " J";OCATE 1,18RINT STAY%; ]1670 TM1=TM2 ]1680 WEND ]1682 LOCATE 1,18: PRINT " "; ]1690 RETURN ]1700 REM NAN% du ]1710 CLS ]1720 LOCATE 2,4: PRINT "难度"; ]1730 locate 3,4: PRINT "请选择(1-9):"; ]1735 TIMER=1 ]1741 PLAY "CDEF" ]1742 PLAY "DD" ]1743 PLAY "L8 AG L2A P2 L8 GFED L2 C L1 D P1" ]1760 CMD$=INKEY$ ]1761 IF CMD$="b" THEN NAN%=1: GOTO 1780 ]1762 IF CMD4="n" THEN NAN%=2: GOTO 1780 ]1763 IF CMD$="m" THEN NAN%=3: GOTO 1780 ]1763 IF CMD$="g" THEN NAN%=4: GOTO 1780 ]1765 IF CMD$="h" THEN NAN%=5: GOTO 1780 ]1766 IF CMD$="j" THEN NAN%=6: GOTO 1780 ]1767 IF CMD$="t" THEN NAN%=7: GOTO 1780 ]1768 IF CMD$="y" THEN NAN%=8: GOTO 1780 ]1769 IF CMD$="u" THEN NAN%=9: GOTO 1780 ]1770 IF CMD$=CHR$(13) THEN NAN%-0: GOTO 1780 ELSE 1760 ]1775 LOCATE 1,18: PRINT " " ]1780 LOCATE 1,18: PRINT NAN% ]1790 STAY%=30-NAN%*3 ]1799 RETRUN ]1800 REM SUB SCORE ]1810 IF SUM%-5 <0 THEN SUM%-5 <0 THEN SUM%-5 <0 THEN SUM%-0 ELSE SUM%=SUM%-5 ]1820 RETURN ]1900 REM End_sub ]1910 CLS: LOCATE 2,6: PRINT "真棒!"; ]1920 LOCATE 4,2: PRINT "欢迎下次光临!" ]1930 STAY%=8: GOSUB 1600 ]1950 RETURN ]1960 RETURN
欢迎光临 路桥隧 - 免费·分享·共赢 (http://luqiaosui.com/) | Powered by Discuz! X3.2 |