此文为开发视界翻译转载者请注明出处(开发视界 www.sf.org.cn)否则追究法律责任 第五部分:修改Core 这节中我们将首次修改Event Core,看app应用如何在编译器上运行
修改EventCore的第一步 我们真正到了编写代码的时候了。不用使用仿真编译器,也不用开电话,使用File Manager 开始 把你已经建好的master.mbm文件拷贝到目录\System\Apps\Master\" directory,如果没有该目录,你需要建立。System\App文件夹就像PC电脑中的“Program File”文件夹一样,每一个app应用都有自己的文件夹(而且必须跟程序的名字是一样的,在这里就是“master”)。在File Manger应用中你需要修改权限,才能看到系统文件夹。 创建根目录“Programming” 不用多久,你就开始编写自己的程序、开始拥有自己的习惯。同时你也可以使用我的一些方法。所有我的再Programer中实现的程序都单独存放在Document文件夹中。 在“Programming”文件夹中创建“Master”目录 每一个应用程序或者project都拥有自己的文件夹。 把“core.opl”文件拷贝到该目录下,把文件名称修改为“Master” 不需要把“.opl”这个后缀放在文件尾,尽管如此在你访问文件的时候,该文件也会自动被识别为该类型的文件。这是一个个人的爱好方法,也可以把后缀加到文件中。如果你忘记了,opl文件可以从下面网站得到:http://www.freepoc.org/core.htm 编辑core.opl创建master.opl 修改识别符 因为使用了常量,修改core.opl应用到程序里面就比较简单。打开新创建的master.opl看一下存储在app开始部分的定义的常量。 CONST K_Author_Email$="ewan@freepoc.org" CONST K_Author_Name$="Ewan Spence" CONST K_App_Name$="Core OPL" CONST K_App_Ver$="1.00 从字面上可以看懂他们的意思。你的email和name可以应用在任何提示版权的地方和“关于”中。APP的名字经常被使用在菜单、标题栏、“关于”等任何地方。 这里可以存放任何你觉得合适的东西,别忘记了,修改起来也非常容易。 在程序设计开始的时候,版本号最好从0.01开始, 1.00在正式发布的时候使用。在发布一个app应用的时候,我不断的增加这个数字(0.01是第一个;0.07是第七个版本;0.23是第二是三个版本)。 每修改一次bug发布后,坂本号码增加0.01,1.01代表修改了一次bug后的第一个版本。如果修改内容不影响程序的重要功能,版本号我们只修改小数点后面第二位;如果对软件的功能产生了比较大的影响,我们可以考虑修改版本号的小数点后面第一位(比如从1.01直接提升为1.1,而不是1.11,因为1.11是用来给第一次修改后命名的)。 看一下菜单系统和相关的系统,你可以找到相关的name、number和email信息了。 设置工具栏和标题栏 我们已经讲过,他们可以通过ini.文件来设置和存储。如果你不想修改他们的设置,新建的app应用就永远是可见的,上面有标题栏,左边状态栏也是最大的。 看一下PROC init:,你会发现下面的代码: AfSetTitle:(K_App_Name$,KAfTitleTypeMainTitle%) 因为你在常量的部分已经设置了K_App_Name$的值,因此这里你也不需要修改。 下面我们将对CBA重新命名,在这里也可以了解命名在PROC init:中如何实现的,在opl代码说明部分的最末尾处,我将解释他是如何工作的,同时,你也可以自己看代码,看能否自己了解其工作原理。 加载Graphics 第3部分中,我们介绍了如何通过使用gCREATE’d和gOPEN’d来创建和打开窗口和位图。任何全局的图像无论是窗口还是位图都是在PROC init:结尾的时候创建的。我通常编成的时候,习惯使用全局类型变量id%来存储图形元素。而且,常用id%(1)到id%(8)存储窗口,用id%(9)到id%(16)存储位图。 要尽可能多的利用重复的语句,在这部分尤其重要。因为图形元素是我们经常使用的内容,需要特别关注。 翻译和检查 一旦你编辑了PROC init:,最好在这个时候翻译成OPL语句,检查其中有没有错误。当然,你也可以在翻译前编辑好代码,如果你编写的代码符合逻辑,你就可以从修改的主要功能的部分检查。如果发现有问题,很可能是拼写错误! 操纵主屏幕 Master有一个主屏幕,用来显示10种猜测的选项、结果,以及最右侧胜利的形式。我们现在要做的就是布局这些格子,为第六部分作准备。
 这一部分非常重要。我浏览了一下前5节所讲述的内容,这个程序的特点和我们以前讲述过的程序都是不同的。因此,这是一个非常重要的原则,是基础。 计算机编程中,尽可能的使用可重复利用的代码,尤其是重复做同样的事情的时候。在MASTER中,要显示很多的球到屏幕上。我们可以通过下面的代码实现: PROC m_showball:(foo_turn%,pos%,ball%) gUSE id%(1) gAT (foo_turn%*36)+5,((pos%-1)*36)+5 gCOPY id%(10),36,0,36,36,1 : rem * Mask gCOPY id%(10),(ball%+1)*36,0,36,36,0 : rem * Ball ENDP 当我们需要显示一个球的时候,我们调用这个程序,不要忘记了调用的时候传输3个值就可以了。 第一个值是foo_turn%,这个值告诉程序使用哪一列;(从1到10),这取决于有序进行到第几轮。我们不使用主循环变量因为有时候我们要打印出具体的位置。 Pos%值告诉程序使用的行(从1到4)。 我们通过在gAT中使用这些值来控制光标的位置,为下面的两个gCOPY准备。 我们为什么不能只使用一个gCOPY命令呢?因为有背景存在.如果拷贝了包含球的区域到空格中,那么连同球的周围三个空白的区域也被拷贝. 如果使用gCOPY的0标志,那么就可以设置像素,控制背景图片的颜色. 这个方法通过两个步骤来实现-两个gCOPY命令. 显示空白区域 通过一下代码实现: PROC m_showball:(foo_turn%,pos%,ball%) gUSE id%(1) gAT (foo_turn%*36)+5,((pos%-1)*36)+5 IF ball%=0 gCOPY id%(9),foo_turn%*36)+5,((pos%-1)*36)+5,36,36,0 gCOPY id%(10),0,0,36,36,0 ELSE gCOPY id%(10),36,0,36,36,1 : rem * Mask gCOPY id%(10),(ball%+1)*36,0,36,36,0 : rem * Ball ENDIF ENDP 这是因为当我们需要清除一个球的时候,我们的方法有些不同.我们并不想在背景上突出一个洞或者在原来的球上覆盖.我们想要得是在原来的背景上重新存储,从mbm文件中重新拷贝网格. 显示所有的格 我们已经具备了在屏幕上显示网格的原素了.看下面两条新命令. gBOX width,height 这段代码描述了一个盒子,他的左上角位于光标的位置(可以通过gATx,y修改)。 gLINEBY x_distance,y_distance 这段代码描述了一条线,从光标开始向右x像素;向下y像素。如果使用负数,则相反。 看下面的程序。。。 PROC init_display: LOCAL foo% rem *** Copy the background into the main window. gUSE id%(1) gAT 0,0 gCOPY id%(9),0,0,548,200,3 rem *** Draw the squares of the grid using supplied bitmap foo%=-1 DO foo%=foo%+1 m_showball:(foo%,1,0) m_showball:(foo%,2,0) m_showball:(foo%,3,0) m_showball:(foo%,4,0) m_showguess:(0,0,foo%) UNTIL foo%=9 rem *** Draw the outside of the grid and the solution boxes gAT 5,5 : gBOX 360,145 : gAT 5,157 : gBOX 360,37 gAT 398,5 : gBOX 37,145 gAT 398,41 : gLINEBY 36,0 gAT 398,77 : gLINEBY 36,0 gAT 398,113 : gLINEBY 36,0 gAT 398,157 : gBOX 37,37 gVISIBLE ON ENDP Rem语句显示了每个部分的功能。使用DO。。。UNTIL。。。循环语句,使复杂的网格变得简单。通过使用循环语句,我们不但描述了猜谜的格,我们还创建了显示成绩的位置。由于mbm的特点,我们需要手动设置右下角的位置。 最后,建立右侧的行,猜10次结束后显示正确的答案或者游戏通过后显示正确的答案。 显示猜测 快速看一下PROC m_showguess%:(right_place%,wrong_place%,foo_turn%)。通过使用这段代码来显示我们的猜测是否准确。 我们也可以用来显示一个空格。这段代码是唯一最近才发布的。原理同使用PROC m_showball:是一样的。 结论 运行Master,可以看到网格了。我们看不到球,尽管我们已经讨论了如何处理。下周我们学习如何在屏幕上放置光标,同过光标来选择一个带颜色的球完成一次猜测!
|