def select_ban():
    #选择禁用
    a.page()
    a.mode()
    a.t('敬请期待')
    a.t()
    a.b('困顿', a.goto, select_difficulty)
示例#2
0
def status_bar():
    data = a.tmp()
    succubus = data['succubus']
    a.divider()
    #状态栏
    a.mode('grid', 4)
    a.t('第{}天'.format(a.tmp()['day']))
    a.t('{}'.format(a.tmp()['day_time']), style={'color': '#ff0'})
    a.t()
    a.t('{}'.format(a.tmp()['succubus'].name))
    a.t()
    a.t('{}G'.format(a.tmp()['money']))
    a.t()
    a.t('{}ml'.format(a.tmp()['s***n']))
    a.t()

    a.t('level:{}'.format(succubus.level))
    a.t()
    a.t('生命')
    a.progress(succubus.health, succubus.max_health,
               [{
                   'width': '100px'
               }, {
                   'background-color': '#0f0'
               }])
    a.t('{}/{}'.format(succubus.health, succubus.max_health))
    a.t()
    a.t('俘虏:{}'.format(len(data['prisoner_list'])))
    a.t()
    a.t('succubus:{}'.format(len(data['family_list'])))
示例#3
0
def think():
    a.page()
    a.t('你稍加思索,很快便得出了结论。', True)
    a.t()
    a.t('那椅子上的活物,没有错的话,', True)
    a.t()
    a.t('应该是一位熟睡的')
    a.t('少女', style={'color': 'red'})
    a.t('。', True)
    a.t()
    a.t('因为你触碰到了她的身体,闻到了少女特有的香气。', True)
    a.t()
    a.t('你继续进行着调查,发现自己的推论完全正确。', True)
    a.t()
    a.t('甚至还有更加惊人的发现……', True)
    a.t()
    a.t('这个少女是被绑在了椅子上!', True)
    a.t()
    a.t('而且她的神智似乎也要渐渐恢复了。', True)
    a.t()
    a.t('这时候,你选择……', True)
    a.t()
    a.page()
    a.mode('grid', 1)
    a.t()
    a.t()
    a.t('未完待续……')
    a.t()
    a.t()
    a.b('打群主!', a.goto, bit)
示例#4
0
def title():
    a.page()
    a.mode('grid', 1)
    a.h('主页面')
    a.t()
    a.b('新的旅程', a.goto, creat_new_game.select_succubus)
    a.t()
def select_inherit():
    #选择继承
    a.page()
    a.mode()
    a.t('敬请期待')
    a.t()
    a.b('绝缘', a.goto, select_ban)
def select_location():
    #选择出生地
    def change_location(selection):
        # description = a.dat()['location'][location['value']]['description']
        # a.t(description)
        a.tmp()['location_mode'] = selection['index']
        a.repeat()
        pass

    a.page()
    a.mode('grid', 1)
    a.t('何处?')
    a.divider()
    a.mode()
    a.t()
    a.t()
    a.radio(['平原'], change_location, a.tmp()['location_mode'])
    a.t()
    description = a.dat()['location'][a.tmp()['location_mode']]['description']
    a.t(description)
    a.t()
    a.divider()
    a.b('下一步', a.goto, select_inherit)
    a.t()
    a.b('何人?', a.back)
示例#7
0
def bit():
    a.page()
    a.mode('grid', 1)
    a.t()
    a.t()
    a.t('群主:“哎呀哎呀别打啦!”')
    a.t()
    a.t()
    a.b('好吧,饶你一命', a.goto, goon)
示例#8
0
def sys_buttons():
    a.divider()
    a.mode('grid', 4)
    a.b('存档', a.goto, save_button)
    a.t()
    a.b('读档', a.goto, load_button)
    a.t()
    a.b('设置', a.goto, settings)
    a.t()
    a.b('放弃', a.goto, giveup)
示例#9
0
def ui_code():
    a.page()
    a.mode('grid', 1)
    a.h('代码组织教程')
    a.t()
    a.t()
    a.t('和以前是一样的嘛!')
    a.t()
    a.t()
    a.b('也就是说还没写咯?', a.back)
示例#10
0
def ui_mod():
    def rest():
        a.msg('我会很快搞定的,等我!')
        a.back()
    a.page()
    a.mode('grid', 1)
    a.h('我还没想好怎么写教程……')
    a.t()
    a.t()
    a.b('我先暂时不用吧', rest)
示例#11
0
def fate_map():
    #每日走向选择展示
    a.divider(text='前路')
    a.mode('grid', 10)
    random_create()
    for i in range(1, 20 + 1):
        for j in range(0, 10):
            card = fate_card(a.tmp()['fate_map'][21 - i][j])
            card.print_card(is_able=True)
            #a.t(a.tmp()['fate_map'][i][j]) 测试用
            a.t()
示例#12
0
def main():
    time.sleep(1)
    a.init()
    a.mode('grid', 1)
    a.h('Succubus Dungeon')
    a.t()
    a.t()
    a.t('version {}'.format(version))
    a.t()
    a.b('♥', a.goto, title)
    a.t()
    a.b('测试用', a.goto, test)
示例#13
0
文件: Example.py 项目: syonkr/Era.js
 def ui_egg():
     """
     作者:@Miswanting
     """
     a.clear()
     for pic in a.data['data.ba']:
         a.page()
         a.mode('grid', 1, compact=True)
         for line in pic:
             a.t(line)
             a.t()
         time.sleep(0.1)
         a.clear()
     ui_grid_2()
示例#14
0
def show_main():
    #此处为测试用界面0.1
    data = a.tmp()
    succubus = data['succubus']
    a.page()
    a.mode()
    a.t('此处为主界面')

    status_bar()  #状态栏

    #考虑放置每日三选一计划或者是地宫结构图?
    fate_map()

    #考虑放置一些检查选项,如检查设施情况,查看配方,已经拥有的遗物,查看地宫结构等。
    check_buttons()

    #考虑放置系统相关,如设置,存读档案,回到标题,放弃等
    sys_buttons()
示例#15
0
 def ui_line_mode():  # 默认模式(左对齐)
     a.page()
     a.mode()
     a.h('一、默认排版(左对齐)')
     a.t()
     a.t('由a.mode()切换排版模式。当前是默认排版,所有控件从左往右排列,使用a.t()进行换行。')
     a.divider()
     a.t('【普通文字】')
     a.t('【未换行】')
     a.t()
     a.t('【已换行】')
     a.t()
     a.t()
     a.divider()
     a.b('下一页', ui_grid_mode)
     a.t()
     a.t()
     a.b('返回', a.back)
示例#16
0
def cover():
    a.title('EraDemo')
    a.dat()['123'] = 1
    print(a.dat())
    a.page()
    a.mode('grid', 1)
    a.h('EraDemo')
    a.t()
    a.t()
    a.b('新的游戏', a.goto, new_game)
    a.t()
    a.t()
    a.b('继续游戏')
    a.t()
    a.t()
    a.b('游戏设置')
    a.t()
    a.t()
    a.b('退出游戏')
示例#17
0
def check_buttons():
    #考虑放置一些检查选项,如检查设施情况,查看配方,已经拥有的遗物,查看地宫结构等。
    a.divider(text='查看')
    a.mode('grid', 5)
    a.b('拥有怪物', a.goto, check_monster)
    a.t()
    a.b('地宫设施', a.goto, check_facility)
    a.t()
    a.b('俘虏', a.goto, check_prisoner)
    a.t()
    a.b('眷族', a.goto, check_family)
    a.t()
    a.b('配方', a.goto, check_formula)
    a.t()
    a.b('遗物', a.goto, check_reliquary)
    a.t()
    a.b('杂项', a.goto, check_information)
    a.t()
    a.b('图鉴', a.goto, check_Illustrated)
def select_succubus(number=0):
    #选择起源模板
    def goto_select_location(number):
        a.tmp()['succubus'] = succubus(number)
        a.tmp()['succubus_mode'] = number
        a.tmp()['location_mode'] = 0
        a.goto(select_location)

    a.page()
    a.mode('grid', 1)
    a.h('起源')
    a.t()
    a.divider()

    a.mode('grid', 3)
    a.b('<--', change_number, -1)
    a.t()
    a.t('何人?')
    a.t()
    a.b('-->', change_number, 1)
    a.divider()

    a.mode('grid', 3)
    selected_mode = succubus()
    a.t()
    a.h(selected_mode.name, style={'opacity': '0.6'})
    a.t()
    a.t()
    a.t('生命:{}'.format(selected_mode.health))
    a.t()
    a.t('攻击:{}'.format(selected_mode.atk))
    a.t()
    a.t('防御:{}'.format(selected_mode.dEf))

    for i in range(3):
        a.t()

    a.t()
    a.t()
    a.t(selected_mode.description, style={'font-style': 'italic'})
    a.t()

    for i in range(3):
        a.t()

    a.t()
    a.t()
    a.b('何处?', goto_select_location, number)
    a.t()

    a.divider()
    a.mode()
    a.b('沉睡', a.back)
示例#19
0
def test(number=1):
    a.page()
    a.mode()
    x = succubus()
    a.t(x.name)
    a.t()
    a.mode('grid', 1)
    for i in range(0, 10):
        a.t('┏')
        for j in range(0, len('┃ ☢ ┃')):
            a.t('━')
        a.t('┓')
        a.t()
        a.t('┃[☢]┃')
        a.t()
        a.t('┗')
        for j in range(0, len('┃ ☢ ┃')):
            a.t('━')
        a.t('┛')
        a.t()
示例#20
0
 def ui_grid_mode():  # 网格模式(三列)
     a.page()
     a.h('二、网格模式(三列)')
     a.t()
     a.t('由a.mode("grid", 3)切换到3列的网格模式,单元格内不支持换行,换行a.t()在这里代表的是换下一单元格。')
     a.divider()
     a.mode('grid', 3)
     a.t('【文字】')
     a.t('【同单元格的文字】')
     a.t()
     a.t('【下一单元格的文字】')
     a.t()
     a.t('【摩多摩多】')
     a.t()
     a.t('【摩多摩多】')
     a.t()
     a.divider()
     a.mode()
     a.b('下一页', ui_center_mode)
     a.t()
     a.b('返回', a.back)
def select_difficulty():
    def goto_difficulty(difficulty):
        a.clear()
        #初始化新游戏,考虑之后用一个函数代替,此处先作测试用途
        a.tmp()['day'] = 1
        a.tmp()['money'] = 0
        a.tmp()['s***n'] = 0
        a.tmp()['day_time'] = '日间'
        a.tmp()['prisoner_list'] = []
        a.tmp()['family_list'] = []
        a.tmp()['difficulty'] = difficulty
        show_main()

    #选择难度
    a.page()
    a.mode('grid', 1)
    a.h('前往哪一个世界?')
    a.divider()

    a.mode()
    #此处放置难度世界列表
    a.b('普通', goto_difficulty, 1)
    a.divider()
    a.mode('line', 1)
    a.b('返回', a.back)
示例#22
0
def action(type):
    a.page()
    if type == 'polite':
        a.t('你轻声说:“你好,请不要紧张,我不会伤害你的。”', True)
        a.t()
        a.t('少女疑惑地睁大了双眼:“你有病吧?快来干我!”', True)
        a.t()
        a.t('你:“???(黑人问号)”', True)
        a.page()
        a.mode('grid', 1)
        a.t()
        a.t()
        a.h('你死了')
        a.t()
        a.t()
        a.t('获得成就:《???》')
        a.t()
        a.t()
        a.b('重新开始', a.back, 5)
    elif type == 'direct':
        a.t('你说:“嘘……', True)
        a.t('想活命的话就别出声,', True)
        a.t('明白吗?”', True)
        a.t()
        a.t('少女迷茫地看着你,似乎', True)
    elif type == 'rude':
        a.t('你一个箭步冲上去,用手捂住她的嘴,在她还没反应过来之前就完全控制住了她。”', True)
        a.t()
        a.t('迷の少女:')
        a.t('“唔!”', True, style={'shake_duration': 3})
        a.t()
        a.t('少女惊恐地睁大了双眼,不停地挣扎着,但身体被绑得结结实实,只能在原地不停的扭动。', True)
        a.t()
        a.t('纤细的腰肢在尽力地挣扎,但似乎收效不大。', True)
        a.t()
        a.t('你仅仅是堵住了她的嘴。', True)
        a.t()
        a.t('然后你就被扶她透了。被一群', True)
示例#23
0
 def ui_grid_1():
     """
     作者: @m.l
     (有改动)
     """
     # ---------默认排版模式
     a.page()
     # 新页面
     a.mode()
     # 默认排版模式。
     a.h('一、默认排版', rank=4)
     a.t()
     a.t('由a.mode()切换排版模式。当前是默认排版,所有控件从左往右排列,使用a.t()进行换行。')
     a.t()
     a.b('按钮1')
     a.b('按钮2')
     a.t()
     a.b('按钮3')
     a.t()
     a.divider()
     a.b('下一页', ui_grid_2)
     a.t()
     a.b('返回', a.back)
示例#24
0
 def ui_center_mode():  # 网格模式的特殊用法(单列居中)
     a.page()
     a.h('三、网格模式的特殊用法(单列居中)')
     a.t()
     a.t('由a.mode()切换排版模式。当前是默认排版,所有控件从左往右排列,使用a.t()进行换行。')
     a.divider()
     a.mode('grid', 1)
     graph = [
         '墙墙窗窗墙墙窗窗墙墙',
         '墙        门',
         '墙        墙',
         '墙汉汉汉汉    墙',
         '墙   汉    墙',
         '墙皂我 汉    墙',
         '墙   汉    门',
         '墙墙墙墙墙墙墙墙墙墙',
     ]
     for line in graph:
         a.t(line)
         a.t()
     a.t()
     a.divider()
     a.mode()
     a.b('返回', a.back)
示例#25
0
 def ui_grid_2():
     """
     作者: @m.l
     (有改动)
     """
     a.page()
     # 新页面
     a.h('二、网格排版【居中】', rank=4)
     a.mode('grid', 1)
     # 网格排版,示例一:居中控件
     apple = [
         '墙墙窗窗墙墙窗窗墙墙',
         '墙        门',
         '墙        墙',
         '墙汉汉汉汉    墙',
         '墙   汉    墙',
         '墙皂我 汉    墙',
         '墙   汉    门',
         '墙墙墙墙墙墙墙墙墙墙',
     ]
     a.t('该段文字居中,由a.mode("grid",1)切换为网格排版,参数‘1’为每一行所含的最大【控件集合】数')
     a.t()
     a.t('网格排版,在使用紧凑样式时,行间距离会比默认排版时更加紧密,因此你可以实现一些不可描述的场面')
     a.t()
     a.t('紧凑网格排版如下▼')
     a.t()
     a.mode('grid', 1, compact=True)
     for n in range(0, len(apple)):
         a.t(apple[n])
         a.t()
     a.mode()
     # 建议在使用完网格排版后,运行该代码,把排版模式切换回默认模式。
     a.t()
     a.divider()
     # 使用网格后,分割线的使用代码。
     a.b('上一页', ui_grid_1)
     a.b('下一页', ui_grid_3)
     a.t()
     a.b('返回', a.back)
     a.b('彩蛋', ui_egg)
示例#26
0
    def ui_grid_3():
        """
        作者: @m.l
        (有改动)
        """
        a.page()
        a.h('三、网格排版【网格】', rank=4)
        a.t()
        a.t('【默认样式】')
        # ---------网格排版模式
        a.mode('grid', 3)
        # 网格排列,一行3列
        a.b('按钮1')
        a.b('按钮2')
        a.t()
        a.b('按钮3')
        a.t()
        a.b('按钮4')
        a.t()
        a.b('按钮5')
        a.t()
        a.b('按钮6')

        a.mode()
        a.t()
        a.t('【线框样式】')
        a.mode('grid', 3, celled=True)
        # celled,带
        a.b('按钮1')
        a.b('按钮2')
        a.t()
        a.b('按钮3')
        a.t()
        a.b('按钮4')
        a.t()
        a.b('按钮5')
        a.t()
        a.b('按钮6')

        a.mode()
        a.t()
        a.t('【紧凑样式】')
        a.mode('grid', 3, compact=True, celled=True)
        a.b('按钮1')
        a.b('按钮2')
        a.t()
        a.b('按钮3')
        a.t()
        a.b('按钮4')
        a.t()
        a.b('按钮5')
        a.t()
        a.b('按钮6')
        a.mode()
        a.t()
        a.divider()
        a.b('上一页', ui_grid_2)
        a.t()
        a.b('返回', a.back)
示例#27
0
def ui_widgets():
    def button_result():
        a.msg('按钮已按下')

    def rate_result(new_rate):
        a.msg('您的评分为{}分。'.format(new_rate))

    def radio_result(new_ratio):
        a.msg('现在选中的是第{}位的“{}”。'.format(
            new_ratio['index'], new_ratio['value']
        ))

    def check_result(new_check):
        a.msg('现在复选框的值为:{}'.format(new_check))

    def input_result(new_input):
        a.msg('输入框中的文本为:{}'.format(new_input))

    def dropdown_result(new_dropdown):
        a.msg('下拉菜单中的值为第{}位的“{}”。'.format(
            new_dropdown['index'], new_dropdown['value']
        ))
    a.page()
    a.h('控件一览', 1, {'color': '#eee'})
    a.mode('line')
    a.t('【我是几个文字】')
    a.t('【我跟在左边文字后面】')
    a.t()  # 换行
    a.t('【我被换行了……】')
    a.t('而我有色彩', style={'color': '#f00', 'background-color': '#0f0'})
    a.t()  # 再换行
    a.t('【当你看见我时,你需要点鼠标左键或右键】', True)
    a.t()  # 再换行
    a.t('【当你看见我时,你还是需要点鼠标左键或右键】', True)
    a.t()  # 再换行
    a.b('我是一个红按钮',  button_result, style={'background-color': '#f00'})
    a.b('我是一个不能按的按钮', button_result,  disabled=True)
    a.b('快拿鼠标指着我!', button_result, popup='被你戳到了,好爽~')
    a.divider('我是显而易见的分割线')
    a.t('作为进度条,我当前值为50,总共100,在界面上显示为 100px 长:')
    a.progress(50, 100, [{'width': '100px'}, {}])
    a.t()
    a.t('如果给这个游戏引擎评分,5分满分,我目前给4分:')
    a.rate(4, 5)
    a.t()
    a.t('我是一个可以点的评分哦~点击之后请在后端控制台查看效果~(对着当前评分再点击一次可以取消评分哦~(等价于评0分)):')
    a.rate(2, 5, rate_result)
    a.t()
    a.t('我是一个单选,目前默认选中第二项(索引为1)修改之后请在后端控制台查看效果:')
    a.radio(['一', '二', '三'], radio_result, 1)
    a.t()
    a.t('我是一个复选框,目前默认已选中,修改之后请在后端控制台查看效果:')
    a.check('我是一个复选框哦!', check_result, True)
    a.t()
    a.t('我是输入框,修改之后请在后端控制台查看效果:')
    a.input(input_result, '我是默认值哦~')
    a.t()
    a.t('多行文本输入框:TODO')
    a.t()
    a.t('我是一个下拉菜单哦!(下拉选择项目并在后端查看效果):')
    a.dropdown(['甲', '乙', '丙'], dropdown_result, 1)
    a.t()
    a.t('多选下拉菜单:TODO')
    a.t()
    a.t('以上,就是目前支持的全部控件及用法啦~')
    a.t()
    a.t('如果您需要新增,请跟作者联系哦~')
    a.t()
    a.b('返回', a.back)
示例#28
0
def cover():
    # 函数的定义十分简单,一目了然,我就不赘述了。丢一个参考链接吧:
    # 参见:[定义函数](https://docs.python.org/zh-cn/3/tutorial/controlflow.html#defining-functions)
    # 函数定义好后,就能够被引用了!下面我们来往里面填充内容吧!
    a.title('Dev Guide with Era.js v{}'.format(a.version))
    # 首先,这是名为title的API,它的作用也特别直白:设置游戏窗口标题。
    # 标题就是括号里面的内容,但为什么会使用format函数呢?是因为我们要往字符串中塞入一个代表版本的变量。
    # 参见:[字符串函数](https://docs.python.org/zh-cn/3/library/stdtypes.html#str.format)
    # 参见:[格式字符串语法](https://docs.python.org/zh-cn/3/library/string.html#formatstrings)
    # 现在,我们新建一个页面,将原来的单按钮顶下去!
    a.page()
    # 这是名为page的API,作用是新建一个页面,之后的所有控件都在新的页面中生成。
    # 引擎只会显示最新的一个页面,旧的页面会被模糊掉,但不会模糊得十分彻底,而是能够让人勉强看清,以免玩家错过关键信息。
    # 接下来就轮到调整页面版式了!
    # 在默认情况下,页面中的内容都是左对齐的,但这种排布方式不一定都美观,因此我们在这里改变一个排版方式:
    a.mode('grid', 1)
    # 这是名为mode的API负责改变页面排版方式。
    # 在这里,我们将排版方式改为了“grid”(网格),并且给了他一个参数“1”。
    # 则代表我们将排版模式变成了一个一列网格。
    # 而且网格有一个比较重要的特点,就是在网格中的对齐方式都是居中对齐
    # 这样,我们通过生成一个一列网格来实现了每行居中的功能。
    # 现在,让我们往网格里面装东西吧!
    a.t()
    # 噫?这是装了个什么东西?
    # 这就是传说中的最常用、最有用、最好用的控件——文本控件!
    # 而如果我们不往里面装文本的话(比如现在这个),会发生什么?
    # 答案是换行(换档)!
    # 什么意思呢?比如如果我们的排版模式是`line`,那么执行这个语句,就相当于回车键,
    # 后续的内容都会在下一行进行显示。
    # 而如果我们的排版模式是`grid`,这里我们以三列网格为例,执行这个语句,我们的光标就会从第一行第一个单元格,跳转到第二个单元格。
    # 而如果我们的光标本来就在第一行的第三个单元格,那么执行之后就会跳转到第二行的第一个单元格。
    # 而在这里,我们在一列网格中使用,作用就是从第一行第一个单元格,跳转到第二行第一个单元格,也就意味着换了一行而已。
    # 都是为了美观呀!美观!
    # 好了,终于可以开始装东西了,来!
    a.h('Era.js 开发向导')
    # 这是标题,用法很简单就不赘述了,我们换行
    a.t()
    # 再显示一行文字。
    a.t('Version: {}'.format(a.version))
    # 这里语法与title一样,都是进行了字符串格式化。没有什么特别值得说的东西。
    # 接下来,我们进行几次换行
    for _ in range(4):
        a.t()
    # 一行行换行毕竟太麻烦,这里我们使用循环进行5次换行。再生成控件的话,就会在比较靠下的地方了。
    a.b('  页面逻辑教程  ', a.goto, ui_logic)
    a.t()
    a.t()
    a.b('   控件教程   ', a.goto, ui_widgets)
    a.t()
    a.t()
    a.b('   排版教程   ', a.goto, ui_compose)
    a.t()
    a.t()
    a.b('  数据管理教程  ', a.goto, ui_data)
    a.t()
    a.t()
    a.b('  代码组织教程  ', a.goto, ui_code)
    a.t()
    a.t()
    a.b('   模组教程   ', a.goto, ui_mod)
    a.t()
    a.t()
    a.b('   退出教程   ',  a.msg, '右上角嘛~   真是的!')
    a.t()
示例#29
0
def ui_data():
    def ui_support_file_format():
        a.page()
        a.h('支持的数据文件格式列表')
        a.t()
        a.t()
        a.t('配置文件:*.inf, *.ini, *.cfg, *.config')
        a.t()
        a.t('配置文件的基本格式均为【变量名】=【数据】的格式,适用于存储简单的、易于玩家修改的配置数据。')
        a.t()
        a.t('表格文件:*.csv')
        a.t()
        a.t('CSV文件可以被常见的表格程序打开,但其本身不支持任何排版,若需要储存大量二维数据可以考虑这个方法。十分利于开发者进行编辑修改。')
        a.t()
        a.t('JSON文件:*.json')
        a.t()
        a.t('JSON文件易于储存结构化的数据,系统读写速度非常快,但面向开发者的可读性要稍差一点。')
        a.t()
        a.t('YAML文件:*.yaml, *.yml')
        a.t()
        a.t('YAML文件和JSON文件类似,适用于储存、输入结构化的数据,系统读写速度没有JSON快,但面向开发者的可读性特别高,推荐使用。')
        a.t()
        a.t('ZIP文件:*.zip')
        a.t()
        a.t('ZIP文件是常见的容器文件,里面的文件格式均为JSON,能够整合多个数据文件,方便与其他玩家共享数据时使用。')
        a.t()
        a.t('文本文件:*.txt')
        a.t()
        a.t('最常见的文本文件,读取之后的数据结构为列表,每一行就是列表中的一项,用法全看开发者如何打算。')
        a.t()
        a.t('存档文件:*.save, *.sav')
        a.t()
        a.t('Era.js游戏引擎特有的存档文件,没有什么特别的东西需要介绍的。')
        a.t()
        a.t()
        a.b('返回', a.back)

    def ui_call_data():
        a.page()
        a.h('数据调用')
        a.t()
        a.t()
        a.h('调用配置文件', 3)
        a.t()
        a.t('配置文件放在【config/】文件夹中,通过a.cfg()函数进行调用。')
        a.t()
        a.t()
        a.h('调用静态数据文件', 3)
        a.t()
        a.t('数据文件放在【data/】文件夹中,通过a.dat()函数进行调用。')
        a.t()
        a.t()
        a.h('调用可存档数据', 3)
        a.t()
        a.t('可存档数据是指通过a.sav()函数进行增删查改的数据,而“存档文件”可以理解为“可存档数据”的一个“快照”。当我们进行“保存游戏”的操作时,游戏引擎会将“可存档数据”进行全拷贝并自动生成“存档文件”存放在【save/】文件夹中,而当我们读取存档时,游戏引擎读取“存档文件”中的数据并对“可存档数据”进行完全覆盖。')
        a.t()
        a.t('出于非技术原因,我们约定,可存档数据中的数据不包括Python的对象(如函数、类等)。',
            style={'color': 'white'})
        a.t()
        a.t()
        a.h('调用临时数据', 3)
        a.t()
        a.t('“临时数据”是指游戏运行时生成、供全局调用、但无需保存进存档文件的数据。可通过a.tmp()函数进行调用。当全局数据不知道放哪儿时,放这里准没错。')
        a.t()
        a.t()
        a.b('返回', a.back)

    def ui_save_data():
        a.page()
        a.h('存档数据管理')
        a.t()
        a.t()
        a.h('保存存档', 3)
        a.t()
        a.t('使用a.save()函数可以直接保存存档,详情请参见API。')
        a.t()
        a.t()
        a.h('加载存档', 3)
        a.t()
        a.t('使用a.load()函数可以直接加载存档,详情请参见API。')
        a.t()
        a.t()
        a.h('保存存档预设控件', 3)
        a.t()
        a.t('引擎提供了一个预设控件函数a.widget_save(),让你可以生成一个块级控件')
        a.t()
        a.t()
        a.h('加载存档预设控件', 3)
        a.t()
        a.t('a.widget_load()')
        a.t()
        a.t()
        a.h('保存存档预设界面', 3)
        a.t()
        a.t('a.ui_save()')
        a.t()
        a.t()
        a.h('加载存档预设界面', 3)
        a.t()
        a.t('a.ui_load()')
        a.t()
        a.t()
        a.b('返回', a.back)

    def ui_api_tips():
        a.page()
        a.h('API使用注意事项')
        a.t()
        a.t()
        a.t('在设置文件根节点时我们可能遇到这个问题:')
        a.t()
        a.t('a.dat("test.list")=[1,2,3]')
        a.t()
        a.t('会报错,原因是python会将等号左侧识别为一个函数,而不会将他识别为一个函数的返回值。')
        a.t()
        a.t('我们可以用下列代码来代替:')
        a.t()
        a.t('a.dat()["test.list"]=[1,2,3]')
        a.t()
        a.t()
        a.b('返回', a.back)
    a.page()
    a.mode()
    a.h('数据管理教程')
    a.t()
    a.t()
    a.t('在v0.2中,数据系统与v0.1相比,有了较大改变,我们来逐项说明。')
    a.t()
    a.t('引擎支持的数据文件格式参见:')
    a.b('格式列表', a.goto, ui_support_file_format)
    a.t()
    a.t('调用文件的API进行了变更,参见:')
    a.b('数据调用', a.goto, ui_call_data)
    a.t()
    a.t('新版引擎对存档的支持进行了增强,参见:')
    a.b('存档数据管理', a.goto, ui_save_data)
    a.t()
    a.t('新的API在使用时有一些需要注意的地方,参见:')
    a.b('API使用注意事项', a.goto, ui_api_tips)
    a.t()
    a.t()
    a.b('返回', a.back)