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)
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)
def select_ban(): #选择禁用 a.page() a.mode() a.t('敬请期待') a.t() a.b('困顿', a.goto, select_difficulty)
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 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_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)
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 save_game(): # 保存游戏界面 a.page() a.h('保存游戏') a.t() a.show_save_to_save() # 显示当前存档以供保存 a.b('返回', a.back)
def save_game(): a.page() a.h('保存游戏') a.t() print(a.data['db']) a.show_save_to_save() a.b('返回', a.back)
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)
def bit(): a.page() a.mode('grid', 1) a.t() a.t() a.t('群主:“哎呀哎呀别打啦!”') a.t() a.t() a.b('好吧,饶你一命', a.goto, goon)
def ui_start_new_game_set(): era.page() def start_new_game(): ui_make_chara('玩家') era.data['chara'] = CharacterAdmin() era.b('梦境的开端', era.goto, start_new_game, popup='进行玩家属性设置')
def ui_mod(): def rest(): a.msg('我会很快搞定的,等我!') a.back() a.page() a.mode('grid', 1) a.h('我还没想好怎么写教程……') a.t() a.t() a.b('我先暂时不用吧', rest)
def print_card(self, is_able=True): #根据输入的卡片类型打印相应卡片按钮 my_style = {'white-space': 'pre-wrap'} my_style.update(self.style) a.b(self.picture, a.goto, self.page, disabled=is_able, style=my_style, popup=self.name)
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)
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='退出游戏')
def ui_turn_focus(): def turn_prepare(): era.page() era.goto(ui_turn_focus) a = era.data era.clear_gui() era.data['environment_focus'].turn() era.b('下一回合', era.goto, turn_prepare) era.b('结束', era.goto, ui_main)
def ui_start_old_game(): era.page() era.show_save_to_load(ui_main) era.t() era.t() era.b( '苍蓝的捕梦网', era.back, popup='什么都没有记得', color='blue', )
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)
def look(): global aa, bb, cc a.page() aa = False a.t('你四处张望,只有门缝下透着些许幽暗的光芒。', True) a.t() a.t('你看到自己站在床边,屋内还有一把椅子。', True) a.t() a.t('椅子上仿佛有个') a.t('黑影', style={'color': 'red'}) a.t('。') a.t() a.t() a.b('继续', a.back)
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', )
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)) a.h # 上面调用了 API 中的 h(head) 函数,是用来显示页面标题的(其实就是字号比较大的文字啦!),其用法为: # a.h(text) # 再接下来就是显示一行普通文本: a.t('with Era.js v{}'.format(a.version)) # 这是 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_data) a.t() # 换行 a.b('引擎模块/游戏脚本(Scripts)/DLC/MOD 教程', a.goto, ui_script) a.t() # 换行 a.b('退出游戏', a.exit) # 退出程序的方式
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)
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)
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)
def touch(): global aa, bb, cc a.page() bb = False a.t('你四处摸索,床是一张普通的床', True) a.t() a.t('屋内还有一把椅子。', True) a.t() a.t('椅子上有一个软软绵绵的东西', True) a.t() a.t('这种触感……', True) a.t('好熟悉……', style={'color': 'red'}) a.t() a.t() a.b('继续', a.back)
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)
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)
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)