QBASIC中的活动图像

来自:宇宙工作室 作者:Mallard著 tsowly译
[ 注 - 这个指导主要针对EGA图形]
[ 需要VGA图形的信息, 给Mallard发电子邮件: mallard@gcomm.com]
这个指导预期是给精通标准QBasic命令的中级的程序员看的。
从http://www.wp.com/80948/qb取得这篇文章

--------------
[内容目录]
(1) QBasic能做什么?
(2) 利用DATA来建立图形
(2) GET和PUT图形
(4) 这是怎样工作的?

--------------
[QBasic能做什么?]

QBasic不意味着一个好的环境可以适应图形的运用。相反,它意味着初学者
的语言应该是有条理的编程,使用基本的编程手法就够了。无论如何,只要使用
其中一些函数,当我们充分运用它的能力时,就可以达到比较理想的图形品质。
在这里,最好的屏幕模式是SCREEN 7,320 X 200 16色的屏幕模式。也许这看
上去很简单,但这个模式很快而且有多个复合的“页面”可以用来来消除闪烁。
VGA 图形也能完成,但如果计算机不是很快,就会发生很多闪烁。
当然,即使没有这篇指导,你也可以用 LINE,CIRCLE和PSET,但这个方法更
快、更好、更专业的。在这篇文章讲的所有方法都是我自创的 ,我一个人研究了
很多年了。

--------------
[使用DATA来建立图形]

这个方法中使用的图形是我事先用自己写的图形编辑器专门为这篇指导制作
的,但最后还是转变为用DATA语句来读取颜色值。我将开始解释如何使用DATA语
句制作图形。
首先,你得决定你的图形将有多大。例如,你选择了10x10像素大小的图片。
要做一个图像,先象这样做一个表格:

DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
DATA 00,00,00,00,00,00,00,00,00,00
然后,把QB编辑器改为“覆盖”模式(按键盘上的“INSERT”键),将黑色
的色值(现在图片中的颜色是00,是背景色)改成你想要的颜色。颜色表如下:

00-黑 01-深蓝 02-深绿 03-深青 04-深红 05-深紫 06-褐色 07-灰
08-深灰 09-淡蓝 10-淡绿 11-淡青 12-淡红 13-紫红 14-黄 15-亮白

例如,使用这组DATA语句来建立一个火的图形:

DATA 00,00,00,04,00,00,04,00,00,00
DATA 00,00,04,04,00,04,04,04,00,00
DATA 00,00,04,04,04,04,04,04,00,00
DATA 00,04,04,12,12,04,04,04,00,00
DATA 00,04,04,12,12,04,04,00,00,00
DATA 00,04,04,12,12,04,04,00,00,00
DATA 00,04,12,12,12,04,04,04,00,00
DATA 00,04,12,14,14,12,04,04,00,00
DATA 04,04,12,14,14,14,12,04,00,00
DATA 04,04,12,14,14,14,12,04,00,00
注意如果没有用下面要讲的方法将这些DATA语句来读入数组的话,接下去就什
么也干不了。在我们继续下一步之前,你试着自己做一些图形,也可以用来试试下
边的方法。

--------------
[GET和PUT图形]

现在你应该有一组描述图形的DATA语句(他应该看起来像个某种东西)。接下
去干什么呢?用下面的方法来把他们画到屏幕上去,

然后将这幅图片读入数组。确保事先已经调用了SCREEN 7语句。

xlength = 10 '可以将10替换成你的图片的长
ylength = 10 '可以将10替换成你的图片的宽
FOR y = 1 to ylength
FOR x = 1 to xlength
READ z
PSET(x, y), z
NEXT
NEXT
屏幕会告诉你你的图像怎样。如果你对他已经满意了,进入下一步。如果不满
意,修改并重新调入图片。
好的,现在你已经画了一张好看的图片,你得把他放入内存中去,这样程序就
用不着每次都重画了,可以节省很多计算机资源。要这样做,首先用DIM建立一个数
组,然后用GET将这个图形到那个数组中去。像这样:

DIM graphicname(xlength * ylength)
'给你的图形起一个名字,替换graphicname
GET (0,0)-(xlength, ylength), graphicname
CLS
OK!你已经将你的图片存入了计算机的内存中了。如果还要看看这个图像,要用
PUT语句,像这样:
PUT (x, y), graphicname '可以将X和Y替换成你需要的显示图像的位置,
这部分就是这些了。现在你可以做一些简单的图形了。要知道如何建立一个平滑
的动画的方法的话,继续读下一部分。

--------------
[这是怎样工作的?]

现在你知道了怎样使用DATA语句建立图形数据、如何读取数据和把他们画到屏幕
上去、如何GET和PUT图形。然而,要建立运动的图像是有一点复杂的,虽然不太难。
你要做的就是设置你要用的屏幕页号。当你用SCREEN语句时,你可以将图形建立
在一个不同的“页”上,然后将他们复制到屏幕上去,然后用CLS除去所有的图像。
第一步完了,你的SCREEN 7语句应该变成SCREEN 7,0,1,0.这意味着你的图像都将
绘制在PAGE 1上,而PAGE 0就代表了用户可以看得见的屏幕。当你完成了绘图工作后,
所有的图形还是不会出现在屏幕上,除非用PCOPY 1,0语句才可以显示出来。

这有一个例子,他可以移动你前面建立的图形横穿屏幕。

SCREEN 7,0,1,0 '将PAGE 1作为操作页,PAGE 0作为可视页。
.... '插入建立图形的代码,当然是用了上边方法了。
CLS
WHILE x < 270
PUT (x, 100), graphicname '- replace graphicname w/ the name of
PCOPY 1,0 'your graphic
CLS
x = x + 1
WEND
--------------
上面的代码可以任你修改。如果你需要更多的关于这篇文章里讲述的图形使用技巧
的帮助,请E-MAIL Mallard--mallard@gcomm.com或者访问QBasic主页
http://www.wp.com/80948/qb/