此文为开发视界翻译转载者请注明出处(开发视界 www.sf.org.cn)否则追究法律责任 这节我们开始学习设计一个应用程序,从中学习如何处理图片,如何操纵窗口和图表。 预则立,不预则废! 虽然这是一句谚语,但是在编程过程中可以体会到这句谚语的正确性。 这节资料的目的就是指导如何创建一个OPL应用程序,自己可以发布。我们通过设一个程序,通过使用EVENT Core 来创建一个应用来演示创建的方法。 我们要创建的游戏的名字叫Master,是基于游戏Mastermind设计的。游戏中一共有不同数量的四种颜色的球放在不同的位置,当你猜某种颜色的球在某位置有几个的时候,游戏会告诉你实际上有几个,其余的地方还有多少。你一共有10次机会。如果都没有猜中,你就输了。 有一点需要注意:程序设计并没有一个所谓正确或者错误的方法,这个方法对我来说是最好的,但是不一定适用于所有人。如果你想修改什么地方,或者通过另外一种次序,都无所谓,只要你觉得好。 Master怎么操作? 现在要做的是一把整个程序分解成不同的片段,每一个片段可能有很多程序组成,甚至每一个独立的步骤也可能有独立的程序来完成的。 如果还引用“故事”的比喻的话,我们要把程序分成不同的章节和段落,这样编译器对OPL进行编译的时候也比较容易。 用户界面 你想你的界面是什么样子呢?最好先花点时间在纸上把你的构思画出来,不用担心现在不会使用图表,你现在只要关注你的目标,我们会在以后的学习中讲到。
 另外,我们要决定哪些消息栏要永久放在屏幕上,我们可以从右边的CBA中选择,题目栏在上面,状态栏在左边。对于Master,我们将都使用这三种信息栏,这在初始化文件initial.ini文件中会被指定。 需要注意的是很多应用程序中工具栏的状态是可以选择的,这个问题我们将在以后学习,现在不用考虑,现在多进行一些程序编写,以后学习这个问题就比较清楚。 背景图案 一个可以令Mster引人注目的东西就是背景图案,因为游戏不可能在一个白色的屏幕上,而是有一个桌面形式的背景。这样不仅能从程序开发过程中学到更多的关于图片处理的技巧,而且能够增加应用程序的实用性。 永远不要低估一个简单的改进在软件使用者眼中的力量。在Guad游戏的编写过程中,在最后的时刻,我通过图表和几行文字增加了一个常用的功能,说明游戏的规则。这仅仅在游戏第一次运行的时候才会显示,而且在以后游戏的任何时候都可以通过调用帮助重新显示这些信息。而通常,这些信息都是在“帮助”里面的而且被突出帮助的特性。通过一点小小得努力,但是对于程序来说是非常有帮助的。切记! 控制 玩家共有五个键,光标和空格键用来选择一个颜色。在游戏格中,上下键用来移动光标上下移动,选择放置颜色的位置;使用左右键可以在颜色中不断选择。敲击空格键就会进行一次选择。除此之外还有菜单,用来选择游戏的难度。 游戏难度选择 增加游戏难的简单方法就是增加颜色数量。这样,简单模式有四种颜色,中等难度有6种颜色,困难难度有8种颜色。 在OPL中使用图表 计算机只能显示文字的年代已经早就过去了。现在我们可以通过创建图片和操纵图标来为用户提供一个更友好的界面,这样更方便用户使用,尽管像DOS和Linus Console这样使用命令代码的界面还存在。 在OPL中有两种基本的图标元素,当初始化的时候,系统会自动分配给他们两个参数。我们不需要去记参数究竟是多少(而且每次使用的时候系统都回分配不同的参数),我们使用数组。在Event Core中,使用array id%(),因此你可以使用id%(1),或者其它,只要不超过你定义的GLOBLE id%(x)。通常16个已经足够了。 窗口 窗口就是放置图表的地方,你可以把它看成一张你要在上面绘画的白纸。应该注意的是,一个画面不仅仅可以显示一个窗口,如果你的屏幕被分成两部分,那你就可以使用两个窗口来实现这个功能,一个在左边,一个在右边。 在使用一个窗口前,必须先创建窗口。当你创建了一个窗口,系统命令会返回一个窗口的值,被存放在id%()数组。 id%(1)=gCREATE 0,0,640,200,K_Const_256Colours,1 第一组数字(实例中是0,0)表示窗口左上角的坐标。例子中(0,0)代表窗口开始于最左上角。同样,(320,20)代表窗口从中间开始,离屏幕上方20像素。 下一组数代表窗口的窗口的高度和宽度。 倒数第二组数字其实并不代表数字,这里代表默认的常量。这组数字决定了一个窗口可以显示多少种颜色。处理器可以支持4096种颜色,但是实际上256种颜色已经足够了。也有想减少颜色的时候,减到16种,或者在黑白显示上只显示两种。最主要的原因就是使用越少的颜色,系统就占用越少的内存。 点阵图 点阵图是通过使用图表包建立的图表,其中包含你的应用程序。首先你要把点阵图加载到内存中。尽管你把点阵图存储在了硬盘上,但是这并不等于程序就监测到。 id%(9)=gLOADBIT("D:\System\Apps\Master\Master.mbm",0,3) 这段代码表示系统将从D:\System\Apps\Master\的master.mbm文件中加载点阵图。最后的两个数字非常重要,会根据文件的不同而改变。 第二个数字(3)告诉计算机将使用哪一个点阵图,MBM文件可以存储很多点阵图,第一个用0表示,第二个用1表示,一次类推。 第一个数字代表你是否可以修改点阵图。除非你在进行一个艺术包装或者操纵mbm文件,否则就把其设置成“只读”,用0来表示(如果想修改,需要设置成‘1’)。 关闭图像元素 当你完成一个图像或者位图的处理以后,请将其关闭。这样就可以释放其占用的内存,使程序运行的更快。 可以通过下面的方法来实现: gCLOSE id%(foo%) 这里foo%是一个数组的索引。如果能在一个应用结束后反复检查内存是否释放是一个非常好的想法 foo%=0 DO foo%=foo%+1 TRAP gCLOSE id%(foo%) UNTIL foo%=16 REM *** 16是在id%数组中定义的元素的个数。 显然这样会导致死循环,如果元素没有打开的时候将会出现错误提示。 把MBM拷贝到窗口中 下面看一下将MBM拷贝到窗口的代码。 gUSE id%(1) gCOPY id%(9),100,0,40,50,3 gUSE告诉系统将创建什么样的窗口,当你使用gCREATE创建一个窗口的时候,将会自动生成活动的窗口。但是在任何图片操作前,最好使用gUSE命令。 下面是gCOPY命令。第一个数字id%(9)表示拷贝哪一个点阵图到现在的窗口。你也可以指定某一个点阵图的部分来拷贝。下面两个数字(100,0)表示图片的左上角坐标,从点阵图的左上角开始计算。 下面两个数字指定了点阵图或者部分的宽度和高度。

左边的图片就是一个例子。
最后的这个数字决定了点阵图是如何拷贝过来到的,下面是拷贝点阵图的不同的方法,只由最后的这个数字可以决定究竟使用哪种方式。 形式1 形式2 形式3 形式4
结尾 在前三节中,我们几乎没有看到多少实际的例子。从下一节开始,我们将为Master创建mbm文件,开始我们的编程之路!
|