Пример #1
0
def title():
    a.page()
    a.mode('grid', 1)
    a.h('主页面')
    a.t()
    a.b('新的旅程', a.goto, creat_new_game.select_succubus)
    a.t()
Пример #2
0
def save_game():
    a.page()
    a.h('保存游戏')
    a.t()
    print(a.data['db'])
    a.show_save_to_save()
    a.b('返回', a.back)
Пример #3
0
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)
Пример #4
0
 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)
Пример #5
0
 def page3():
     a.page({'background-color': '#636669'})  # 新建一个页面
     a.h('第三页(暨页面着色演示)')
     a.t()
     a.b('返回', a.back)
     a.b('上一页', change_page, page2)
     a.b('回到主界面', a.back, num=2)
Пример #6
0
 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)
Пример #7
0
def save_game():
    # 保存游戏界面
    a.page()
    a.h('保存游戏')
    a.t()
    a.show_save_to_save()  # 显示当前存档以供保存
    a.b('返回', a.back)
Пример #8
0
 def page3():
     a.page(color='#00f')  # 新建一个页面
     a.h('第三页(暨页面着色演示)')
     a.t()
     a.b('返回', a.back)
     a.b('上一页', change_page, page2)
     a.b('回到主界面', a.back, num=2)
Пример #9
0
 def page3():
     a.page()  # 新建一个页面
     a.h('第三页')
     a.t()
     a.b('返回', a.back)
     a.b('上一页', change_page, page2)
     a.b('回到主界面', a.back, num=2)
Пример #10
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)
Пример #11
0
def initiate():
    a.page()
    a.h('开始游戏')
    a.t()
    a.divider()
    a.b('开始新游戏', a.goto, g_story)
    a.b('读取存档', a.goto, g_load)
    a.b('透出游戏', a.exit)
Пример #12
0
 def page2():
     a.page(color='#0f0')  # 新建一个页面
     a.h('第二页(暨页面着色演示)')
     a.t()
     a.b('返回', a.back)
     a.b('上一页', change_page, page1)
     a.b('下一页', change_page, page3)
     a.b('回到主界面', a.back, num=2)
Пример #13
0
 def page2():
     a.page()  # 新建一个页面
     a.h('第二页')
     a.t()
     a.b('返回', a.back)
     a.b('上一页', change_page, page1)
     a.b('下一页', change_page, page3)
     a.b('回到主界面', a.back, num=2)
Пример #14
0
 def page2():
     a.page({'background-color': '#535659'})  # 新建一个页面
     a.h('第二页(暨页面着色演示)')
     a.t()
     a.b('返回', a.back)
     a.b('上一页', change_page, page1)
     a.b('下一页', change_page, page3)
     a.b('回到主界面', a.back, num=2)
Пример #15
0
 def page1():
     # 当一个子页面完全只属于一个父页面而不需要被其他页面调用时,
     # 可以将象征这个子页面的函数(如:page1)放在父函数(ui_gui_logic)内。
     a.page()  # 新建一个页面
     a.h('第一页')
     a.t()
     a.b('返回', a.back)
     a.b('下一页', change_page, page2)
     a.b('回到主界面', a.back, num=2)  # 向 back 传递参数 num,可以指定返回到第几个父节点。
Пример #16
0
 def page1():
     # 当一个子页面完全只属于一个父页面而不需要被其他页面调用时,
     # 可以将象征这个子页面的函数(如:page1)放在父函数(ui_gui_logic)内。
     a.page({'background-color': '#434648'})  # 新建一个红色页面
     a.h('第一页(暨页面着色演示)')
     a.t()
     a.b('返回', a.back)
     a.b('下一页', change_page, page2)
     a.b('回到主界面', a.back, num=2)  # 向 back 传递参数 num,可以指定返回到第几个父节点。
Пример #17
0
def cover():
    a.title('测试用狐狸程序 v{} with Era.js v{}'.format(version, a.version))
    a.page()
    a.h("测试用狐狸程序 v{}".format(version))
    a.t(" withEra.js v{}".format(a.version))
    a.t()
    a.divider()
    a.t()
    a.b('开始游戏', a.goto, t.initiate)
Пример #18
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)
Пример #19
0
def ui_title():
    era.page()
    era.h('eraEQC RE:dream v' + version)
    era.t('with Era.js v' + era.version)
    era.t()
    era.t()
    era.b('华灯初上', era.goto, ui_start_game, popup='开始游戏')
    era.t()
    era.t()
    era.b('晨光熹微', era.exit, popup='退出游戏')
Пример #20
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)
Пример #21
0
def ui_all_components():
    def button_result():
        a.page()
        a.h('作为一个按钮,我被按了。')
        a.t()
        a.b('返回', a.back)

    def rate_result(new_rate):
        print('当前评分为{}分。'.format(new_rate))

    def radio_result(new_ratio):
        print('现在选中了“{}”。'.format(new_ratio))

    def input_result(new_input):
        print('输入框中的值为:“{}”。'.format(new_input))

    a.page()  # 新建一个页面
    a.h('控件一览(包括作为标题的我自己)')
    a.t()
    a.t('【我是几个文字】')
    a.t('【我跟在左边文字后面】')
    a.t()  # 换行
    a.t('【我被换行了……】')
    a.t()  # 再换行
    a.t('【当你看见我时,你需要点鼠标左键或右键】', True)
    a.t()  # 再换行
    a.t('【当你看见我时,你还是需要点鼠标左键或右键】', True)
    a.t()  # 再换行
    a.b('我是一个红按钮', a.goto, button_result, color='red')
    a.b('我是一个不能按的红按钮', a.goto, button_result, color='red', disabled=True)
    a.b('快拿鼠标戳我!', a.goto, button_result, popup='被你戳到了,好爽~')
    a.t()
    a.divider()  # 我是一个分割线
    a.t()
    a.t('作为进度条,我当前值为50,总共100,在界面上显示为 200px 长:')
    a.progress(50, 100, 200)
    a.t()
    a.t('如果给这个游戏引擎评分,5分满分,我给4分:')
    a.rate(4, 5)
    a.t()
    a.t('我是一个可以点的评分哦~点击之后请在后端控制台查看效果~(对着当前评分再点击一次可以取消评分哦~(等价于评0分)):')
    a.rate(2, 5, rate_result, False)
    a.t()
    a.t('我是一个单选,目前默认选中第二项(索引为1)修改之后请在后端控制台查看效果:')
    a.radio(['一', '二', '三'], 1, radio_result)
    a.t()
    a.t('我是输入框,修改之后请在后端控制台查看效果:')
    a.input(input_result)
    a.t()
    a.t('以上,就是目前支持的全部控件及用法啦~')
    a.t()
    a.t('如果您需要新增,请跟作者联系哦~')
    a.t()
    a.b('返回', a.back)
Пример #22
0
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)
Пример #23
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)
Пример #24
0
def cover():
    # 这样,我们就有一个名为 cover 的函数了,刚才也说了,我们通过函数来搭载界面,于是我们接下来准备显示该界面的标题:
    a.title('Erajs-Tutorial v{} with Era.js v{}'.format(version, a.version))
    # 上面调用了 API 中的 title 函数,其作用是更改前端窗口的标题文字,至于为什么放在 cover 函数里呢?
    # 其实只要 init 了之后,放在哪里都可以。放在这里只是防止可能会有其它的一些会导致标题修改的界面出现。

    # 一般来说,上文中的 title 函数只需要调用一次就可以了,更普遍的情况是,代表界面的函数的第一行,就是调用下列函数:
    a.page()
    # 这是 API 中的 page 函数。其作用是新建一个空页,以后新建的所有显示元素都将在此空页中摆放。直到另一个新页面生成。

    # 接下来就是显示页面标题:
    a.h('Erajs-Tutorial v{}'.format(version))
    # 上面调用了 API 中的 h(head) 函数,是用来显示页面标题的(其实就是字号比较大的文字啦!),其用法为:
    # a.h(text)

    a.t()  # 适当的换行会让您的界面更加美观

    # 再接下来就是显示一行普通文本:
    a.t('with Era.js v{} aka{}'.format(a.version, a.aka))
    # 这是 API 中的 t(text) 函数。是用来显示普通文本的,其用法为:
    # a.t(text='', wait=False)
    # 当 text=='' 时,换行;
    # 当 wait==True 时,进入等待模式,文字会显示到这里就不再触发下一个语句,
    # 直到玩家点击鼠标左键(下一句)或是点击鼠标右键(略过全部)

    # 显示完标题之后,我们不希望将后续内容继续放在标题后边,于是选择换行:
    a.t()
    # 换两行也是可以的:
    a.t()

    # 接下来,我们希望显示一些按钮,来将玩家引向其他界面:
    # 再调用之前,我们先来看一下按钮函数是怎么使用的:
    # a.b(text, func, *arg, **kw)
    # 其中,text 就是你想显示在按钮上面的文字啦
    # func 就是该按钮在点击时会触发的函数
    # 还有几个隐藏的参数:
    # disabled 当该参数为真时,按钮变为不可用的状态
    # popup 鼠标指针移动到按钮上面时,将会弹出的文字
    # color 按钮颜色,值只能为:red,orange,yellow,olive,green,teal,blue,violet,purple,pink,brown,grey,black。
    a.b('页面逻辑教程', a.goto, ui_gui_logic)
    # 上面这个按钮函数,我们调用了 API 中的 goto 函数,并且将一个新页面的函数作为参数传给了它,
    # 这意味着当玩家点击这个按钮时,a.goto(ui_gui_logic) 语句将会被执行。
    a.t()  # 换行(换行不只是可以给文字用哦!按钮、评级、进度条等等都可以用的哦!)
    a.b('控件使用教程', a.goto, ui_all_components)
    a.t()  # 换行
    a.b('网格排版教程', a.goto, ui_grid)
    a.t()  # 换行
    a.b('游戏数据教程', a.goto, ui_data)
    a.t()  # 换行
    a.b('引擎模块/游戏脚本(Scripts)/DLC/MOD 教程', a.goto, ui_script)
    a.t()  # 换行
    a.b('退出引擎示例程序', a.exit)  # 正确的退出程序的方式
Пример #25
0
def ui_start_new_game():
    def set_new_game_difficulty(num: int):
        # setup.game_difficulty(num)
        era.goto(ui_start_new_game_set)

    era.page()
    era.h('不同于往前的梦境')
    era.t()
    era.t('会是些什么呢?')
    era.t()
    era.b(
        '桃红色的春梦',
        set_new_game_difficulty,
        1,
        popup='简单地开始游戏',
        color='pink',
    )
    era.t()
    era.b(
        '雪青色的寤梦',
        set_new_game_difficulty,
        2,
        popup='普通的游戏体验',
        color='violet',
        disabled=True,
    )
    era.t()
    era.b(
        '刈安色的迷梦',
        set_new_game_difficulty,
        3,
        popup='也许会有些困难',
        color='yellow',
        disabled=True,
    )
    era.t()
    era.b(
        '月白色的狂梦',
        set_new_game_difficulty,
        4,
        popup='极具挑战的模式',
        disabled=True,
    )
    era.t()
    era.b(
        '苍蓝的捕梦网',
        era.back,
        popup='什么都没有记得',
        color='blue',
    )
Пример #26
0
def ui_start_game():
    era.page()
    era.h('夜幕降临')
    era.t()
    era.t('有些倦意了呢')
    era.t()
    era.t('今天会梦见些什么呢?')
    era.t()
    era.t()
    era.b('一枕槐安', era.goto, ui_start_new_game, popup='不同于往前的梦')
    era.t()
    era.b('前尘旧梦', era.goto, ui_start_old_game, popup='以往梦境的延续')
    era.t()
    era.b('事了无痕', era.back, popup='什么都没有记住')
Пример #27
0
def g_main():
    a.page()
    a.h('主菜单')
    a.data['db']['pos'] = '嗨森林'
    a.shake(100)
    a.t()
    a.t('当前位置 {}'.format(a.data['db']['pos']))
    a.t()
    a.t('现在主菜单里什么都没有,你只能:')
    a.b('保存游戏', a.goto, g_save)
    a.t('或者')
    a.b('读取游戏', a.goto, g_load)
    a.divider()
    a.t()
    a.t('也可以干脆的')
    a.b('透出游戏', a.exit)
Пример #28
0
def shop():
    def buy(item):
        if a.data['db']['player']['money'] >= item['cost']:
            a.data['db']['player']['item'].append(item)
        a.page()
        a.t('你购买了{}。'.format(item['name']), True)
        a.repeat()

    a.page()
    a.h('商店')
    a.t()
    items = a.data['data.item']['物品']
    for each in items:
        a.b('{} - {}'.format(each['name'], each['cost']), buy, each)
    a.t()
    a.b('返回', a.back)
Пример #29
0
def ui_data():
    def change_rate(new_rate):
        a.data['db']['rate'] = new_rate

    a.page()  # 新建一个页面
    a.h('游戏数据教程')
    a.t()
    a.t('游戏的静态数据都保存在【data/】目录中,只要放进去了,且格式匹配,就可以在游戏开始后直接调用。如:')
    a.t(a.data['data.姓名库']['外文']['男名'][0])
    a.t('←这里请翻阅代码')
    a.t()
    a.t('支持的格式为json,csv,ini,inf,cfg,config等。而且在加载的时候后都已经被自动转换为了Dict等方便的格式。')
    a.t()
    a.t('【a.data是游戏引擎的数据核心,类型为Dict。里面定义的变量都可以被全局调用,但不会被保存】')
    a.t()
    a.divider()
    a.t()
    a.t('【接下来介绍几个特殊的Key】')
    a.t()
    a.t('【a.data["data.*"]】存放着【data/】目录下所有的静态数据;')
    a.t()
    a.t('【a.data["config.*"]】存放着【config/】目录下所有的设置;')
    a.t()
    a.t('【以上两种KEY使用点语法来对具体文件进行调用,如【data/姓名库.json】文件中的内容保存在【a.data["data.姓名库"]】中'
        )
    a.t()
    a.divider()
    a.t()
    a.t('【a.data["db"]】中存放着可以被保存和读取的数据。(其他KEY中的数据都不会被保存)')
    a.t()
    a.t('演示(请修改,保存,再修改,加载。看数值是否被保存了。):')
    a.rate(a.data['db']['rate'], 5, change_rate, False)
    a.t()
    a.divider()
    a.t()
    a.t('【a.data["class"]】保存着各种Class,属于预留。大家暂时可以忽略。')
    a.t()
    a.t('【a.data["api"]】保存着各种API,大家可以在这里加入自定义的API,然后进行全局调用(一般用于引擎插件/Script/DLC/Mod中)。'
        )
    a.t()
    a.t('【entity】保存着各种Class的实例,属于预留。大家暂时可以忽略。')
    a.t()
    a.divider()
    a.t()
    a.b('保存', a.goto, save_game)
    a.b('加载', a.goto, load_game)
    a.b('返回', a.back)
Пример #30
0
 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)