pyera主要API

本文包含pyera的主要API,这些API主要集中再core.game中,少数位于script.base_lib中。为了更好的运用pyera,这里有一些规范先写给大家。

1. 代码规范

除了一般的python编码原则以外,这里建议一些根据pyera引擎特性的编程规范。其中,

“建议”是推荐做法,但不是必须。您如果不跟随这些建议的化,一样可以写出顺利运行的代码,不过可能需要处理一些额外的pyera引擎没有处理的情况。

“要求”是必须做法。如果不遵循“要求”进行编码,则可能导致严重的错误,甚至完全无法实现的情况。不过不用担心。pyera引擎本着全面自由的方针进行开发,所以这些“要求”通常会自然遵守,其数量也很少。

建议:

  1. 需要永久化保存的数据请写在game.data下,这样saveload函数可以相对较好的运作。
  2. 在构建一个新的界面的时候,推荐使用game.clr_cmd()来清空函数库,以避免之前的命令仍然有效的情况。
  3. pyera引擎提供多种根据命令运行函数的方法。不过推荐使用绑定命令和函数的方式进行交互。
  4. 如果可以不用事件功能完成特定功能,请不要用事件功能。事件功能非常灵活,但是也带来难以维护的额外复杂性。因此事件功能并不总是最佳选择。

要求:

  1. Game.data下请不要存储闭包函数或者内置类。因为保存功能采用pickle模块编写。python自带的pickle不能够很好的处理闭包函数,可能会出现问题。

2. API 显示部分

显示部分分为两块进行介绍,一块是显示函数,另一块是样式定义函数。

样式定义函数

style_def(style_name, foreground=_foreground, background=_background, font=_font, fontsize=_fontsize, bold=False, underline=False, italic=False)

定义样式的函数。参数分别为(样式名字,前景颜色,背景颜色,字体,字号,是否加粗,是否下划线,是否斜体)。前景颜色和背景颜色可以使用英文或者RGB值,如#FFFFFF

定义样式不可删除,不过可以覆盖。

显示函数

def p(string, style='standard')

输出一个style样式的字符串。不会自动换行

def pl(string='',style='standard)

单独输出一行style样式的string文字。如果string参数为空的话,则另起一行。注意,多次调用这个命令,不能够多次换行。需要空白行,请用类似game.p('\n\n')的方式。

def pline(sample='▃', style='standard')

输出一条直线,sample可以换成任何一个字符并输出。style参数有效。注意:sample接受双字节字符,或者两个单字节字符作为参数。比如sample='一'或者sample='--'

def pwarn(string, style='warning'):

输出警告样式的文字。同时输出字符串到控制台。

def pwait(string, style='standard')

同game.p()但是输出后一个暂停,点击鼠标或输入空命令继续。右键点击跳过之后同一批的所有暂停。

def plwait(string='', style='standard')

同game.pl(), 但有暂停。

def clr_screen()

清除屏幕上所有文字,可以用来当刷新函数。

格式化输出函数

def display_len(text)

计算字符串的显示长度,双字符为2,单字符为1。可以用于自动排版方面

def align(text, width, just='left')

对齐函数,可以左对齐'left'和右对齐'right'。text为文本,width为占位总宽度。just为对齐方式。比如把'name'字符串放在十个空格的最右边,为game.align('name',10, just='left')

3. API 命令部分

这里分成三部分介绍,一部分是基础命令用法。另一部分高级命令用法。最后一部分是仿era命令用法。

基础命令

输出命令

def pcmd(cmd_str, cmd_number, cmd_func=core.flow.null_func, arg=(), kw={}, normal_style='standard', on_style='onbutton'):

pyera生成一个命令包含两个部分,一个是生成一个文字按钮,点击该按钮就会返回一个数值。第二个是绑定一个数值与函数,当系统接受到该数值后则会执行对应的函数。这两个过程是都包含在了pcmd()命令里。

Cmd_str 和 cmd_number 是必要参数,前者是生成的字符按钮内容,后者是返回的数字。注意,当两个命令的cmd_number 重复的时候,则第一个命令会被清除。

Cmd_func 是绑定的函数,arg和kw执行函数时输入的参数。arg是普通参数,kw是键值参数。注意,此处cmd_func是一个可以省略函数。这样系统将不会执行命令,不过依然会返回给系统一个值,可以搭配仿era命令处理方法使用。

Normal_style 是当鼠标不在按钮上的显示样式,on_style是点击按钮时显示的样式。

获得未用命令编号

get_unsed_cmd_num()

有时如果不想或者不方便自己指定编号时,可以自动获取一个没有被用过的编号.这个编号从500开始,因此,如果想使用这个功能,请不要自行指定超过500的编号命令。

清除命令

def clr_cmd(*number, clr_default_flow=True)

可以清除特定命令,也可以清除全部命令。清除的参数就是对应的数字编号。

Clr_default_flow这个参数是用来清除默认流程/默认函数的。关于默认函数请参考游戏运行流程部分。

绑定命令

def bind_cmd(cmd_number, cmd_func, arg=(), kw={}):

重新绑定一个命令数值与对应的函数。

高级命令:默认函数/默认流程

有的时候需要再执行完命令后反复进入同一个界面,比如主界面等。这种时候出于方便考量,可以使用默认流程函数。默认流程函数就是在所有命令都执行结束后,自动进入的界面。关系可以参考游戏运行流程部分。

def set_default_flow(func, arg=(), kw={})

设置默认流程,默认流程就是一个函数。可以通过arg和kw传递参数

def call_default_flow()

直接调用默认流程函数。但是一般不推荐这种使用方式,仅提供一个方便的接口函数。

def clear_default_flow():

清除默认流程函数。当清除后,会直接略过这个阶段。

仿ERA命令形式

考虑到适用性和习惯,这里还提供了一种仿era写命令的方法。具体操作按如下几步。
pcmd命令只用cmd_str和cmd_number 两个参数。不直接绑定函数。
然后用函数修饰符@game.deco_set_tail_deal_cmd_func单独修饰一个处理函数
该函数格式为 def func(order_num).这里的order_num参数就是从系统传输的参数。

例子:

game.pline()
game.pcmd('[001]  开始游戏', 1)
game.pl()
game.pcmd('[002]  读取游戏', 2)

@game.set_deal_cmd_func_deco
def deal_func(order):
    if order==1:
        newgame_func()
    if order==2:
        lib.load_func(open_menu, main_func)

4. API 数据处理

数据处理是游戏的核心功能。这里没有过多的预置处理方式,仅提供一个统一的方便的方式进行数据的写入读取保存等。

读取数据

Game.data

注意,不用加(),这是一个变量。
具体的调用方式如下,所有在data文件下的json文件都会自动导入到game.data中。调用犯法为game.data[文件夹名][文件名][具体内容]

当然也随时可以向game.data存入数据。甚至可以保存实例。不过需要注意的是,由于采用pickle包来进行的存取的序列化,因此pickle不能够完全的支持所有的类,比如包含闭包的类或者嵌套的类。因此最好在game.data 只存入数据,而不是函数。

保存函数

def save(filename, data=None)

保存game.data 到特定文件中,这里也可以指定data。如果data参数指定的化,则将data变量保存到某个文件中去。

读取函数

def load(filename, selfdata=False)

读取filename保存的data到game.data.如果selfdata==True的化,则不保存到game.data,而是直接返回这个data给调用者。

5. API 控件部分

为了方便游戏作者快速自如的编写出自己想要的东西。pyera预置了一些常用的功能和页面,为快速开发提供额外的便利。这些控件都集中在script.base_lib中

save/load 页面

def load_func(return_func, next_func)

Return_func 为取消时退回的页面,next_func 为读取后进行的页面

def save_func(return_func)

Return_func为取消时进入的页面。

def yes_or_no()

输出一组是否,当玩家选择是则返回true,否则返回false

多值选择

def list_nums(num_list, set_func, current_value, first_cmd_num=None, split_mark=' / ')

当作者向提供给为玩家一个数值选择列表的时候,可以使用这个函数。当前数值会以金色标出来,选择任何一个数值就会设定新的数值。为了达到最佳效果,可以配合设置默认流程函数使用。

Num_list 为所有备选数值列表,set_func 是设置变量的函数
Current_value是当前值,first_cmd_num是各个命令的起始数值
Split_mark是分割个个数值的符号

数值条

def value_bar(vnow, vmax, length=30)

vnow/vmax 现在值比上最大值,length为总显示长度。返回一个由*和-组成的数值条

获得ID

def get_id()

获得一个唯一ID,每使用一次则id+1

6. API 事件部分

注意:如果可以不用事件功能完成特定功能,请不要用事件功能。事件功能非常灵活,但是也带来难以维护的额外复杂性。因此事件功能并不总是最佳选择。事件部分的文档会在事件系统进一步完善之后更新。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,646评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,979评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,391评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,356评论 0 215
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,740评论 3 293
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,836评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,022评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,764评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,487评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,728评论 2 252
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,200评论 1 263
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,548评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,217评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,134评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,921评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,919评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,766评论 2 274

推荐阅读更多精彩内容